On Mon, Apr 01, 2002 at 02:22:44PM -0800, Guy Harris wrote:
> On Mon, Apr 01, 2002 at 05:17:00PM -0500, Mike Frisch wrote:
> > This one fixes the decoding of the AUTHORIZE call...
> 
> Unfortunately, I get a "patch: **** misordered hunks! output would be
> garbled" error when I try to apply it, at least with
> 
>       cranford$ patch -v
>       Patch version 2.0, patch level 12u8
> 
> Try doing a "diff -c" or a "diff -u" rather than just a "diff".

Oops, my cygwin environment appears to be messed up...  this one is
created on Linux.

Mike.
Index: packet-hclnfsd.c
===================================================================
RCS file: /cvsroot/ethereal/packet-hclnfsd.c,v
retrieving revision 1.8
diff -u -r1.8 packet-hclnfsd.c
--- packet-hclnfsd.c    2002/01/12 10:24:46     1.8
+++ packet-hclnfsd.c    2002/04/01 22:26:02
@@ -75,6 +75,7 @@
 static int hf_hclnfsd_timesubmitted = -1;
 static int hf_hclnfsd_size = -1;
 static int hf_hclnfsd_copies = -1;
+static int hf_hclnfsd_auth_ident_obscure = -1;
 
 static gint ett_hclnfsd = -1;
 static gint ett_hclnfsd_gids = -1;
@@ -83,8 +84,8 @@
 static gint ett_hclnfsd_usernames = -1;
 static gint ett_hclnfsd_printqueues = -1;
 static gint ett_hclnfsd_printjob = -1;
+static gint ett_hclnfsd_auth_ident = -1;
 
-
 static int
 dissect_hclnfsd_gids(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
 {
@@ -149,15 +150,40 @@
        { 0, NULL }
 };
 
+void
+hclnfsd_decode_obscure(char *ident, int ident_len)
+{
+       int j, x, y;
 
+       for (x = -1, j = 0; j < ident_len; j++)
+       {
+               y = *ident;
+               x ^= *ident;
+               *ident++ = x;
+               x = y;
+       }
+}
+
+
 static int
 dissect_hclnfsd_authorize_call(tvbuff_t *tvb, int offset, packet_info *pinfo, 
proto_tree *tree)
 {
        guint32 request_type;
        guint32 ip;
+       char *ident = NULL;
+       char *username = NULL;
+       char *password = NULL;
+       int ident_len = 0;
+       int newoffset;
+       char *p;
+       proto_item *ident_item = NULL;
+       proto_tree *ident_tree = NULL;
 
        ip = tvb_get_ntohl(tvb, offset);
-       
ip=((ip&0x000000ff)<<24)|((ip&0x0000ff00)<<8)|((ip&0x00ff0000)>>8)|((ip&0xff000000)>>24);
+       ip = ((ip & 0x000000ff) << 24) | 
+               ((ip & 0x0000ff00) << 8) | 
+               ((ip & 0x00ff0000) >> 8) | 
+               ((ip & 0xff000000) >> 24);
        proto_tree_add_ipv4(tree, hf_hclnfsd_server_ip, tvb, offset, 4, ip);
        offset += 4;
 
@@ -166,11 +192,51 @@
                proto_tree_add_uint(tree, hf_hclnfsd_request_type, tvb, offset,
                        4, request_type);
        offset += 4;
+
+       offset = dissect_rpc_string(tvb, pinfo, tree, hf_hclnfsd_device, offset, 
+               NULL);
+
+       if (tree)
+       {
+               ident_item = proto_tree_add_text(tree, tvb, offset, -1,
+                       "Authentication Ident");
+
+               if (ident_item)
+               {
+                       ident_tree = proto_item_add_subtree(ident_item,
+                               ett_hclnfsd_auth_ident);
+
+                       if (ident_tree)
+                       {
+                               newoffset = dissect_rpc_string(tvb, pinfo, ident_tree,
+                                       hf_hclnfsd_auth_ident_obscure, offset, &ident);
+
+                               proto_item_set_len(ident_item, newoffset - offset);
+
+                               if (ident)
+                               {
+                                       ident_len = newoffset - offset;
 
-       offset = dissect_rpc_string(tvb, pinfo, tree, hf_hclnfsd_device, offset, NULL);
+                                       hclnfsd_decode_obscure(ident, ident_len);
 
-       offset = dissect_rpc_string(tvb, pinfo, tree, hf_hclnfsd_login, offset, NULL);
+                                       username = ident + 2;
+                                       password = username + strlen(username) + 1;
 
+                                       proto_tree_add_text(ident_tree, tvb, offset, 
ident_len,
+                                               "Username: %s", username);
+
+                                       proto_tree_add_text(ident_tree, tvb, offset, 
ident_len,
+                                               "Password: %s", password);
+
+                                       offset = newoffset;
+
+                                       g_free(ident);
+                                       ident = NULL;
+                               }
+                       }
+               }
+       }
+
        return offset;
 }
 
@@ -229,29 +295,8 @@
 static int
 dissect_hclnfsd_grp_to_number_reply(tvbuff_t *tvb, int offset, packet_info *pinfo, 
proto_tree *tree)
 {
-       guint32 ngrpnames, ngrpnames_i;
-       proto_tree *grptree = NULL;
-       proto_item *grpitem = NULL;
-
-       ngrpnames = tvb_get_ntohl(tvb, offset);
-       if (tree)
-       {
-               grpitem = proto_tree_add_text(tree, tvb, offset, 4, "Groups: %d",
-                       ngrpnames);
-
-               if (grpitem)
-                       grptree = proto_item_add_subtree(grpitem, ett_hclnfsd_groups);
-       }
-       offset += 4;
-
-       if (!grptree)
-               return offset;
-
-       for (ngrpnames_i = 0; ngrpnames_i < ngrpnames ; ngrpnames_i++)
-               offset = dissect_rpc_string(tvb, pinfo, grptree, 
-                       hf_hclnfsd_grpname, offset, NULL);
-       
-       return offset;
+       return dissect_rpc_string(tvb, pinfo, tree, hf_hclnfsd_grpname, offset, 
+               NULL);
 }
 
 
@@ -656,11 +701,6 @@
 void
 proto_register_hclnfsd(void)
 {
-#if 0
-       static struct true_false_string okfailed = { "Ok", "Failed" };
-       static struct true_false_string yesno = { "Yes", "No" };
-#endif
-               
        static hf_register_info hf[] = {
                { &hf_hclnfsd_request_type, {
                        "Request Type", "hclnfsd.request_type", FT_UINT32, BASE_DEC,
@@ -797,6 +837,10 @@
                { &hf_hclnfsd_host_ip, {
                        "Host IP", "hclnfsd.host_ip", FT_IPv4, BASE_DEC,
                        NULL, 0, "Host IP", HFILL }},
+
+               { &hf_hclnfsd_auth_ident_obscure, {
+                       "Obscure Ident", "hclnfsd.authorize.ident.obscure", FT_STRING,
+                       BASE_DEC        , NULL, 0, "Authentication Obscure Ident", 
HFILL }},
        };
        static gint *ett[] = {
                &ett_hclnfsd,
@@ -806,6 +850,7 @@
                &ett_hclnfsd_usernames,
                &ett_hclnfsd_printqueues,
                &ett_hclnfsd_printjob,
+               &ett_hclnfsd_auth_ident
        };
 
        proto_hclnfsd = proto_register_protocol("Hummingbird NFS Daemon", 

Reply via email to