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));