* libamu/mount_fs.c (print_nfs_args): print nfs_args->addr
authorErez Zadok <ezk@cs.sunysb.edu>
Tue, 18 Oct 2005 18:11:34 +0000 (18:11 +0000)
committerErez Zadok <ezk@cs.sunysb.edu>
Tue, 18 Oct 2005 18:11:34 +0000 (18:11 +0000)
correctly, depending if it's a pointer or not.

* conf/sa_dref/sa_dref_*.h: for each NFS_SA_DREF macro, also
#define NFS_ARGS_T_ADDR_IS_POINTER if nfs_args->addr is a pointer
or an embedded structure, so we can tell how to print it.

* libamu/mount_fs.c (print_nfs_args): print nfs_args->addrlen
field, if it exists.

* configure.in: check for nfs_args->addrlen field.

* wire-test/wire-test.c (main), libamu/mount_fs.c
(print_nfs_args), fixmount/fixmount.c (inetresport,
clnt_create_timeout), amq/pawd.c (transform_dir), amq/amq.c
(main), amd/srvr_nfs.c (find_nfs_srvr), amd/autil.c
(amfs_mount): document that as per POSIX, we don't need to set the
sa_len/sin_len fields in struct sockaddr/sockaddr_in.  The field
is used only internally in the kernel.  See
www.awprofessional.com/articles/article.asp?p=169505&seqNum=2&rl=1

* fixmount/fixmount.c (inetresport): initialize sockaddr_in
structure before filling in some fields.

22 files changed:
ChangeLog
NEWS
amd/autil.c
amd/srvr_nfs.c
amq/amq.c
amq/pawd.c
conf/autofs/autofs_solaris_v1.c
conf/autofs/autofs_solaris_v2_v3.c
conf/nfs_prot/nfs_prot_linux.h
conf/sa_dref/sa_dref_386bsd.h
conf/sa_dref/sa_dref_aix3.h
conf/sa_dref/sa_dref_aoi.h
conf/sa_dref/sa_dref_bsd44.h
conf/sa_dref/sa_dref_default.h
conf/sa_dref/sa_dref_isc3.h
conf/sa_dref/sa_dref_linux.h
conf/sa_dref/sa_dref_svr4.h
configure.in
fixmount/fixmount.c
libamu/mount_fs.c
libamu/xdr_func.c
wire-test/wire-test.c

index d48ccca191bae2af216e610b065917c2608fd45e..9084624b3a93e612e3ca116b4df772009d983a77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2005-10-18  Erez Zadok  <ezk@cs.sunysb.edu>
+
+       * libamu/mount_fs.c (print_nfs_args): print nfs_args->addr
+       correctly, depending if it's a pointer or not.
+
+       * conf/sa_dref/sa_dref_*.h: for each NFS_SA_DREF macro, also
+       #define NFS_ARGS_T_ADDR_IS_POINTER if nfs_args->addr is a pointer
+       or an embedded structure, so we can tell how to print it.
+
+       * libamu/mount_fs.c (print_nfs_args): print nfs_args->addrlen
+       field, if it exists.
+
+       * configure.in: check for nfs_args->addrlen field.
+
+       * wire-test/wire-test.c (main), libamu/mount_fs.c
+       (print_nfs_args), fixmount/fixmount.c (inetresport,
+       clnt_create_timeout), amq/pawd.c (transform_dir), amq/amq.c
+       (main), amd/srvr_nfs.c (find_nfs_srvr), amd/autil.c
+       (amfs_mount): document that as per POSIX, we don't need to set the
+       sa_len/sin_len fields in struct sockaddr/sockaddr_in.  The field
+       is used only internally in the kernel.  See
+       www.awprofessional.com/articles/article.asp?p=169505&seqNum=2&rl=1
+
+       * fixmount/fixmount.c (inetresport): initialize sockaddr_in
+       structure before filling in some fields.
+
 2005-10-11  Erez Zadok  <ezk@cs.sunysb.edu>
 
        * doc/am-utils.texi (nfs_vers, nfs_proto parameters): clarify and
diff --git a/NEWS b/NEWS
index 595cbc1a4ac61c429e715bcc51b99b5b159ff4eb..f3107a6d63d05905f969b02829300c25caf94075 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+*** Notes specific to am-utils version 6.2a2
+
+- Bugs fixed:
+       * correctly print nfs_args->addr info (sin_family/port/addr)
+
 *** Notes specific to am-utils version 6.2a1
 
 MAJOR BUG FIXES: Synchronize Amd's view of its file systems with the
index 0df4b93e433c9f51b84cc30fa6578d5e018830fb..bca590cb7173d993fdb15901e465d950a7676a94 100644 (file)
@@ -547,6 +547,7 @@ again:
      * Create sockaddr to point to the local machine.
      */
     memset((voidp) &sin, 0, sizeof(sin));
+    /* as per POSIX, sin_len need not be set (used internally by kernel) */
     sin.sin_family = AF_INET;
     sin.sin_addr = myipaddr;
     port = hasmntval(&mnt, MNTTAB_OPT_PORT);
index c7c73f15551bacb49c571c4b4c5f6b1221419067..750b9f81dea881b83796695068cfd9464751d60e 100644 (file)
@@ -771,6 +771,7 @@ find_nfs_srvr(mntfs *mf)
     case AF_INET:
       ip = ALLOC(struct sockaddr_in);
       memset((voidp) ip, 0, sizeof(*ip));
+      /* as per POSIX, sin_len need not be set (used internally by kernel) */
       ip->sin_family = AF_INET;
       memmove((voidp) &ip->sin_addr, (voidp) hp->h_addr, sizeof(ip->sin_addr));
       break;
index 14f37d5cdf8b0d789a33d1493f45e399b40f9d2d..e2966956821bafb9d4c316f1d9db08ea72f99ec5 100644 (file)
--- a/amq/amq.c
+++ b/amq/amq.c
@@ -434,7 +434,8 @@ Usage: %s [-fmpsvwHTU] [-h hostname] [-l log_file|\"syslog\"]\n\
            am_get_progname(), server);
     exit(1);
   }
-  memset(&server_addr, 0, sizeof server_addr);
+  memset(&server_addr, 0, sizeof(server_addr));
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
   server_addr.sin_family = AF_INET;
   if (hp) {
     memmove((voidp) &server_addr.sin_addr, (voidp) hp->h_addr,
index bf06cf684c470746240ef8ec54c0dc52746d0b56..39b1764a94b8b0f0e94ff90fd9e2a5e1c12cdf03 100644 (file)
@@ -197,6 +197,7 @@ transform_dir(char *dir)
   if ((hp = gethostbyname(server)) == NULL)
     return dir;
   memset(&server_addr, 0, sizeof(server_addr));
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
   server_addr.sin_family = AF_INET;
   server_addr.sin_addr = *(struct in_addr *) hp->h_addr;
 
index 11b44219811d47590b839cc5f561ec0aa154a485..7232743944c00a040a3bd815c9ed58ae16fa932f 100644 (file)
@@ -346,7 +346,7 @@ autofs_program_1(struct svc_req *rqstp, SVCXPRT *transp)
     return;
   }
 
-  memset((char *)&result, 0, sizeof (result));
+  memset((char *)&result, 0, sizeof(result));
   ret = (*local) (&argument, &result, rqstp, transp);
 
   current_transp = NULL;
index 422112f04ee7079652ca3ed53d76e814d9dede1a..639e35c79470b505a02d2ccdaccc798c3eeb3e40 100644 (file)
@@ -177,7 +177,7 @@ xdr_mounta(XDR *xdrs, struct mounta *objp)
     return (FALSE);
   if (!xdr_string(xdrs, &objp->fstype, AUTOFS_MAXCOMPONENTLEN))
     return (FALSE);
-  if (!xdr_pointer(xdrs, (char **)&objp->dataptr, sizeof (autofs_args),
+  if (!xdr_pointer(xdrs, (char **)&objp->dataptr, sizeof(autofs_args),
                   (XDRPROC_T_TYPE) xdr_autofs_args))
     return (FALSE);
   if (!xdr_int(xdrs, &objp->datalen))
@@ -212,7 +212,7 @@ xdr_action_list(XDR *xdrs, action_list *objp)
 {
   if (!xdr_action_list_entry(xdrs, &objp->action))
     return (FALSE);
-  if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof (action_list),
+  if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof(action_list),
                   (XDRPROC_T_TYPE) xdr_action_list))
     return (FALSE);
   return (TRUE);
@@ -274,7 +274,7 @@ xdr_postumntreq(XDR *xdrs, postumntreq *objp)
   if (!xdr_dev_t(xdrs, &objp->rdevid))
     return (FALSE);
   if (!xdr_pointer(xdrs, (char **)&objp->next,
-                  sizeof (struct postumntreq),
+                  sizeof(struct postumntreq),
                   (XDRPROC_T_TYPE) xdr_postumntreq))
     return (FALSE);
   return (TRUE);
@@ -357,7 +357,7 @@ xdr_mount_result_type(XDR *xdrs, mount_result_type *objp)
   case AUTOFS_ACTION:
     if (!xdr_pointer(xdrs,
                     (char **)&objp->mount_result_type_u.list,
-                    sizeof (action_list), (XDRPROC_T_TYPE) xdr_action_list))
+                    sizeof(action_list), (XDRPROC_T_TYPE) xdr_action_list))
       return (FALSE);
     break;
   case AUTOFS_DONE:
@@ -933,7 +933,7 @@ autofs_program_2(struct svc_req *rqstp, SVCXPRT *transp)
     return;
   }
 
-  memset((char *)&result, 0, sizeof (result));
+  memset((char *)&result, 0, sizeof(result));
   ret = (*local) (&argument, &result, rqstp->rq_clntcred, transp);
 
   current_transp = NULL;
index a9d0b4f2285f1602144c876ecfdf847b38df2ee7..599414326af95e1939d294c531a5963d9a530b4d 100644 (file)
@@ -269,7 +269,7 @@ typedef struct nfs_args nfs_args_t;
 # ifndef __FD_ZERO
 /* This line MUST be split!  Otherwise m4 will not change it.  */
 #  define __FD_ZERO(set)  \
-  ((void) memset ((__ptr_t) (set), 0, sizeof (fd_set)))
+  ((void) memset ((__ptr_t) (set), 0, sizeof(fd_set)))
 # endif /* not __FD_ZERO */
 # ifndef __FD_SET
 #  define __FD_SET(d, set)        ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
index ec0f15a79355a401b5a097d4c0801949a9771e81..2ebadad6353a622da8dcd8acb721032c031e0c43 100644 (file)
@@ -2,3 +2,4 @@
 #define        NFS_SA_DREF(dst, src) { \
                (dst)->addr = (struct sockaddr *) (src); \
        }
+#define NFS_ARGS_T_ADDR_IS_POINTER 1
index 095f596772cd7adf652e313ef81a6d736cb76519..782bcf081d3ee43c75c2f01d7ecb844cbe48741e 100644 (file)
@@ -1,2 +1,3 @@
 /* $srcdir/conf/sa_dref/sa_dref_aix3.h */
 #define        NFS_SA_DREF(dst, src) (dst)->addr = *(src)
+/* #undef NFS_ARGS_T_ADDR_IS_POINTER */
index 012ceeaa2d495da182d2ef1a20eb20b86bec1d34..4215c04852d27111f44651b678e6b3ec38dd8967 100644 (file)
@@ -4,3 +4,4 @@
                (dst)->addr->len = sizeof(struct sockaddr_in); \
                (dst)->addr->maxlen = sizeof(struct sockaddr_in); \
        }
+#define NFS_ARGS_T_ADDR_IS_POINTER 1
index e76c16b7b8b5bec11bf235a8b6ac03d7f3c8c483..a8075401477e228568b011fc431e2f3895745664 100644 (file)
@@ -3,3 +3,4 @@
                (dst)->addr = (struct sockaddr *) (src); \
                (dst)->addrlen = sizeof(*src); \
        }
+#define NFS_ARGS_T_ADDR_IS_POINTER 1
index 2f8e0cf753ecc0ca7f50824fbdc2e04baeb9314b..100a04a898a09919dd517ae592b74480fe596668 100644 (file)
@@ -1,2 +1,3 @@
 /* $srcdir/conf/sa_dref/sa_dref_default.h */
 #define        NFS_SA_DREF(dst, src) (dst)->addr = (src)
+#define NFS_ARGS_T_ADDR_IS_POINTER 1
index d1f6f3ca38ea18521a8df75552ba8b1b1ba7c4f4..43ece8c097cfe130692f02e562d646ef84e3f3b1 100644 (file)
@@ -4,3 +4,4 @@
                (dst)->raddr.len = sizeof(struct sockaddr_in); \
                (dst)->trans = 1; \
        }
+/* #undef NFS_ARGS_T_ADDR_IS_POINTER */
index b35115005249d0e566245fd6cdfc096786d8553a..50c4c130a75c779d4cbdccda279d7702f2688961 100644 (file)
@@ -1,2 +1,3 @@
 /* $srcdir/conf/sa_dref/sa_dref_linux.h */
 #define        NFS_SA_DREF(dst, src) memmove((char *)&dst->addr, (char *) src, sizeof(struct sockaddr_in))
+/* #undef NFS_ARGS_T_ADDR_IS_POINTER */
index 94bee12ac37db7d5873ed287cd8a5ef0c5d1da19..c4ecc49ea4ff15ff084c47463a04e1723232ec59 100644 (file)
@@ -4,3 +4,4 @@
                (dst)->addr->len = sizeof(struct sockaddr_in); \
                (dst)->addr->maxlen = sizeof(struct sockaddr_in); \
        }
+#define NFS_ARGS_T_ADDR_IS_POINTER 1
index e3c425cd58aafefe94af29353b4b382184272d12..0064c9ec3814c3105e1722a15c590fe68efc5b41 100644 (file)
@@ -55,7 +55,7 @@ AH_BOTTOM([
 dnl
 dnl AC_CONFIG_AUX_DIR(m4)
 AC_PREREQ(2.52)
-AC_REVISION($Revision: 1.120 $)
+AC_REVISION($Revision: 1.121 $)
 AC_COPYRIGHT([Copyright (c) 1997-2005 Erez Zadok])
 dnl find out system type
 AC_MSG_NOTICE(*** SYSTEM TYPES ***)
@@ -879,6 +879,7 @@ AMU_CHECK_FIELD(nfs_args_t.acdirmin)
 AMU_CHECK_FIELD(nfs_args_t.acdirmax)
 AMU_CHECK_FIELD(nfs_args_t.acregmin)
 AMU_CHECK_FIELD(nfs_args_t.acregmax)
+AMU_CHECK_FIELD(nfs_args_t.addrlen)
 AMU_CHECK_FIELD(nfs_args_t.bsize)
 AMU_CHECK_FIELD(nfs_args_t.fh_len)
 AMU_CHECK_FIELD(nfs_args_t.fhsize)
index 376d8c14721426c1cd466f4bd0d27da86781874a..df7fc7e9978db00cd325333c509abf1f0067e030 100644 (file)
@@ -490,8 +490,10 @@ inetresport(int ty)
   struct sockaddr_in addr;
   int fd;
 
-  /* Use internet address family */
-  addr.sin_family = AF_INET;
+  memset(&addr, 0, sizeof(addr));
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
+
+  addr.sin_family = AF_INET;   /* use internet address family */
   addr.sin_addr.s_addr = INADDR_ANY;
   if ((fd = socket(AF_INET, ty, 0)) < 0)
     return -1;
@@ -561,7 +563,8 @@ clnt_create_timeout(char *host, struct timeval *tvp)
     fprintf(stderr, "can't get address of %s\n", host);
     return NULL;
   }
-  memset(&host_addr, 0, sizeof host_addr);
+  memset(&host_addr, 0, sizeof(host_addr));
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
   host_addr.sin_family = AF_INET;
   if (hp) {
     memmove((voidp) &host_addr.sin_addr, (voidp) hp->h_addr,
index e3b6b846a3431dc7880bf3d3f208b7c56fc21734..a9e999a3dd7cfa3d529e8277bc851dbcd61f4bf4 100644 (file)
@@ -865,7 +865,7 @@ get_hex_string(u_int len, const char *fhdata)
 void
 print_nfs_args(const nfs_args_t *nap, u_long nfs_version)
 {
-   int fhlen = 32;     /* default: NFS V.2 file handle length is 32 */
+  int fhlen = 32;      /* default: NFS V.2 file handle length is 32 */
 #ifdef HAVE_TRANSPORT_TYPE_TLI
   struct netbuf *nbp;
   struct knetconfig *kncp;
@@ -900,18 +900,26 @@ print_nfs_args(const nfs_args_t *nap, u_long nfs_version)
   plog(XLOG_DEBUG, "NA->knconf->rdev %lu", (u_long) kncp->knc_rdev);
   /* don't print knconf->unused field */
 #else /* not HAVE_TRANSPORT_TYPE_TLI */
-  sap = (struct sockaddr_in *) &nap->addr;
+# ifdef NFS_ARGS_T_ADDR_IS_POINTER
+    sap = (struct sockaddr_in *) nap->addr;
+# else /* not NFS_ARGS_T_ADDR_IS_POINTER */
+    sap = (struct sockaddr_in *) &nap->addr;
+# endif /* not NFS_ARGS_T_ADDR_IS_POINTER */
   plog(XLOG_DEBUG, "NA->addr {sockaddr_in} (len=%d) = \"%s\"",
        (int) sizeof(struct sockaddr_in),
        get_hex_string(sizeof(struct sockaddr_in), (const char *)sap));
 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
-  plog(XLOG_DEBUG, "NA->addr.sin_len = \"%d\"", sap->sin_len);
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
+  plog(XLOG_DEBUG, "NA->addr.sin_len = %d", sap->sin_len);
 #endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
-  plog(XLOG_DEBUG, "NA->addr.sin_family = \"%d\"", sap->sin_family);
-  plog(XLOG_DEBUG, "NA->addr.sin_port = \"%d\"", sap->sin_port);
+  plog(XLOG_DEBUG, "NA->addr.sin_family = %d", sap->sin_family);
+  plog(XLOG_DEBUG, "NA->addr.sin_port = %d", sap->sin_port);
   plog(XLOG_DEBUG, "NA->addr.sin_addr = \"%s\"",
        get_hex_string(sizeof(struct in_addr), (const char *) &sap->sin_addr));
 #endif /* not HAVE_TRANSPORT_TYPE_TLI */
+#ifdef HAVE_NFS_ARGS_T_ADDRLEN
+  plog(XLOG_DEBUG, "NA->addrlen = %d", nap->addrlen);
+#endif /* ifdef HAVE_NFS_ARGS_T_ADDRLEN */
 
   plog(XLOG_DEBUG, "NA->hostname = \"%s\"", nap->hostname ? nap->hostname : "null");
 #ifdef HAVE_NFS_ARGS_T_NAMLEN
index d38fb9be206ac17b1247f5b9f8d2bc605570c5f8..24bf99a9d1aa2f5f4266ec4594ca1b29971b76df 100644 (file)
@@ -945,7 +945,7 @@ xdr_am_mountres3_ok(XDR *xdrs, am_mountres3_ok *objp)
                 (char **)&objp->auth_flavors.auth_flavors_val,
                 (u_int *) &objp->auth_flavors.auth_flavors_len,
                 ~0,
-                sizeof (int),
+                sizeof(int),
                 (xdrproc_t) xdr_int))
     return (FALSE);
   return (TRUE);
index 4f5490e5fc9e301d637327ce54b9bd39f92de4cc..d75f090991756f9fbf9d4a697984960947814463 100644 (file)
@@ -97,6 +97,7 @@ main(int argc, char **argv)
   }
   ip = (struct sockaddr_in *) xmalloc(sizeof(struct sockaddr_in));
   memset((voidp) ip, 0, sizeof(*ip));
+  /* as per POSIX, sin_len need not be set (used internally by kernel) */
   ip->sin_family = AF_INET;
   memmove((voidp) &ip->sin_addr, (voidp) hp->h_addr, sizeof(ip->sin_addr));
   ip->sin_port = htons(NFS_PORT);