aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-hclnfsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-hclnfsd.c')
-rw-r--r--epan/dissectors/packet-hclnfsd.c19
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,