hi.
i made patch to fix followings.

- parsefattr misuses nfsv2 version members for v3.
- print_int64 prints at least 9 digits unnecessarily.
- -u flag doesn't always suppress decoding handles.

---
YAMAMOTO Takashi <[EMAIL PROTECTED]>
Index: print-nfs.c
===================================================================
RCS file: /cvs/cvsroot/basesrc/dist/tcpdump/print-nfs.c,v
retrieving revision 1.7
diff -u -p -r1.7 print-nfs.c
--- print-nfs.c 2002/06/02 15:50:40     1.7
+++ print-nfs.c 2002/08/25 14:02:33
@@ -204,12 +204,18 @@ static int print_int64(const u_int32_t *
                return (0);
        }
 #else
+       u_int32_t high;
+
+       high = (u_int32_t)ntohl(dp[0]);
+
        switch (how) {
        case SIGNED:
        case UNSIGNED:
        case HEX:
-               printf("0x%x%08x", (u_int32_t)ntohl(dp[0]),
-                   (u_int32_t)ntohl(dp[1]));
+               if (high != 0)
+                       printf("0x%x%08x", high, (u_int32_t)ntohl(dp[1]));
+               else
+                       printf("0x%x", (u_int32_t)ntohl(dp[1]));
                break;
        default:
                return (0);
@@ -772,6 +778,19 @@ nfs_printfh(register const u_int32_t *dp
        const char *sfsname = NULL;
        char *spacep;
 
+       if (uflag) {
+               int i;
+               char const *sep = "";
+
+               printf(" fh[");
+               for (i=0; i<len; i++) {
+                       (void)printf("%s%x", sep, dp[i]);
+                       sep = ":";
+               }
+               printf("]");
+               return;
+       }
+
        Parse_fh((const u_char *)dp, len, &fsid, &ino, NULL, &sfsname, 0);
 
        if (sfsname) {
@@ -792,7 +811,7 @@ nfs_printfh(register const u_int32_t *dp
                             fsid.Fsid_dev.Major, fsid.Fsid_dev.Minor);
        }
 
-       if(fsid.Fsid_dev.Minor == 257 && uflag)
+       if(fsid.Fsid_dev.Minor == 257)
                /* Print the undecoded handle */ 
                (void)printf("%s", fsid.Opaque_Handle);
        else
@@ -1080,9 +1099,9 @@ parsefattr(const u_int32_t *dp, int verb
                               (u_int32_t) ntohl(fap->fa3_rdev.specdata1),
                               (u_int32_t) ntohl(fap->fa3_rdev.specdata2));
                        printf("fsid ");
-                       print_int64((u_int32_t *)&fap->fa2_fsid, HEX);
+                       print_int64((u_int32_t *)&fap->fa3_fsid, HEX);
                        printf(" nodeid ");
-                       print_int64((u_int32_t *)&fap->fa2_fileid, HEX);
+                       print_int64((u_int32_t *)&fap->fa3_fileid, HEX);
                        printf(" a/m/ctime %u.%06u ",
                               (u_int32_t) ntohl(fap->fa3_atime.nfsv3_sec),
                               (u_int32_t) ntohl(fap->fa3_atime.nfsv3_nsec));

Reply via email to