From: Erez Zadok Date: Tue, 18 Oct 2005 18:11:34 +0000 (+0000) Subject: * libamu/mount_fs.c (print_nfs_args): print nfs_args->addr X-Git-Tag: am-utils-6_2a2~34 X-Git-Url: https://git.fsl.cs.stonybrook.edu/?a=commitdiff_plain;h=76c504394113dc8e574d894cad58f7f9cd3f7cc9;p=am-utils-6.0.git * 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. --- diff --git a/ChangeLog b/ChangeLog index d48ccca..9084624 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2005-10-18 Erez Zadok + + * 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 * doc/am-utils.texi (nfs_vers, nfs_proto parameters): clarify and diff --git a/NEWS b/NEWS index 595cbc1..f3107a6 100644 --- 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 diff --git a/amd/autil.c b/amd/autil.c index 0df4b93..bca590c 100644 --- a/amd/autil.c +++ b/amd/autil.c @@ -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); diff --git a/amd/srvr_nfs.c b/amd/srvr_nfs.c index c7c73f1..750b9f8 100644 --- a/amd/srvr_nfs.c +++ b/amd/srvr_nfs.c @@ -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; diff --git a/amq/amq.c b/amq/amq.c index 14f37d5..e296695 100644 --- 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, diff --git a/amq/pawd.c b/amq/pawd.c index bf06cf6..39b1764 100644 --- a/amq/pawd.c +++ b/amq/pawd.c @@ -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; diff --git a/conf/autofs/autofs_solaris_v1.c b/conf/autofs/autofs_solaris_v1.c index 11b4421..7232743 100644 --- a/conf/autofs/autofs_solaris_v1.c +++ b/conf/autofs/autofs_solaris_v1.c @@ -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; diff --git a/conf/autofs/autofs_solaris_v2_v3.c b/conf/autofs/autofs_solaris_v2_v3.c index 422112f..639e35c 100644 --- a/conf/autofs/autofs_solaris_v2_v3.c +++ b/conf/autofs/autofs_solaris_v2_v3.c @@ -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; diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h index a9d0b4f..5994143 100644 --- a/conf/nfs_prot/nfs_prot_linux.h +++ b/conf/nfs_prot/nfs_prot_linux.h @@ -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)) diff --git a/conf/sa_dref/sa_dref_386bsd.h b/conf/sa_dref/sa_dref_386bsd.h index ec0f15a..2ebadad 100644 --- a/conf/sa_dref/sa_dref_386bsd.h +++ b/conf/sa_dref/sa_dref_386bsd.h @@ -2,3 +2,4 @@ #define NFS_SA_DREF(dst, src) { \ (dst)->addr = (struct sockaddr *) (src); \ } +#define NFS_ARGS_T_ADDR_IS_POINTER 1 diff --git a/conf/sa_dref/sa_dref_aix3.h b/conf/sa_dref/sa_dref_aix3.h index 095f596..782bcf0 100644 --- a/conf/sa_dref/sa_dref_aix3.h +++ b/conf/sa_dref/sa_dref_aix3.h @@ -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 */ diff --git a/conf/sa_dref/sa_dref_aoi.h b/conf/sa_dref/sa_dref_aoi.h index 012ceea..4215c04 100644 --- a/conf/sa_dref/sa_dref_aoi.h +++ b/conf/sa_dref/sa_dref_aoi.h @@ -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 diff --git a/conf/sa_dref/sa_dref_bsd44.h b/conf/sa_dref/sa_dref_bsd44.h index e76c16b..a807540 100644 --- a/conf/sa_dref/sa_dref_bsd44.h +++ b/conf/sa_dref/sa_dref_bsd44.h @@ -3,3 +3,4 @@ (dst)->addr = (struct sockaddr *) (src); \ (dst)->addrlen = sizeof(*src); \ } +#define NFS_ARGS_T_ADDR_IS_POINTER 1 diff --git a/conf/sa_dref/sa_dref_default.h b/conf/sa_dref/sa_dref_default.h index 2f8e0cf..100a04a 100644 --- a/conf/sa_dref/sa_dref_default.h +++ b/conf/sa_dref/sa_dref_default.h @@ -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 diff --git a/conf/sa_dref/sa_dref_isc3.h b/conf/sa_dref/sa_dref_isc3.h index d1f6f3c..43ece8c 100644 --- a/conf/sa_dref/sa_dref_isc3.h +++ b/conf/sa_dref/sa_dref_isc3.h @@ -4,3 +4,4 @@ (dst)->raddr.len = sizeof(struct sockaddr_in); \ (dst)->trans = 1; \ } +/* #undef NFS_ARGS_T_ADDR_IS_POINTER */ diff --git a/conf/sa_dref/sa_dref_linux.h b/conf/sa_dref/sa_dref_linux.h index b351150..50c4c13 100644 --- a/conf/sa_dref/sa_dref_linux.h +++ b/conf/sa_dref/sa_dref_linux.h @@ -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 */ diff --git a/conf/sa_dref/sa_dref_svr4.h b/conf/sa_dref/sa_dref_svr4.h index 94bee12..c4ecc49 100644 --- a/conf/sa_dref/sa_dref_svr4.h +++ b/conf/sa_dref/sa_dref_svr4.h @@ -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 diff --git a/configure.in b/configure.in index e3c425c..0064c9e 100644 --- a/configure.in +++ b/configure.in @@ -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) diff --git a/fixmount/fixmount.c b/fixmount/fixmount.c index 376d8c1..df7fc7e 100644 --- a/fixmount/fixmount.c +++ b/fixmount/fixmount.c @@ -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, diff --git a/libamu/mount_fs.c b/libamu/mount_fs.c index e3b6b84..a9e999a 100644 --- a/libamu/mount_fs.c +++ b/libamu/mount_fs.c @@ -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 diff --git a/libamu/xdr_func.c b/libamu/xdr_func.c index d38fb9b..24bf99a 100644 --- a/libamu/xdr_func.c +++ b/libamu/xdr_func.c @@ -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); diff --git a/wire-test/wire-test.c b/wire-test/wire-test.c index 4f5490e..d75f090 100644 --- a/wire-test/wire-test.c +++ b/wire-test/wire-test.c @@ -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);