]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-sunrpc.c
add support for AS-PIC cookies
[tcpdump] / print-sunrpc.c
index b4257cfa4d80beee73c1ec7d413add6eb1437957..ffedd91e1b78caca3d11c808ae12cb50637b5287 100644 (file)
@@ -20,8 +20,8 @@
  */
 
 #ifndef lint
-static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-sunrpc.c,v 1.42 2002-09-05 00:00:22 guy Exp $ (LBL)";
+static const char rcsid[] _U_ =
+    "@(#) $Header: /tcpdump/master/tcpdump/print-sunrpc.c,v 1.46.2.1 2005-04-27 21:44:06 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -30,33 +30,37 @@ static const char rcsid[] =
 
 #include <tcpdump-stdinc.h>
 
+#ifdef HAVE_GETRPCBYNUMBER
 #include <rpc/rpc.h>
 #ifdef HAVE_RPC_RPCENT_H
 #include <rpc/rpcent.h>
-#endif
-#ifndef WIN32
-#include <rpc/pmap_prot.h>
-#endif /* WIN32 */
+#endif /* HAVE_RPC_RPCENT_H */
+#endif /* HAVE_GETRPCBYNUMBER */
 
 #include <stdio.h>
 #include <string.h>
 
 #include "interface.h"
 #include "addrtoname.h"
+#include "extract.h"
 
 #include "ip.h"
 #ifdef INET6
 #include "ip6.h"
 #endif
 
+#include "rpc_auth.h"
+#include "rpc_msg.h"
+#include "pmap_prot.h"
+
 static struct tok proc2str[] = {
-       { PMAPPROC_NULL,        "null" },
-       { PMAPPROC_SET,         "set" },
-       { PMAPPROC_UNSET,       "unset" },
-       { PMAPPROC_GETPORT,     "getport" },
-       { PMAPPROC_DUMP,        "dump" },
-       { PMAPPROC_CALLIT,      "call" },
-       { 0,                    NULL }
+       { SUNRPC_PMAPPROC_NULL,         "null" },
+       { SUNRPC_PMAPPROC_SET,          "set" },
+       { SUNRPC_PMAPPROC_UNSET,        "unset" },
+       { SUNRPC_PMAPPROC_GETPORT,      "getport" },
+       { SUNRPC_PMAPPROC_DUMP,         "dump" },
+       { SUNRPC_PMAPPROC_CALLIT,       "call" },
+       { 0,                            NULL }
 };
 
 /* Forwards */
@@ -66,7 +70,7 @@ void
 sunrpcrequest_print(register const u_char *bp, register u_int length,
                    register const u_char *bp2)
 {
-       register const struct rpc_msg *rp;
+       register const struct sunrpc_msg *rp;
        register const struct ip *ip;
 #ifdef INET6
        register const struct ip6_hdr *ip6;
@@ -74,16 +78,16 @@ sunrpcrequest_print(register const u_char *bp, register u_int length,
        u_int32_t x;
        char srcid[20], dstid[20];      /*fits 32bit*/
 
-       rp = (struct rpc_msg *)bp;
+       rp = (struct sunrpc_msg *)bp;
 
        if (!nflag) {
                snprintf(srcid, sizeof(srcid), "0x%x",
-                   (u_int32_t)ntohl(rp->rm_xid));
+                   EXTRACT_32BITS(&rp->rm_xid));
                strlcpy(dstid, "sunrpc", sizeof(dstid));
        } else {
                snprintf(srcid, sizeof(srcid), "0x%x",
-                   (u_int32_t)ntohl(rp->rm_xid));
-               snprintf(dstid, sizeof(dstid), "0x%x", PMAPPORT);
+                   EXTRACT_32BITS(&rp->rm_xid));
+               snprintf(dstid, sizeof(dstid), "0x%x", SUNRPC_PMAPPORT);
        }
 
        switch (IP_V((struct ip *)bp2)) {
@@ -107,23 +111,23 @@ sunrpcrequest_print(register const u_char *bp, register u_int length,
        }
 
        printf(" %s", tok2str(proc2str, " proc #%u",
-           (u_int32_t)ntohl(rp->rm_call.cb_proc)));
-       x = ntohl(rp->rm_call.cb_rpcvers);
+           EXTRACT_32BITS(&rp->rm_call.cb_proc)));
+       x = EXTRACT_32BITS(&rp->rm_call.cb_rpcvers);
        if (x != 2)
                printf(" [rpcver %u]", x);
 
-       switch (ntohl(rp->rm_call.cb_proc)) {
+       switch (EXTRACT_32BITS(&rp->rm_call.cb_proc)) {
 
-       case PMAPPROC_SET:
-       case PMAPPROC_UNSET:
-       case PMAPPROC_GETPORT:
-       case PMAPPROC_CALLIT:
-               x = ntohl(rp->rm_call.cb_prog);
+       case SUNRPC_PMAPPROC_SET:
+       case SUNRPC_PMAPPROC_UNSET:
+       case SUNRPC_PMAPPROC_GETPORT:
+       case SUNRPC_PMAPPROC_CALLIT:
+               x = EXTRACT_32BITS(&rp->rm_call.cb_prog);
                if (!nflag)
                        printf(" %s", progstr(x));
                else
                        printf(" %u", x);
-               printf(".%u", (u_int32_t)ntohl(rp->rm_call.cb_vers));
+               printf(".%u", EXTRACT_32BITS(&rp->rm_call.cb_vers));
                break;
        }
 }
@@ -132,7 +136,7 @@ static char *
 progstr(prog)
        u_int32_t prog;
 {
-#ifndef WIN32
+#ifdef HAVE_GETRPCBYNUMBER
        register struct rpcent *rp;
 #endif
        static char buf[32];
@@ -140,12 +144,12 @@ progstr(prog)
 
        if (lastprog != 0 && prog == lastprog)
                return (buf);
-#ifndef WIN32
+#ifdef HAVE_GETRPCBYNUMBER
        rp = getrpcbynumber(prog);
        if (rp == NULL)
-#endif /* WIN32 */
+#endif
                (void) snprintf(buf, sizeof(buf), "#%u", prog);
-#ifndef WIN32
+#ifdef HAVE_GETRPCBYNUMBER
        else
                strlcpy(buf, rp->r_name, sizeof(buf));
 #endif