diff options
Diffstat (limited to 'epan/dissectors/packet-hclnfsd.c')
-rw-r--r-- | epan/dissectors/packet-hclnfsd.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/epan/dissectors/packet-hclnfsd.c b/epan/dissectors/packet-hclnfsd.c index a626126926..f1a0d537b0 100644 --- a/epan/dissectors/packet-hclnfsd.c +++ b/epan/dissectors/packet-hclnfsd.c @@ -144,18 +144,24 @@ static const value_string names_request_type[] = { { 0, NULL } }; -static void -hclnfsd_decode_obscure(char *ident, int ident_len) +static char * +hclnfsd_decode_obscure(const char *ident, int ident_len) { + char *ident_decoded, *ident_out; int j, x, y; + ident_decoded = ep_alloc(ident_len); + ident_out = ident_decoded; for (x = -1, j = 0; j < ident_len; j++) { y = *ident; x ^= *ident; - *ident++ = x; + *ident_out = x; x = y; + ident++; + ident_out++; } + return ident_decoded; } @@ -163,7 +169,8 @@ static int dissect_hclnfsd_authorize_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) { guint32 request_type; - char *ident = NULL; + const char *ident = NULL; + char *ident_decoded; char *username = NULL; char *password = NULL; int ident_len = 0; @@ -204,9 +211,9 @@ dissect_hclnfsd_authorize_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_ proto_item_set_len(ident_item, ident_len); - hclnfsd_decode_obscure(ident, ident_len); + ident_decoded = hclnfsd_decode_obscure(ident, ident_len); - username = ident + 2; + username = ident_decoded + 2; password = username + strlen(username) + 1; proto_tree_add_text(ident_tree, tvb, offset, ident_len, |