From 41f4e18791c2cd4496bebd392a89b80bdd878758 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 29 Feb 2016 16:26:12 +0800 Subject: [PATCH 01/57] - fix Linux NFS recognition of umounts and add systemd dependency on nfs-lock.service. --- ...fix-Linux-NFS-recognition-of-umounts.patch | 39 +++++++++++++++++++ am-utils.spec | 9 ++++- amd.service | 2 +- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch diff --git a/am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch b/am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch new file mode 100644 index 0000000..6513e19 --- /dev/null +++ b/am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch @@ -0,0 +1,39 @@ +am-utils-6.2 - fix Linux NFS recognition of umounts + +From: Ian Kent + +Recent Linux NFS uses a simulated attibute cache change detection +method based on ctime. Consequenty the amd use of mtime for this +doesn't work properly for some kernel versions. + +The problem seen with some kernel versions is a failure to recognize +umounts. + +Updating the parent ctime in step with mtime during umount appears +to fix the problem. + +Signed-off-by: Ian Kent +--- + amd/autil.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/amd/autil.c b/amd/autil.c +index cd9514d..efd18ef 100644 +--- a/amd/autil.c ++++ b/amd/autil.c +@@ -709,10 +709,13 @@ am_unmounted(am_node *mp) + --mp->am_parent->am_fattr.na_nlink; + + /* +- * Update mtime of parent node ++ * Update mtime and ctime of parent node (as ctime is needed for some ++ * Linux NFS kernel versions to properly recognize attribute changes). + */ +- if (mp->am_parent && mp->am_parent->am_al->al_mnt) ++ if (mp->am_parent && mp->am_parent->am_al->al_mnt) { + clocktime(&mp->am_parent->am_fattr.na_mtime); ++ mp->am_parent->am_fattr.na_ctime = mp->am_parent->am_fattr.na_mtime; ++ } + + if (mp->am_parent && (mp->am_flags & AMF_REMOUNT)) { + char *fname = xstrdup(mp->am_name); diff --git a/am-utils.spec b/am-utils.spec index 7a2ca91..05ab597 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 9%{?dist} +Release: 10%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -50,6 +50,8 @@ Patch4: am-utils-6.2-fix-NFSv3-lookup-dir-attribute-return-value.patch Patch5: am-utils-6.2-fix-NFSv3-readdir-post_op_dir-attributes-return.patch Patch6: am-utils-6.2-fix-NFSv3-unlink3_or_rmdir3-post_op-attributes-return.patch +Patch7: am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -79,6 +81,7 @@ mounting and unmounting filesystems. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 ./bootstrap @@ -190,6 +193,10 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Feb 29 2016 Ian Kent - 5:6.2.0-10 +- fix Linux NFS recognition of umounts. +- add systemd dependency on nfs-lock.service. + * Tue Feb 2 2016 Ian Kent - 5:6.2.0-9 - Update Requires: portmap to Requires: rpcbind. diff --git a/amd.service b/amd.service index 0ca9365..e20da2e 100644 --- a/amd.service +++ b/amd.service @@ -1,7 +1,7 @@ [Unit] Description=automount daemon that mounts devices and NFS hosts on demand After=syslog.target network.target network-online.target rpcbind.service -Wants=network-online.target rpcbind.service +Wants=network-online.target rpcbind.service nfs-lock.service [Service] EnvironmentFile=-/etc/sysconfig/amd From c3388d3bddc9ffc6be2f8c41392f195c09f143c8 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 29 Feb 2016 16:29:53 +0800 Subject: [PATCH 02/57] - bump revision as a result of previous merge. --- am-utils.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index f450d6b..9e17832 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 10%{?dist} +Release: 11%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -193,7 +193,7 @@ fi %{_libdir}/libamu.so* %changelog -* Mon Feb 29 2016 Ian Kent - 5:6.2.0-10 +* Mon Feb 29 2016 Ian Kent - 5:6.2.0-11 - fix Linux NFS recognition of umounts. - add systemd dependency on nfs-lock.service. From eb3e2668919e84e7f8147bff590e1c0c9b996ab7 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Fri, 4 Mar 2016 06:52:13 +0800 Subject: [PATCH 03/57] - fix unusual NFS kernel client problem and add several fixes. --- ...-NFSv3-nfs_quick_reply-functionality.patch | 241 ++++++++++++++++++ ...6.2-add-NFSv3-rpc-request-validation.patch | 127 +++++++++ ..._nfs_xprt-and-put_nfs_xprt-functions.patch | 170 ++++++++++++ ...-wcc-attr-usage-in-unlink3_or_rmdir3.patch | 52 ++++ ...ls-6.2-use-linux-libtirpc-if-present.patch | 93 +++++++ ..._nfs_xprt-and-put_nfs_xprt-functions.patch | 60 +++++ am-utils.spec | 25 +- 7 files changed, 767 insertions(+), 1 deletion(-) create mode 100644 am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch create mode 100644 am-utils-6.2-add-NFSv3-rpc-request-validation.patch create mode 100644 am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch create mode 100644 am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch create mode 100644 am-utils-6.2-use-linux-libtirpc-if-present.patch create mode 100644 am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch diff --git a/am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch b/am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch new file mode 100644 index 0000000..8aaf65f --- /dev/null +++ b/am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch @@ -0,0 +1,241 @@ +am-utils-6.2 - add NFSv3 nfs_quick_reply() functionality + +From: Ian Kent + +The implementation of the NFS v3 server does not use the hack needed +by the nfs_quick_reply() function. + +Now that saving the current transort for later use by nfs_quick_reply() +avoids concurrency races it should be ok to use it. + +Signed-off-by: Ian Kent +--- + amd/nfs_prot_svc.c | 13 +++++ + amd/nfs_subr.c | 137 +++++++++++++++++++++++++++++++++++++++++----------- + 2 files changed, 120 insertions(+), 30 deletions(-) + +diff --git a/amd/nfs_prot_svc.c b/amd/nfs_prot_svc.c +index cbde172..29b7551 100644 +--- a/amd/nfs_prot_svc.c ++++ b/amd/nfs_prot_svc.c +@@ -180,7 +180,7 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) + xdr_result = (xdrproc_t) xdr_diropres; + local = (nfssvcproc_t) nfsproc_lookup_2_svc; + /* +- * Cheap way to pass transp down to amfs_auto_lookuppn so it can ++ * Cheap way to pass transp down to amfs_auto_lookup so it can + * be stored in the am_node structure and later used for + * quick_reply(). + */ +@@ -327,6 +327,8 @@ nfs_program_3(struct svc_req *rqstp, register SVCXPRT *transp) + xdrproc_t _xdr_argument, _xdr_result; + nfssvcproc_t local; + ++ current_transp = NULL; ++ + switch (rqstp->rq_proc) { + case AM_NFS3_NULL: + _xdr_argument = (xdrproc_t) xdr_void; +@@ -350,6 +352,12 @@ nfs_program_3(struct svc_req *rqstp, register SVCXPRT *transp) + _xdr_argument = (xdrproc_t) xdr_am_LOOKUP3args; + _xdr_result = (xdrproc_t) xdr_am_LOOKUP3res; + local = (nfssvcproc_t) (char *(*)(char *, struct svc_req *)) am_nfs3_lookup_3_svc; ++ /* ++ * Cheap way to pass transp down to amfs_auto_lookup so it can ++ * be stored in the am_node structure and later used for ++ * quick_reply(). ++ */ ++ current_transp = transp; + break; + + case AM_NFS3_ACCESS: +@@ -476,6 +484,9 @@ nfs_program_3(struct svc_req *rqstp, register SVCXPRT *transp) + } + + result = (*local) (&argument, rqstp); ++ ++ current_transp = NULL; ++ + if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) { + svcerr_systemerr (transp); + } +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index 07d960d..a383618 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -87,6 +87,9 @@ struct am_fh3 { + }; + + /* forward declarations */ ++static int nfs_quick_reply2(am_node *mp, int error); ++static int nfs_quick_reply3(am_node *mp, int error); ++ + /* converting am-filehandles to mount-points */ + static am_node *fh_to_mp3(am_nfs_fh *fhp, int *rp, int vop); + static am_node *fh_to_mp(am_nfs_fh *fhp); +@@ -255,46 +258,65 @@ nfsproc_lookup_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) + return &res; + } + +- + void + nfs_quick_reply(am_node *mp, int error) + { +- SVCXPRT *transp = mp->am_transp; +- nfsdiropres res; +- xdrproc_t xdr_result = (xdrproc_t) xdr_diropres; ++ int ret; + + /* +- * If there's a transp structure then we can reply to the client's +- * nfs lookup request. ++ * If there's no transp structure then we can't reply to the ++ * client's nfs lookup request. + */ +- if (transp) { +- if (error == 0) { +- /* +- * Construct a valid reply to a lookup request. Same +- * code as in nfsproc_lookup_2_svc() above. +- */ +- mp_to_fh(mp, &res.dr_u.dr_drok_u.drok_fhandle); +- res.dr_u.dr_drok_u.drok_attributes = mp->am_fattr; +- res.dr_status = NFS_OK; +- } else +- /* +- * Return the error that was passed to us. +- */ +- res.dr_status = nfs_error(error); ++ if (!mp->am_transp) ++ return; ++ ++ if (nfs_dispatcher == nfs_program_2) ++ ret = nfs_quick_reply2(mp, error); ++ else ++ ret = nfs_quick_reply3(mp, error); ++ ++ if (!ret) ++ svcerr_systemerr(mp->am_transp); ++ ++ /* ++ * Free up transp. It's only used for one reply. ++ */ ++ put_nfs_xprt(mp->am_transp); ++ mp->am_transp = NULL; ++ dlog("Quick reply sent for %s", mp->am_al->al_mnt->mf_mount); ++} + ++ ++static int ++nfs_quick_reply2(am_node *mp, int error) ++{ ++ SVCXPRT *transp = mp->am_transp; ++ nfsdiropres res; ++ xdrproc_t xdr_result = (xdrproc_t) xdr_diropres; ++ int ret; ++ ++ if (error == 0) { + /* +- * Send off our reply ++ * Construct a valid reply to a lookup request. Same ++ * code as in nfsproc_lookup_2_svc() above. + */ +- if (!svc_sendreply(transp, (XDRPROC_T_TYPE) xdr_result, (SVC_IN_ARG_TYPE) & res)) +- svcerr_systemerr(transp); +- ++ mp_to_fh(mp, &res.dr_u.dr_drok_u.drok_fhandle); ++ res.dr_u.dr_drok_u.drok_attributes = mp->am_fattr; ++ res.dr_status = NFS_OK; ++ } else + /* +- * Free up transp. It's only used for one reply. ++ * Return the error that was passed to us. + */ +- put_nfs_xprt(mp->am_transp); +- mp->am_transp = NULL; +- dlog("Quick reply sent for %s", mp->am_al->al_mnt->mf_mount); +- } ++ res.dr_status = nfs_error(error); ++ ++ /* ++ * Send off our reply ++ */ ++ ret = svc_sendreply(transp, ++ (XDRPROC_T_TYPE) xdr_result, ++ (SVC_IN_ARG_TYPE) & res); ++ ++ return ret; + } + + +@@ -890,6 +912,8 @@ mp_to_fh(am_node *mp, am_nfs_fh *fhp) + /* dlog("mp_to_fh: old filehandle: %d", fp->u.s.fhh_id); */ + } + } ++ ++ + void + mp_to_fh3(am_node *mp, am_nfs_fh3 *fhp) + { +@@ -1257,6 +1281,61 @@ am_nfs3_lookup_3_svc(am_LOOKUP3args *argp, struct svc_req *rqstp) + return &result; + } + ++ ++static int ++nfs_quick_reply3(am_node *mp, int error) ++{ ++ SVCXPRT *transp = mp->am_transp; ++ xdrproc_t xdr_result = (xdrproc_t) xdr_am_LOOKUP3res; ++ am_LOOKUP3res result; ++ am_post_op_attr *post_op_dir; ++ am_post_op_attr *post_op_obj; ++ int ret; ++ ++ if (error) { ++ /* ++ * Return the error that was passed to us. ++ */ ++ post_op_dir->attributes_follow = 0; ++ result.status = nfs_error(error); ++ } else { ++ post_op_dir = &result.res_u.ok.dir_attributes; ++ post_op_obj = &result.res_u.ok.obj_attributes; ++ am_fattr3 *fattr3; ++ nfsfattr *fattr; ++ ++ /* ++ * Construct a valid reply to a lookup request. Same ++ * code as in am_nfs3_lookup_3_svc() above. ++ */ ++ ++ /* dir attributes */ ++ post_op_dir->attributes_follow = 1; ++ fattr3 = &post_op_dir->am_post_op_attr_u.attributes; ++ parent_fattr_to_fattr3(mp, fattr3); ++ ++ mp_to_fh3(mp, &result.res_u.ok.object); ++ ++ /* mount attributes */ ++ post_op_obj->attributes_follow = 1; ++ fattr = &mp->am_fattr; ++ fattr3 = &post_op_obj->am_post_op_attr_u.attributes; ++ fattr_to_fattr3(fattr, fattr3); ++ ++ result.status = AM_NFS3_OK; ++ } ++ ++ /* ++ * Send off our reply ++ */ ++ ret = svc_sendreply(transp, ++ (XDRPROC_T_TYPE) xdr_result, ++ (SVC_IN_ARG_TYPE) &result); ++ ++ return ret; ++} ++ ++ + am_ACCESS3res * + am_nfs3_access_3_svc(am_ACCESS3args *argp, struct svc_req *rqstp) + { diff --git a/am-utils-6.2-add-NFSv3-rpc-request-validation.patch b/am-utils-6.2-add-NFSv3-rpc-request-validation.patch new file mode 100644 index 0000000..f5968e1 --- /dev/null +++ b/am-utils-6.2-add-NFSv3-rpc-request-validation.patch @@ -0,0 +1,127 @@ +am-utils-6.2 - add NFSv3 rpc request validation + +From: Ian Kent + +The NFS v2 internal server uses several validation checks for each +RPC request it receives, also add this validation for the NFS v3 +internal server. + +Signed-off-by: Ian Kent +--- + amd/nfs_prot_svc.c | 65 +++++++++++++++++++++++++++++++--------------------- + 1 file changed, 39 insertions(+), 26 deletions(-) + +diff --git a/amd/nfs_prot_svc.c b/amd/nfs_prot_svc.c +index 29b7551..cae12d4 100644 +--- a/amd/nfs_prot_svc.c ++++ b/amd/nfs_prot_svc.c +@@ -71,30 +71,9 @@ dispatcher_t nfs_dispatcher = nfs_program_2; + typedef char *(*nfssvcproc_t)(voidp, struct svc_req *); + + +-void +-nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) ++static int ++validate_rpc_request(struct svc_req *rqstp, SVCXPRT *transp) + { +- union { +- am_nfs_fh nfsproc_getattr_2_arg; +- nfssattrargs nfsproc_setattr_2_arg; +- nfsdiropargs nfsproc_lookup_2_arg; +- am_nfs_fh nfsproc_readlink_2_arg; +- nfsreadargs nfsproc_read_2_arg; +- nfswriteargs nfsproc_write_2_arg; +- nfscreateargs nfsproc_create_2_arg; +- nfsdiropargs nfsproc_remove_2_arg; +- nfsrenameargs nfsproc_rename_2_arg; +- nfslinkargs nfsproc_link_2_arg; +- nfssymlinkargs nfsproc_symlink_2_arg; +- nfscreateargs nfsproc_mkdir_2_arg; +- nfsdiropargs fsproc_rmdir_2_arg; +- nfsreaddirargs nfsproc_readdir_2_arg; +- am_nfs_fh nfsproc_statfs_2_arg; +- } argument; +- char *result; +- xdrproc_t xdr_argument, xdr_result; +- nfssvcproc_t local; +- + #ifdef HAVE_TRANSPORT_TYPE_TLI + /* + * On TLI systems we don't use an INET network type, but a "ticlts" (see +@@ -109,7 +88,7 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) + extern int __rpc_get_local_uid(SVCXPRT *transp, uid_t *uid); + if (__rpc_get_local_uid(transp, &u) >= 0 && u != 0) { + plog(XLOG_WARNING, "ignoring request from UID %ld, must be 0", (long) u); +- return; ++ return 0; + } + # else /* not HAVE___RPC_GET_LOCAL_UID */ + dlog("cannot verify local uid for rpc request"); +@@ -126,7 +105,7 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) + plog(XLOG_WARNING, "ignoring request from %s:%u, port not reserved", + inet_dquad(dq, sizeof(dq), sinp->sin_addr.s_addr), + ntohs(sinp->sin_port)); +- return; ++ return 0; + } + # endif /* MNT2_NFS_OPT_RESVPORT */ + /* if the address does not match, ignore the request */ +@@ -136,16 +115,47 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) + plog(XLOG_WARNING, "ignoring request from %s:%u, not a local interface", + inet_dquad(dq, sizeof(dq), sinp->sin_addr.s_addr), + ntohs(sinp->sin_port)); ++ return 0; + } + } else { + plog(XLOG_WARNING, "ignoring request from %s:%u, expected %s", + inet_dquad(dq, sizeof(dq), sinp->sin_addr.s_addr), + ntohs(sinp->sin_port), + inet_dquad(dq2, sizeof(dq2), myipaddr.s_addr)); +- return; ++ return 0; + } + } + #endif /* not HAVE_TRANPORT_TYPE_TLI */ ++ return 1; ++} ++ ++ ++void ++nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp) ++{ ++ union { ++ am_nfs_fh nfsproc_getattr_2_arg; ++ nfssattrargs nfsproc_setattr_2_arg; ++ nfsdiropargs nfsproc_lookup_2_arg; ++ am_nfs_fh nfsproc_readlink_2_arg; ++ nfsreadargs nfsproc_read_2_arg; ++ nfswriteargs nfsproc_write_2_arg; ++ nfscreateargs nfsproc_create_2_arg; ++ nfsdiropargs nfsproc_remove_2_arg; ++ nfsrenameargs nfsproc_rename_2_arg; ++ nfslinkargs nfsproc_link_2_arg; ++ nfssymlinkargs nfsproc_symlink_2_arg; ++ nfscreateargs nfsproc_mkdir_2_arg; ++ nfsdiropargs fsproc_rmdir_2_arg; ++ nfsreaddirargs nfsproc_readdir_2_arg; ++ am_nfs_fh nfsproc_statfs_2_arg; ++ } argument; ++ char *result; ++ xdrproc_t xdr_argument, xdr_result; ++ nfssvcproc_t local; ++ ++ if (!validate_rpc_request(rqstp, transp)) ++ return; + + current_transp = NULL; + +@@ -327,6 +337,9 @@ nfs_program_3(struct svc_req *rqstp, register SVCXPRT *transp) + xdrproc_t _xdr_argument, _xdr_result; + nfssvcproc_t local; + ++ if (!validate_rpc_request(rqstp, transp)) ++ return; ++ + current_transp = NULL; + + switch (rqstp->rq_proc) { diff --git a/am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch b/am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch new file mode 100644 index 0000000..56e3b55 --- /dev/null +++ b/am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch @@ -0,0 +1,170 @@ +am-utils-6.2 - add get_nfs_xprt() and put_nfs_xprt() functions + +From: Ian Kent + +The nfs_quick_reply() functionality relies on taking a copy of the +current transport for later use. + +The problem with this is the context of the RPC message is kept in +the transport and if any RPC message arrives before nfs_quick_reply() +is called that context will be corrupted. + +So add a function get_nfs_xprt() to replace the current transport +with a new one returning the passed in transort so nfs_quick_reply() +can use it later. + +A function put_nfs_xprt() is also added (although not really needed +since it just destroys the now unused transport) for completeness. + +Signed-off-by: Ian Kent +--- + conf/transp/transp_sockets.c | 44 ++++++++++++++++++++++++++++++++++++++++ + conf/transp/transp_tli.c | 46 +++++++++++++++++++++++++++++++++++++++++- + include/am_utils.h | 2 ++ + 3 files changed, 91 insertions(+), 1 deletion(-) + +diff --git a/conf/transp/transp_sockets.c b/conf/transp/transp_sockets.c +index 6326007..98f79c8 100644 +--- a/conf/transp/transp_sockets.c ++++ b/conf/transp/transp_sockets.c +@@ -45,6 +45,7 @@ + #include + #include + ++static int soNFS = RPC_ANYSOCK; + + /* + * find the IP address that can be used to connect to the local host +@@ -273,9 +274,52 @@ create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (* + return 3; + } + ++ soNFS = *soNFSp; ++ + return 0; /* all is well */ + } + ++/* ++ * Get a pointer to the current NFS SVCXPRT and replace it ++ * with a new one. ++ */ ++SVCXPRT * ++get_nfs_xprt(SVCXPRT *nfs_xprt) ++{ ++ SVCXPRT *newxprt; ++ int newfd; ++ ++ if (!nfs_xprt || soNFS == RPC_ANYSOCK) ++ return NULL; ++ ++ newfd = dup(soNFS); ++ if (newfd < 0) ++ return NULL; ++ ++ xprt_unregister(nfs_xprt); ++ newxprt = svcudp_create(newfd); ++ if (!newxprt) { ++ plog(XLOG_FATAL, "Can't switch to new transport"); ++ xprt_register(nfs_xprt); ++ close(newfd); ++ return NULL; ++ } ++ ++ soNFS = newfd; ++ ++ return nfs_xprt; ++} ++ ++/* ++ * Destroy a transport previously obtained by get_nfs_xprt(). ++ */ ++void put_nfs_xprt(SVCXPRT *nfs_xprt) ++{ ++ if (!nfs_xprt || soNFS == RPC_ANYSOCK) ++ return; ++ ++ svc_destroy(nfs_xprt); ++} + + /* + * Create the amq service for amd (both TCP and UDP) +diff --git a/conf/transp/transp_tli.c b/conf/transp/transp_tli.c +index d26a511..ea565cc 100644 +--- a/conf/transp/transp_tli.c ++++ b/conf/transp/transp_tli.c +@@ -45,7 +45,8 @@ + #include + #include + +-struct netconfig *nfsncp; ++struct netconfig *nfsncp = NULL; ++static int soNFS = RPC_ANYSOCK; + + + /* +@@ -456,9 +457,52 @@ create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (* + return 1; + } + ++ soNFS = *soNFSp; ++ + return 0; /* all is well */ + } + ++/* ++ * Get a pointer to the current NFS SVCXPRT and replace it ++ * with a new one. ++ */ ++SVCXPRT * ++get_nfs_xprt(SVCXPRT *nfs_xprt) ++{ ++ SVCXPRT *newxprt; ++ int newfd; ++ ++ if (!nfs_xprt || soNFS == RPC_ANYSOCK) ++ return NULL; ++ ++ newfd = dup(soNFS); ++ if (newfd < 0) ++ return NULL; ++ ++ xprt_unregister(nfs_xprt); ++ newxprt = svc_tli_create(newfd, nfsncp, NULL, 0, 0); ++ if (!newxprt) { ++ plog(XLOG_FATAL, "Can't switch to new transport"); ++ xprt_register(nfs_xprt); ++ close(newfd); ++ return NULL; ++ } ++ ++ soNFS = newfd; ++ ++ return nfs_xprt; ++} ++ ++/* ++ * Destroy a transport previously obtained by get_nfs_xprt(). ++ */ ++void put_nfs_xprt(SVCXPRT *nfs_xprt) ++{ ++ if (!nfs_xprt || soNFS == RPC_ANYSOCK) ++ return; ++ ++ svc_destroy(nfs_xprt); ++} + + /* + * Bind to preferred AMQ port. +diff --git a/include/am_utils.h b/include/am_utils.h +index 0de881a..ff13c26 100644 +--- a/include/am_utils.h ++++ b/include/am_utils.h +@@ -378,6 +378,8 @@ extern void compute_nfs_args(void *nap, mntent_t *mntp, int genflags, struct net + extern void destroy_nfs_args(void *nap, u_long nfs_version); + extern int create_amq_service(int *udp_soAMQp, SVCXPRT **udp_amqpp, struct netconfig **udp_amqncpp, int *tcp_soAMQp, SVCXPRT **tcp_amqpp, struct netconfig **tcp_amqncpp, u_short preferred_amq_port); + extern int create_nfs_service(int *soNFSp, u_short *nfs_portp, SVCXPRT **nfs_xprtp, void (*dispatch_fxn)(struct svc_req *rqstp, SVCXPRT *transp), u_long nfs_version); ++extern SVCXPRT *get_nfs_xprt(SVCXPRT *nfs_xprt); ++extern void put_nfs_xprt(SVCXPRT *nfs_xprt); + extern int amu_svc_register(SVCXPRT *, u_long, u_long, void (*)(struct svc_req *, SVCXPRT *), u_long, struct netconfig *); + + #ifdef HAVE_TRANSPORT_TYPE_TLI diff --git a/am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch b/am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch new file mode 100644 index 0000000..6239c9f --- /dev/null +++ b/am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch @@ -0,0 +1,52 @@ +am-utils-6.2 - fix wcc attr usage in unlink3_or_rmdir3() + +From: Ian Kent + +The definition of the wcc post op attributes should be am_fattr3 not +am_wcc_attr in unlink3_or_rmdir3(). + +Signed-off-by: Ian Kent +--- + amd/nfs_subr.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index a383618..b88a40c 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -1058,7 +1058,8 @@ static am_nfsstat3 unlink3_or_rmdir3(am_diropargs3 *argp, + am_pre_op_attr *pre_op_dir = &wcc_data->before; + am_post_op_attr *post_op_dir = &wcc_data->after; + nfsfattr *fattr; +- am_wcc_attr *pre_op_wcc_attr, *post_op_wcc_attr; ++ am_wcc_attr *pre_op_wcc_attr; ++ am_fattr3 *post_op_wcc_attr; + am_node *mp, *ap; + int retry; + +@@ -1085,7 +1086,7 @@ static am_nfsstat3 unlink3_or_rmdir3(am_diropargs3 *argp, + fattr_to_wcc_attr(fattr, pre_op_wcc_attr); + + if (mp->am_fattr.na_type != NFDIR) { +- fattr_to_wcc_attr(fattr, post_op_wcc_attr); ++ fattr_to_fattr3(fattr, post_op_wcc_attr); + res = nfs_error(ENOTDIR); + goto out; + } +@@ -1105,14 +1106,14 @@ static am_nfsstat3 unlink3_or_rmdir3(am_diropargs3 *argp, + */ + else if (retry == ENOENT) + retry = 0; +- fattr_to_wcc_attr(fattr, post_op_wcc_attr); ++ fattr_to_fattr3(fattr, post_op_wcc_attr); + res = nfs_error(retry); + } else { + forcibly_timeout_mp(mp); + /* we can't wait for the expire so use the attributes as + * they are now for the post op wcc attributes. + */ +- fattr_to_wcc_attr(fattr, post_op_wcc_attr); ++ fattr_to_fattr3(fattr, post_op_wcc_attr); + res = AM_NFS3_OK; + } + diff --git a/am-utils-6.2-use-linux-libtirpc-if-present.patch b/am-utils-6.2-use-linux-libtirpc-if-present.patch new file mode 100644 index 0000000..1649b54 --- /dev/null +++ b/am-utils-6.2-use-linux-libtirpc-if-present.patch @@ -0,0 +1,93 @@ +am-utils-6.2 - use Linux libtirpc if present + +From: Ian Kent + +For Linux systems, if the header files and shared libraries of libtirpc +are present use them instead of the glibc RPC implementation. + +Signed-off-by: Ian Kent +--- + Makefile.am | 3 ++- + configure.ac | 4 ++++ + include/am_compat.h | 8 ++++++-- + m4/macros/check_linux_libtirpc.m4 | 13 +++++++++++++ + 4 files changed, 25 insertions(+), 3 deletions(-) + create mode 100644 m4/macros/check_linux_libtirpc.m4 + +diff --git a/Makefile.am b/Makefile.am +index bae4615..e094e95 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -146,7 +146,8 @@ EXTRA_DIST_M4 = \ + m4/macros/type_xdrproc_t.m4 \ + m4/macros/type_xfs_args.m4 \ + m4/macros/type_yp_order_outorder.m4 \ +- m4/macros/with_addon.m4 ++ m4/macros/with_addon.m4 \ ++ m4/macros/check_linux_libtirpc.m4 + + EXTRA_DIST_CONF = \ + conf/autofs/autofs_default.h \ +diff --git a/configure.ac b/configure.ac +index ce61925..98b444d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -222,6 +222,9 @@ dnl lots of code. So I am forced to use a special purpose macro that sets + dnl the libraries based on the OS. Sigh. -Erez. + AMU_CHECK_OS_LIBS + ++dnl use Linux libtirpc if possible ++AMU_CHECK_LIBTIRPC ++ + dnl librpc and librpcsvc are needed on Solaris + AC_CHECK_LIB(rpc, clnt_sperrno) + AC_CHECK_LIB(rpcsvc, xdr_fhandle) +@@ -433,6 +436,7 @@ AC_CHECK_HEADERS( \ + arpa/nameser.h \ + arpa/inet.h \ + bsd/rpc/rpc.h \ ++ tirpc/netconfig.h \ + cdfs/cdfsmount.h \ + cdfs/cdfs_mount.h \ + fs/udf/udf_mount.h \ +diff --git a/include/am_compat.h b/include/am_compat.h +index 3463f3f..d6826fc 100644 +--- a/include/am_compat.h ++++ b/include/am_compat.h +@@ -454,11 +454,15 @@ struct hsfs_args { + /* + * Define a dummy struct netconfig for non-TLI systems + */ +-#if !defined(HAVE_NETCONFIG_H) && !defined(HAVE_SYS_NETCONFIG_H) ++#if !defined(HAVE_NETCONFIG_H) ++# if !defined(HAVE_SYS_NETCONFIG_H) ++# if !defined(HAVE_TIRPC_NETCONFIG_H) + struct netconfig { + int dummy; + }; +-#endif /* not HAVE_NETCONFIG_H and not HAVE_SYS_NETCONFIG_H */ ++# endif /* not HAVE_TIRPC_NETCONFIG_H */ ++# endif /* not HAVE_SYS_NETCONFIG_H */ ++#endif /* not HAVE_NETCONFIG_H */ + + /* some OSs don't define INADDR_NONE and assume it's unsigned -1 */ + #ifndef INADDR_NONE +diff --git a/m4/macros/check_linux_libtirpc.m4 b/m4/macros/check_linux_libtirpc.m4 +new file mode 100644 +index 0000000..918423c +--- /dev/null ++++ b/m4/macros/check_linux_libtirpc.m4 +@@ -0,0 +1,13 @@ ++dnl ###################################################################### ++dnl Check for Linux libtirpc library ++AC_DEFUN([AMU_CHECK_LIBTIRPC],[ ++TIRPC_CPPFLAGS="" ++TIRPC_LIBS="" ++ ++AC_CHECK_HEADER(tirpc/netconfig.h,[ ++ TIRPC_CPPFLAGS="-I/usr/include/tirpc" ++ AC_DEFINE(HAVE_LIBTIRPC, 1, [Define to 1 if you have libtirpc headers installed]) ++ AC_CHECK_LIB(tirpc, clnt_tli_create, [TIRPC_LIBS="-ltirpc"], [TIRPC_CPPFLAGS=""])]) ++ AMU_CFLAGS="$ANU_CFLAGS $TIRPC_CPPFLAGS" ++ LIBS="$LIBS $TIRPC_LIBS" ++]) diff --git a/am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch b/am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch new file mode 100644 index 0000000..8594739 --- /dev/null +++ b/am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch @@ -0,0 +1,60 @@ +am-utils-6.2 - use new get_nfs_xprt() and put_nfs_xprt() functions + +From: Ian Kent + +The nfs_quick_reply() function needs to know the current RPC transport +outside of the NFS LOOKUP method call. It needs this to reply to the +NFS LOOKUP call that initiated the mount. + +Now there are functions that avoid transport corruption if another +request comes in during the backgroud mount make nfs_quick_reply() +use them. + +Signed-off-by: Ian Kent +--- + amd/amfs_generic.c | 3 +-- + amd/map.c | 2 +- + amd/nfs_subr.c | 3 ++- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/amd/amfs_generic.c b/amd/amfs_generic.c +index c352a32..86d0ab7 100644 +--- a/amd/amfs_generic.c ++++ b/amd/amfs_generic.c +@@ -1129,8 +1129,7 @@ amfs_generic_mount_child(am_node *new_mp, int *error_return) + */ + if (current_transp && !new_mp->am_transp) { + dlog("Saving RPC transport for %s", new_mp->am_path); +- new_mp->am_transp = (SVCXPRT *) xmalloc(sizeof(SVCXPRT)); +- *(new_mp->am_transp) = *current_transp; ++ new_mp->am_transp = get_nfs_xprt(current_transp); + } + if (error && new_mp->am_al && new_mp->am_al->al_mnt && + (new_mp->am_al->al_mnt->mf_ops == &amfs_error_ops)) +diff --git a/amd/map.c b/amd/map.c +index 0d404cf..bcb2156 100644 +--- a/amd/map.c ++++ b/amd/map.c +@@ -471,7 +471,7 @@ free_map(am_node *mp) + XFREE(mp->am_name); + XFREE(mp->am_path); + XFREE(mp->am_pref); +- XFREE(mp->am_transp); ++ put_nfs_xprt(mp->am_transp); + + if (mp->am_al) + free_loc(mp->am_al); +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index 0a43b98..07d960d 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -291,7 +291,8 @@ nfs_quick_reply(am_node *mp, int error) + /* + * Free up transp. It's only used for one reply. + */ +- XFREE(mp->am_transp); ++ put_nfs_xprt(mp->am_transp); ++ mp->am_transp = NULL; + dlog("Quick reply sent for %s", mp->am_al->al_mnt->mf_mount); + } + } diff --git a/am-utils.spec b/am-utils.spec index 9e17832..05d86ba 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 11%{?dist} +Release: 12%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -27,11 +27,13 @@ BuildRequires: systemd-units BuildRequires: texinfo BuildRequires: gcc BuildRequires: m4 +BuildRequires: libtirpc-devel Requires: rpcbind Requires: grep Requires: gawk Requires: findutils +Requires: libtirpc Requires(pre): /bin/grep Requires(post): /sbin/install-info @@ -51,6 +53,12 @@ Patch5: am-utils-6.2-fix-NFSv3-readdir-post_op_dir-attributes-return.patch Patch6: am-utils-6.2-fix-NFSv3-unlink3_or_rmdir3-post_op-attributes-return.patch Patch7: am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch +Patch8: am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch +Patch9: am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch +Patch10: am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch +Patch11: am-utils-6.2-add-NFSv3-rpc-request-validation.patch +Patch12: am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch +Patch13: am-utils-6.2-use-linux-libtirpc-if-present.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -82,6 +90,12 @@ mounting and unmounting filesystems. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 ./bootstrap @@ -193,6 +207,15 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Mar 2 2016 Ian Kent - 5:6.2.0-12 +- add get_nfs_xprt() and put_nfs_xprt() functions. +- use new get_nfs_xprt() and put_nfs_xprt() functions. +- add NFSv3 nfs_quick_reply() functionality. +- use libtirpc instead of glibc RPC. +- add NFSv3 rpc request validation. +- fix wcc attr usage in unlink3_or_rmdir3(). +- use Linux libtirpc if present. + * Mon Feb 29 2016 Ian Kent - 5:6.2.0-11 - fix Linux NFS recognition of umounts. - add systemd dependency on nfs-lock.service. From c9b3376b09667faeab31afebed88480dbb2aef12 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Fri, 4 Mar 2016 07:05:39 +0800 Subject: [PATCH 04/57] - fix changelog comments on latest change. --- am-utils.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 05d86ba..8e8c4b0 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -211,7 +211,6 @@ fi - add get_nfs_xprt() and put_nfs_xprt() functions. - use new get_nfs_xprt() and put_nfs_xprt() functions. - add NFSv3 nfs_quick_reply() functionality. -- use libtirpc instead of glibc RPC. - add NFSv3 rpc request validation. - fix wcc attr usage in unlink3_or_rmdir3(). - use Linux libtirpc if present. From 4e72d9a68394cf333b16142f5e6213e496fe83ef Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Wed, 14 Sep 2016 17:33:58 +0800 Subject: [PATCH 05/57] - sync with updtream git and add a couple of bug fixes. --- am-utils-6.2-32-bit-fixes.patch | 145 +++++ ...as-for-unix-as-well-as-none-and-null.patch | 64 +++ ...lt-to-string-mount-options-for-NFSv4.patch | 58 ++ ...SEGV-on-amq-entries-that-print-times.patch | 19 + am-utils-6.2-Fix-nfs-args-setting-code.patch | 71 +++ ...6.2-Improve-debugging-for-unmounting.patch | 36 ++ ...al-return-an-0-on-error-1-on-success.patch | 530 ++++++++++++++++++ ...lly-no-ti-rpc-nfsv4-so-dont-send-one.patch | 45 ++ ...f-the-directory-too-since-it-changed.patch | 30 + ...d-more-debugging-in-the-unmount-path.patch | 94 ++++ ...le-ampersand-when-ampersand-is-meant.patch | 19 + ...r-assignment-warning-due-to-libtirpc.patch | 57 ++ ...not-comparison-in-get_ldap_timestamp.patch | 24 + am-utils-6.2-fix-umount-to-mount-race.patch | 54 ++ ...-make-sure-variables-are-initialized.patch | 20 + ...ommon_args-is-only-needed-with-DEBUG.patch | 26 + ...move-set-but-not-used-variable-again.patch | 26 + ...e-set-but-not-used-variable-mp_error.patch | 28 + ...2-remove-set-but-not-used-variable-s.patch | 38 ++ ...-6.2-remove-unused-function-show_map.patch | 22 + ...e-a-different-size-than-unsigned-int.patch | 59 ++ am-utils.spec | 93 ++- 22 files changed, 1545 insertions(+), 13 deletions(-) create mode 100644 am-utils-6.2-32-bit-fixes.patch create mode 100644 am-utils-6.2-Add-the-sys-alias-for-unix-as-well-as-none-and-null.patch create mode 100644 am-utils-6.2-Default-to-string-mount-options-for-NFSv4.patch create mode 100644 am-utils-6.2-Fix-SEGV-on-amq-entries-that-print-times.patch create mode 100644 am-utils-6.2-Fix-nfs-args-setting-code.patch create mode 100644 am-utils-6.2-Improve-debugging-for-unmounting.patch create mode 100644 am-utils-6.2-Make-hasmntval-return-an-0-on-error-1-on-success.patch create mode 100644 am-utils-6.2-There-is-really-no-ti-rpc-nfsv4-so-dont-send-one.patch create mode 100644 am-utils-6.2-Update-the-ctime-of-the-directory-too-since-it-changed.patch create mode 100644 am-utils-6.2-add-more-debugging-in-the-unmount-path.patch create mode 100644 am-utils-6.2-dont-use-logical-double-ampersand-when-ampersand-is-meant.patch create mode 100644 am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch create mode 100644 am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch create mode 100644 am-utils-6.2-fix-umount-to-mount-race.patch create mode 100644 am-utils-6.2-make-sure-variables-are-initialized.patch create mode 100644 am-utils-6.2-print_nfs_common_args-is-only-needed-with-DEBUG.patch create mode 100644 am-utils-6.2-remove-set-but-not-used-variable-again.patch create mode 100644 am-utils-6.2-remove-set-but-not-used-variable-mp_error.patch create mode 100644 am-utils-6.2-remove-set-but-not-used-variable-s.patch create mode 100644 am-utils-6.2-remove-unused-function-show_map.patch create mode 100644 am-utils-6.2-uid_t-might-be-a-different-size-than-unsigned-int.patch diff --git a/am-utils-6.2-32-bit-fixes.patch b/am-utils-6.2-32-bit-fixes.patch new file mode 100644 index 0000000..ac6cf1a --- /dev/null +++ b/am-utils-6.2-32-bit-fixes.patch @@ -0,0 +1,145 @@ +commit a6bbb7d9b098dacd2636925c232c630452e4b46e +Author: Christos Zoulas +Date: Sun Jan 18 18:03:37 2015 -0500 + + 32 bit fixes + +diff --git a/amd/amq_subr.c b/amd/amq_subr.c +index 8783611..86f0351 100644 +--- a/amd/amq_subr.c ++++ b/amd/amq_subr.c +@@ -528,6 +528,7 @@ xdr_amq_map_info_qelem(XDR *xdrs, qelem *qhead) + u_int len = 0; + int x; + char *n; ++ long modify; + + /* + * Compute length of list +@@ -552,7 +553,8 @@ xdr_amq_map_info_qelem(XDR *xdrs, qelem *qhead) + return (FALSE); + } + +- if (!xdr_long(xdrs, &m->modify)) { ++ modify = (long)m->modify; ++ if (!xdr_long(xdrs, &modify)) { + return (FALSE); + } + +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index e463ff7..7192a6a 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -1104,9 +1104,9 @@ am_nfs3_getattr_3_svc(am_GETATTR3args *argp, struct svc_req *rqstp) + result.status = AM_NFS3_OK; + + if (amuDebug(D_TRACE)) +- plog(XLOG_DEBUG, "\tstat(%s), size = %lu, mtime=%d.%d", ++ plog(XLOG_DEBUG, "\tstat(%s), size = %llu, mtime=%d.%d", + mp->am_path, +- (am_size3) fattr3->size, ++ (unsigned long long)fattr3->size, + (u_int) fattr3->mtime.seconds, + (u_int) fattr3->mtime.nseconds); + +diff --git a/amd/readdir.c b/amd/readdir.c +index 4b5e61b..57773a5 100644 +--- a/amd/readdir.c ++++ b/amd/readdir.c +@@ -635,7 +635,7 @@ static size_t needroom3(void) + + /* This one is called only if map is browsable */ + static int +-amfs_readdir3_browsable(am_node *mp, am_cookie3 cookie, ++amfs_readdir3_browsable(am_node *mp, voidp cookie, + am_dirlist3 *dp, am_entry3 *ep, u_int count, + int fully_browsable) + { +@@ -647,7 +647,8 @@ amfs_readdir3_browsable(am_node *mp, am_cookie3 cookie, + dp->eof = FALSE; /* assume readdir not done */ + + if (amuDebug(D_READDIR)) +- plog(XLOG_DEBUG, "amfs_readdir3_browsable gen=%lu, count=%d", gen, count); ++ plog(XLOG_DEBUG, "%s: gen=%llu, count=%d", __func__, ++ (unsigned long long)gen, count); + + if (gen == 0) { + size_t needed = needroom3(); +@@ -732,8 +733,9 @@ amfs_readdir3_browsable(am_node *mp, am_cookie3 cookie, + for (j = 0, ne = te; ne; ne = ne->ne_nextentry) + plog(XLOG_DEBUG, "gen2 key %4d \"%s\"", j++, ne->name); + for (j = 0, ne = ep; ne; ne = ne->ne_nextentry) { +- plog(XLOG_DEBUG, "gen2+ key %4d \"%s\" fi=%lu ck=%lu", +- j++, ne->name, ne->fileid, ne->cookie); ++ plog(XLOG_DEBUG, "gen2+ key %4d \"%s\" fi=%llu ck=%llu", ++ j++, ne->name, (unsigned long long)ne->fileid, ++ (unsigned long long)ne->cookie); + } + plog(XLOG_DEBUG, "EOF is %d", dp->eof); + } +@@ -793,14 +795,15 @@ amfs_readdir3_browsable(am_node *mp, am_cookie3 cookie, + } + + static int +-amfs_readdir3(am_node *mp, am_cookie3 cookie, ++amfs_readdir3(am_node *mp, voidp cookie, + am_dirlist3 *dp, am_entry3 *ep, u_int count) + { + uint64 gen = *(uint64 *) cookie; + am_node *xp; + + if (amuDebug(D_READDIR)) +- plog(XLOG_DEBUG, "amfs_readdir3 gen=%lu, count=%d", gen, count); ++ plog(XLOG_DEBUG, "%s: gen=%llu, count=%d", __func__, ++ (unsigned long long)gen, count); + + dp->eof = FALSE; /* assume readdir not done */ + +@@ -847,8 +850,9 @@ amfs_readdir3(am_node *mp, am_cookie3 cookie, + am_entry3 *ne; + int j; + for (j = 0, ne = ep; ne; ne = ne->nextentry) { +- plog(XLOG_DEBUG, "gen1 key %4d \"%s\" fi=%lu ck=%lu", +- j++, ne->name, ne->fileid, ne->cookie); ++ plog(XLOG_DEBUG, "gen1 key %4d \"%s\" fi=%llu ck=%llu", ++ j++, ne->name, (unsigned long long)ne->fileid, ++ (unsigned long long)ne->cookie); + } + } + return 0; +@@ -907,8 +911,9 @@ amfs_readdir3(am_node *mp, am_cookie3 cookie, + am_entry3 *ne; + int j; + for (j = 0, ne = ep; ne; ne = ne->nextentry) { +- plog(XLOG_DEBUG, "gen2 key %4d \"%s\" fi=%lu ck=%lu", +- j++, ne->name, ne->fileid, ne->cookie); ++ plog(XLOG_DEBUG, "gen2 key %4d \"%s\" fi=%llu ck=%llu", ++ j++, ne->name, (unsigned long long)ne->fileid, ++ (unsigned long long)ne->cookie); + } + } + return 0; +@@ -944,8 +949,8 @@ amfs_generic_readdir(am_node *mp, voidp cookie, voidp dp, voidp ep, u_int count) + return amfs_readdir(mp, cookie, dp, ep, count); + } else { + if (browsable) +- return amfs_readdir3_browsable(mp, (am_cookie3) cookie, dp, ep, count, full); ++ return amfs_readdir3_browsable(mp, cookie, dp, ep, count, full); + else +- return amfs_readdir3(mp, (am_cookie3) cookie, dp, ep, count); ++ return amfs_readdir3(mp, cookie, dp, ep, count); + } + } +diff --git a/amq/amq.c b/amq/amq.c +index 5d4ed7a..dc5fe02 100644 +--- a/amq/amq.c ++++ b/amq/amq.c +@@ -79,7 +79,7 @@ enum show_opt { + static void + time_print(time_type tt) + { +- time_t t = (time_t)tt; ++ time_t t = (time_t)*tt; + struct tm *tp = localtime(&t); + printf("%02d/%02d/%04d %02d:%02d:%02d", + tp->tm_mon + 1, tp->tm_mday, diff --git a/am-utils-6.2-Add-the-sys-alias-for-unix-as-well-as-none-and-null.patch b/am-utils-6.2-Add-the-sys-alias-for-unix-as-well-as-none-and-null.patch new file mode 100644 index 0000000..0762139 --- /dev/null +++ b/am-utils-6.2-Add-the-sys-alias-for-unix-as-well-as-none-and-null.patch @@ -0,0 +1,64 @@ +commit cb493f02ca3b8fbf0dba18d5a733345f54513300 +Author: zoulasc +Date: Mon Mar 7 18:03:19 2016 -0500 + + 1. Add the "sys" alias for "unix", as well as "none", and "null" + 2. Properly handle multiple flavors, although the linux kernel does not (yet?) + 3. Don't add the "sec=" field, because it is already there. + +diff --git a/libamu/mount_fs.c b/libamu/mount_fs.c +index 87f64c3..366eb8b 100644 +--- a/libamu/mount_fs.c ++++ b/libamu/mount_fs.c +@@ -1076,7 +1076,10 @@ struct { + const char *name; + int num; + } flavours[] = { ++ { "none", AUTH_NONE }, ++ { "null", AUTH_NULL }, + { "unix", AUTH_UNIX }, ++ { "sys", AUTH_SYS }, + { "krb5", RPC_AUTH_GSS_KRB5 }, + { "krb5i", RPC_AUTH_GSS_KRB5I }, + { "krb5p", RPC_AUTH_GSS_KRB5P }, +@@ -1104,12 +1107,13 @@ set_nfs4_security(nfs4_args_t *nap, mntent_t *mntp) + nap->auth_flavours = xmalloc(l * sizeof(*nap->auth_flavours)); + + s = ss = xstrdup(o); ++ l = 0; + for (;;) { + q = strchr(s, ','); + if (q) + *q = '\0'; + +- for (l = 0, i = 0; i < sizeof(flavours) / sizeof(flavours[0]); i++) ++ for (i = 0; i < sizeof(flavours) / sizeof(flavours[0]); i++) + if (strcmp(flavours[i].name, s) == 0) { + nap->auth_flavours[l++] = flavours[i].num; + break; +@@ -1125,6 +1129,9 @@ set_nfs4_security(nfs4_args_t *nap, mntent_t *mntp) + s = ++q; + } + ++ if (l == 0) { ++ nap->auth_flavours[l++] = AUTH_UNIX; ++ } + nap->auth_flavourlen = l; + return ss; + } +@@ -1172,12 +1179,15 @@ add_nfs4_mntopts(const nfs4_args_t *nap, mntent_t *mntp, char *sec) + opts = xrealloc(mntp->mnt_opts, len); + xstrlcat(opts, buf, len); + ++#ifdef notdef ++ /* Already in the options */ + if (sec) { + xstrlcat(opts, ",", len); + xstrlcat(opts, MNTTAB_OPT_SEC, len); + xstrlcat(opts, "=", len); + xstrlcat(opts, sec, len); + } ++#endif + + mntp->mnt_opts = opts; + } diff --git a/am-utils-6.2-Default-to-string-mount-options-for-NFSv4.patch b/am-utils-6.2-Default-to-string-mount-options-for-NFSv4.patch new file mode 100644 index 0000000..3057d22 --- /dev/null +++ b/am-utils-6.2-Default-to-string-mount-options-for-NFSv4.patch @@ -0,0 +1,58 @@ +commit 3369871a5e68484e231705bb0a893b4c6da85d17 +Author: zoulasc +Date: Mon Mar 7 18:05:07 2016 -0500 + + Default to "string" mount options for NFSv4 because the kernel does not + properly handle the auth_flavours[] field. Tested with nfs-utils-1.3.3 and + it always defaults to krb5i if string options are not used. Please note + that the "rw" option is not recognized by the linux kernel. + +diff --git a/conf/mount/mount_linux.c b/conf/mount/mount_linux.c +index d3841ce..de7708d 100644 +--- a/conf/mount/mount_linux.c ++++ b/conf/mount/mount_linux.c +@@ -450,7 +450,7 @@ do_mount_linux(MTYPE_TYPE type, mntent_t *mnt, int flags, caddr_t data) + return mount(mnt->mnt_fsname, + mnt->mnt_dir, + type, +- MS_MGC_VAL | flags, ++ flags, + data); + } + +@@ -566,9 +566,9 @@ mount_linux_nfs(MTYPE_TYPE type, mntent_t *mnt, int flags, caddr_t data) + plog(XLOG_DEBUG, "%s: port %d\n", __func__, + htons(mnt_data->addr.sin_port)); + } ++ flags |= MS_MGC_VAL; + if (amuDebug(D_TRACE)) { +- plog(XLOG_DEBUG, "%s: Generic mount flags 0x%x", __func__, +- MS_MGC_VAL | flags); ++ plog(XLOG_DEBUG, "%s: Generic mount flags 0x%x", __func__, flags); + plog(XLOG_DEBUG, "%s: updated nfs_args...", __func__); + print_nfs_args(mnt_data, 0); + } +@@ -610,14 +610,21 @@ mount_linux_nfs4(MTYPE_TYPE type, mntent_t *mnt, int flags, caddr_t data) + plog(XLOG_DEBUG, "%s: type %s\n", __func__, type); + plog(XLOG_DEBUG, "%s: version %d\n", __func__, mnt_data->version); + } ++#if 0 ++ flags |= MS_MGC_VAL; ++#endif + if (amuDebug(D_TRACE)) { +- plog(XLOG_DEBUG, "%s: Generic mount flags 0x%x", __func__, +- MS_MGC_VAL | flags); ++ plog(XLOG_DEBUG, "%s: Generic mount flags 0x%x", __func__, flags); + plog(XLOG_DEBUG, "%s: updated nfs_args...", __func__); + print_nfs_args(mnt_data, NFS_VERSION4); + } + ++#if 0 + errorcode = do_mount_linux(type, mnt, flags, data); ++#else ++ errorcode = do_mount_linux(type, mnt, flags, mnt->mnt_opts); ++#endif ++ + + return errorcode; + } diff --git a/am-utils-6.2-Fix-SEGV-on-amq-entries-that-print-times.patch b/am-utils-6.2-Fix-SEGV-on-amq-entries-that-print-times.patch new file mode 100644 index 0000000..ed7b9f3 --- /dev/null +++ b/am-utils-6.2-Fix-SEGV-on-amq-entries-that-print-times.patch @@ -0,0 +1,19 @@ +commit 6a12fc0acb3afb654ba5e6efdeb28b943e2efd3e +Author: zoulasc +Date: Thu Mar 31 14:56:53 2016 -0400 + + Fix SEGV on amq entries that print times. + +diff --git a/amq/amq.c b/amq/amq.c +index dc5fe02..04f9e4d 100644 +--- a/amq/amq.c ++++ b/amq/amq.c +@@ -79,7 +79,7 @@ enum show_opt { + static void + time_print(time_type tt) + { +- time_t t = (time_t)*tt; ++ time_t t = (time_t)(intptr_t)tt; + struct tm *tp = localtime(&t); + printf("%02d/%02d/%04d %02d:%02d:%02d", + tp->tm_mon + 1, tp->tm_mday, diff --git a/am-utils-6.2-Fix-nfs-args-setting-code.patch b/am-utils-6.2-Fix-nfs-args-setting-code.patch new file mode 100644 index 0000000..96d0425 --- /dev/null +++ b/am-utils-6.2-Fix-nfs-args-setting-code.patch @@ -0,0 +1,71 @@ +commit 1c4c00a489d7aef115020b903dcd10201eb56ac0 +Author: zoulasc +Date: Thu Apr 30 14:24:39 2015 -0400 + + Fix nfs args setting code (raven at the maw dot net) + +diff --git a/ChangeLog b/ChangeLog +index fd05087..64be682 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2015-04-30 Christos Zoulas ++ ++ * fix compilation error in nfs args set code. ++ (raven at themaw.net) ++ + 2015-01-17 Christos Zoulas + + * Move libtool macro functions from m4/macros to m4 and delete +diff --git a/libamu/mount_fs.c b/libamu/mount_fs.c +index b577bab..87f64c3 100644 +--- a/libamu/mount_fs.c ++++ b/libamu/mount_fs.c +@@ -1001,12 +1001,12 @@ compute_nfs23_args(nfs_args_t *nap, + + #ifdef MNTTAB_OPT_SYMTTL /* symlink cache time-to-live */ + if ((nap->symttl = hasmntval(mntp, MNTTAB_OPT_SYMTTL))) +- nap->args.flags |= MNT2_NFS_OPT_SYMTTL; ++ nap->flags |= MNT2_NFS_OPT_SYMTTL; + #endif /* MNTTAB_OPT_SYMTTL */ + + #ifdef MNT2_NFS_OPT_PGTHRESH /* paging threshold */ + if ((nap->pg_thresh = hasmntval(mntp, MNTTAB_OPT_PGTHRESH))) +- nap->args.flags |= MNT2_NFS_OPT_PGTHRESH; ++ nap->flags |= MNT2_NFS_OPT_PGTHRESH; + #endif /* MNT2_NFS_OPT_PGTHRESH */ + + #if defined(MNT2_NFS_OPT_POSIX) && defined(MNTTAB_OPT_POSIX) +@@ -1029,12 +1029,12 @@ compute_nfs23_args(nfs_args_t *nap, + return; + } + /* update the flags field for knconf */ +- nap->args.flags |= MNT2_NFS_OPT_KNCONF; ++ nap->flags |= MNT2_NFS_OPT_KNCONF; + #endif /* HAVE_TRANSPORT_TYPE_TLI */ + + #ifdef MNT2_NFS_OPT_FSNAME + nap->fsname = fs_name; +- nap->args.flags |= MNT2_NFS_OPT_FSNAME; ++ nap->flags |= MNT2_NFS_OPT_FSNAME; + #endif /* MNT2_NFS_OPT_FSNAME */ + + +@@ -1323,7 +1323,7 @@ compute_nfs4_args(nfs4_args_t *nap, + + #if defined(MNT2_NFS_OPT_POSIX) && defined(MNTTAB_OPT_POSIX) + if (amu_hasmntopt(mntp, MNTTAB_OPT_POSIX) != NULL) { +- nap->args.flags |= MNT2_NFS_OPT_POSIX; ++ nap->flags |= MNT2_NFS_OPT_POSIX; + # ifdef HAVE_NFS_ARGS_T_PATHCONF + nap->pathconf = NULL; + # endif /* HAVE_NFS_ARGS_T_PATHCONF */ +@@ -1333,7 +1333,7 @@ compute_nfs4_args(nfs4_args_t *nap, + #if defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) + nap->maxgrouplist = hasmntval(mntp, MNTTAB_OPT_MAXGROUPS); + if (nap->maxgrouplist != 0) +- nap->args.flags |= MNT2_NFS_OPT_MAXGRPS; ++ nap->flags |= MNT2_NFS_OPT_MAXGRPS; + #endif /* defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) */ + + #ifdef HAVE_NFS_ARGS_T_OPTSTR diff --git a/am-utils-6.2-Improve-debugging-for-unmounting.patch b/am-utils-6.2-Improve-debugging-for-unmounting.patch new file mode 100644 index 0000000..564daa5 --- /dev/null +++ b/am-utils-6.2-Improve-debugging-for-unmounting.patch @@ -0,0 +1,36 @@ +commit 227ce116a307a7f38967639c94ad74970ee83700 +Author: zoulasc +Date: Tue Mar 8 23:30:38 2016 -0500 + + Improve debugging for unmounting. + +diff --git a/amd/map.c b/amd/map.c +index bcb2156..a6df44b 100644 +--- a/amd/map.c ++++ b/amd/map.c +@@ -904,10 +904,8 @@ unmount_mp(am_node *mp) + int was_backgrounded = 0; + mntfs *mf = mp->am_al->al_mnt; + +-#ifdef notdef + plog(XLOG_INFO, "\"%s\" on %s timed out (flags 0x%x)", +- mp->am_path, mf->mf_mount, (int) mf->mf_flags); +-#endif /* notdef */ ++ mp->am_path, mf->mf_mount, (int) mf->mf_flags); + + #ifndef MNT2_NFS_OPT_SYMTTL + /* +@@ -938,11 +936,12 @@ unmount_mp(am_node *mp) + plog(XLOG_STATS, "file server %s is down - timeout of \"%s\" ignored", mf->mf_server->fs_host, mp->am_path); + mf->mf_flags |= MFF_LOGDOWN; + } ++ dlog("\"%s\" on %s server is down, deferred", mp->am_path, mf->mf_mount); + notify_child(mp, AMQ_UMNT_SERVER, 0, 0); + return 0; + } + +- dlog("\"%s\" on %s timed out", mp->am_path, mf->mf_mount); ++ dlog("\"%s\" on %s timed out, unmounting", mp->am_path, mf->mf_mount); + mf->mf_flags |= MFF_UNMOUNTING; + + #ifdef HAVE_FS_AUTOFS diff --git a/am-utils-6.2-Make-hasmntval-return-an-0-on-error-1-on-success.patch b/am-utils-6.2-Make-hasmntval-return-an-0-on-error-1-on-success.patch new file mode 100644 index 0000000..7c39f97 --- /dev/null +++ b/am-utils-6.2-Make-hasmntval-return-an-0-on-error-1-on-success.patch @@ -0,0 +1,530 @@ +commit 1c9cd2d03ab1561b7eee831af381eff781fcf41e +Author: zoulasc +Date: Fri Apr 8 15:29:33 2016 -0400 + + * Make hasmntval() return an 0 on error, 1 on success and + place the value in an argument. Update all users and + check properly for errors. Get rid of hasmntvalerr(). + * Add hasmntvaldelim() which takes a string delimiter. This + is now used to chop vers=4.1 to 4, so that we can parse the + version correctly (we don't care about the .1 part yet) + +--- + amd/autil.c | 10 ++---- + amd/ops_cdfs.c | 7 ++++ + amd/ops_nfs.c | 3 -- + amd/ops_pcfs.c | 10 ++++-- + amd/ops_ufs.c | 6 +++- + amd/srvr_nfs.c | 24 ++++++++++------ + hlfsd/hlfsd.c | 3 -- + include/am_utils.h | 4 +- + libamu/mount_fs.c | 79 ++++++++++++++++++++++++++++++++++++++--------------- + libamu/mtab.c | 41 ++++++++------------------- + 10 files changed, 109 insertions(+), 78 deletions(-) + +--- am-utils-6.2.orig/amd/autil.c ++++ am-utils-6.2/amd/autil.c +@@ -279,7 +279,7 @@ am_mounted(am_node *mp) + if (amu_hasmntopt(&mnt, "nounmount") || amu_hasmntopt(&mnt, "noumount")) + notimeout = 1; + /* utimeout=N option: user wants to unmount this option AND set timeout */ +- if ((mp->am_timeo = hasmntval(&mnt, "utimeout")) == 0) ++ if (!hasmntval(&mnt, "utimeout", &mp->am_timeo)) + mp->am_timeo = gopt.am_timeo; /* otherwise use default timeout */ + else + notimeout = 0; +@@ -480,8 +480,7 @@ amfs_mount(am_node *mp, mntfs *mf, char + mnt.mnt_type = HIDE_MOUNT_TYPE; + } + +- retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); +- if (retry <= 0) ++ if (!hasmntval(&mnt, MNTTAB_OPT_RETRY, &retry) || retry <= 0) + retry = 2; /* XXX: default to 2 retries */ + + /* +@@ -526,7 +525,7 @@ again: + nfs_args_t nfs_args; + am_nfs_handle_t *fhp, anh; + #ifndef HAVE_TRANSPORT_TYPE_TLI +- u_short port; ++ int port; + struct sockaddr_in sin; + #endif /* not HAVE_TRANSPORT_TYPE_TLI */ + +@@ -547,8 +546,7 @@ again: + /* 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); +- if (port) { ++ if (hasmntval(&mnt, MNTTAB_OPT_PORT, &port) && port > 0 && port < 65536) { + sin.sin_port = htons(port); + } else { + plog(XLOG_ERROR, "no port number specified for %s", dir); +--- am-utils-6.2.orig/amd/ops_cdfs.c ++++ am-utils-6.2/amd/ops_cdfs.c +@@ -190,7 +190,12 @@ mount_cdfs(char *mntdir, char *fs_name, + #endif /* HAVE_CDFS_ARGS_T_ISO_FLAGS */ + + #ifdef HAVE_CDFS_ARGS_T_ISO_PGTHRESH +- cdfs_args.iso_pgthresh = hasmntval(&mnt, MNTTAB_OPT_PGTHRESH); ++ { ++ int thresh; ++ if (!hasmntval(&mnt, MNTTAB_OPT_PGTHRESH, &thresh) || thresh < 0) ++ thresh = 0; ++ cdfs_args.iso_pgthresh = thresh; ++ } + #endif /* HAVE_CDFS_ARGS_T_ISO_PGTHRESH */ + + #ifdef HAVE_CDFS_ARGS_T_NORRIP +--- am-utils-6.2.orig/amd/ops_nfs.c ++++ am-utils-6.2/amd/ops_nfs.c +@@ -888,8 +888,7 @@ mount_nfs_fh(am_nfs_handle_t *fhp, char + plog(XLOG_INFO, "mount_nfs_fh: NFS version %d", (int) nfs_version); + plog(XLOG_INFO, "mount_nfs_fh: using NFS transport %s", nfs_proto); + +- retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); +- if (retry <= 0) ++ if (!hasmntval(&mnt, MNTTAB_OPT_RETRY, &retry) || retry <= 0) + retry = 1; /* XXX */ + + genflags = compute_mount_flags(&mnt); +--- am-utils-6.2.orig/amd/ops_pcfs.c ++++ am-utils-6.2/amd/ops_pcfs.c +@@ -139,17 +139,19 @@ mount_pcfs(char *mntdir, char *fs_name, + #endif /* HAVE_PCFS_ARGS_T_FSPEC */ + + #ifdef HAVE_PCFS_ARGS_T_MASK +- pcfs_args.mask = 0777; /* this may be the msdos file modes */ +- if ((mask = hasmntval(&mnt, MNTTAB_OPT_MASK)) > 0) ++ if (hasmntval(&mnt, MNTTAB_OPT_MASK, &mask) && mask > 0) + pcfs_args.mask = mask; ++ else ++ pcfs_args.mask = 0777; /* this may be the msdos file modes */ + if (amuDebug(D_TRACE)) + plog(XLOG_DEBUG, "mount_pcfs: mask=%o (octal)", (u_int) pcfs_args.mask); + #endif /* HAVE_PCFS_ARGS_T_MASK */ + + #ifdef HAVE_PCFS_ARGS_T_DIRMASK +- pcfs_args.dirmask = 0777; /* this may be the msdos dir modes */ +- if ((mask = hasmntval(&mnt, MNTTAB_OPT_DIRMASK)) > 0) ++ if (hasmntval(&mnt, MNTTAB_OPT_DIRMASK, &mask) && mask > 0) + pcfs_args.dirmask = mask; ++ else ++ pcfs_args.dirmask = 0777; /* this may be the msdos dir modes */ + if (amuDebug(D_TRACE)) + plog(XLOG_DEBUG, "mount_pcfs: dirmask=%o (octal)", (u_int) pcfs_args.dirmask); + #endif /* HAVE_PCFS_ARGS_T_DIRMASK */ +--- am-utils-6.2.orig/amd/ops_ufs.c ++++ am-utils-6.2/amd/ops_ufs.c +@@ -144,7 +144,11 @@ mount_ufs(char *mntdir, char *fs_name, c + #endif /* HAVE_UFS_ARGS_T_FSPEC */ + + #ifdef HAVE_UFS_ARGS_T_UFS_PGTHRESH +- ufs_args.ufs_pgthresh = hasmntval(&mnt, MNTTAB_OPT_PGTHRESH); ++ { ++ int thresh; ++ if (!hasmntval(&mnt, MNTTAB_OPT_PGTHRESH, &thresh) || thresh < 0) ++ thresh = 0; ++ ufs_args.ufs_pgthresh = thresh; + #endif /* HAVE_UFS_ARGS_T_UFS_PGTHRESH */ + + /* +--- am-utils-6.2.orig/amd/srvr_nfs.c ++++ am-utils-6.2/amd/srvr_nfs.c +@@ -704,10 +704,10 @@ find_nfs_srvr(mntfs *mf) + struct hostent *hp = NULL; + struct sockaddr_in *ip = NULL; + u_long nfs_version = 0; /* default is no version specified */ ++ int val; + u_long best_nfs_version = 0; + char *nfs_proto = NULL; /* no IP protocol either */ +- int nfs_port = 0; +- int nfs_port_opt = 0; ++ int nfs_port; + int fserver_is_down = 0; + + if (mf->mf_fo == NULL) { +@@ -721,7 +721,8 @@ find_nfs_srvr(mntfs *mf) + * are required or not. < 0 = no pings. + */ + mnt.mnt_opts = mf->mf_mopts; +- pingval = hasmntval(&mnt, "ping"); ++ if (!hasmntval(&mnt, "ping", &pingval) || pingval < 0) ++ pingval = 0; + + if (mf->mf_flags & MFF_NFS_SCALEDOWN) { + /* +@@ -739,7 +740,10 @@ find_nfs_srvr(mntfs *mf) + * to decide the highest NFS version to try. + */ + #ifdef MNTTAB_OPT_VERS +- nfs_version = hasmntval(&mnt, MNTTAB_OPT_VERS); ++ if (!hasmntvaldelim(&mnt, MNTTAB_OPT_VERS, ",.", &val) || val < 0) ++ nfs_version = 0; ++ else ++ nfs_version = val; + #endif /* MNTTAB_OPT_VERS */ + + #ifdef MNTTAB_OPT_PROTO +@@ -934,11 +938,11 @@ find_nfs_srvr(mntfs *mf) + * If the port has been determined from the portmapper, use that. + * Default to NFS_PORT otherwise (cf. RFC 2054, 3). + */ +- nfs_port_opt = hasmntval(&mnt, MNTTAB_OPT_PORT); +- if (nfs_port_opt > 0) +- nfs_port = htons(nfs_port_opt); +- if (!nfs_port) ++ if (!hasmntval(&mnt, MNTTAB_OPT_PORT, &nfs_port) ++ || nfs_port > 65535 || nfs_port <= 0) + nfs_port = htons(NFS_PORT); ++ else ++ nfs_port = htons(nfs_port); + + dlog("%s: using port %d for nfs on %s", __func__, + (int) ntohs(nfs_port), host); +@@ -1050,7 +1054,9 @@ no_dns: + fs->fs_flags |= FSF_PING_UNINIT; /* pinger hasn't been initialized */ + np = ALLOC(struct nfs_private); + memset((voidp) np, 0, sizeof(*np)); +- np->np_mountd = htons(hasmntval(&mnt, "mountport")); ++ if (!hasmntval(&mnt, "mountport", &val) || val < 0) ++ val = 0; ++ np->np_mountd = htons(val); + if (np->np_mountd == 0) { + np->np_mountd_inval = 'Y'; + np->np_xid = XID_ALLOC(); +--- am-utils-6.2.orig/hlfsd/hlfsd.c ++++ am-utils-6.2/hlfsd/hlfsd.c +@@ -530,8 +530,7 @@ main(int argc, char *argv[]) + + genflags = compute_mount_flags(&mnt); + +- retry = hasmntval(&mnt, MNTTAB_OPT_RETRY); +- if (retry <= 0) ++ if (!hasmntval(&mnt, MNTTAB_OPT_RETRY, &retry) || retry <= 0) + retry = 1; /* XXX */ + + memmove(&anh.v2, root_fhp, sizeof(*root_fhp)); +--- am-utils-6.2.orig/include/am_utils.h ++++ am-utils-6.2/include/am_utils.h +@@ -290,8 +290,8 @@ extern int compute_mount_flags(mntent_t + extern void discard_nfs_args(void *, u_long); + extern u_long get_amd_program_number(void); + extern int getcreds(struct svc_req *, uid_t *, gid_t *, SVCXPRT *); +-extern int hasmntval(mntent_t *, char *); +-extern unsigned int hasmntvalerr(mntent_t *, char *, int *); ++extern int hasmntval(mntent_t *, char *, int *); ++extern int hasmntvaldelim(mntent_t *, char *, const char *, int *); + extern char *hasmntstr(mntent_t *, char *); + extern char *hasmnteq(mntent_t *, char *); + extern char *haseq(char *); +--- am-utils-6.2.orig/libamu/mount_fs.c ++++ am-utils-6.2/libamu/mount_fs.c +@@ -188,8 +188,10 @@ static void + addvers(char *zopts, size_t l, mntent_t *mnt, u_long have_vers, + u_long want_vers) + { +- if (have_vers == want_vers && +- hasmntval(mnt, MNTTAB_OPT_VERS) != want_vers) { ++ int val; ++ if (have_vers == want_vers ++ && hasmntvaldelim(mnt, MNTTAB_OPT_VERS, ".,", &val) ++ && (u_long)val != want_vers) { + char optsbuf[48]; + xsnprintf(optsbuf, sizeof(optsbuf), + "%s=%d", MNTTAB_OPT_VERS, want_vers); +@@ -391,7 +393,7 @@ compute_nfs_attrcache_flags(struct nfs_c + * on the values of the attribute caches. + */ + #ifdef MNTTAB_OPT_ACTIMEO +- err_acval = hasmntvalerr(mntp, MNTTAB_OPT_ACTIMEO, &acval); /* attr cache timeout (sec) */ ++ err_acval = !hasmntval(mntp, MNTTAB_OPT_ACTIMEO, &acval); /* attr cache timeout (sec) */ + #endif /* MNTTAB_OPT_ACTIMEO */ + + /*** acregmin ***/ +@@ -402,7 +404,7 @@ compute_nfs_attrcache_flags(struct nfs_c + } else { + # ifdef MNTTAB_OPT_ACREGMIN + int tmp; +- err_acrdmm = hasmntvalerr(mntp, MNTTAB_OPT_ACREGMIN, &tmp); ++ err_acrdmm = !hasmntval(mntp, MNTTAB_OPT_ACREGMIN, &tmp); + nap->acregmin = tmp; + # else /* not MNTTAB_OPT_ACREGMIN */ + nap->acregmin = 0; +@@ -423,7 +425,7 @@ compute_nfs_attrcache_flags(struct nfs_c + } else { + # ifdef MNTTAB_OPT_ACREGMAX + int tmp; +- err_acrdmm = hasmntvalerr(mntp, MNTTAB_OPT_ACREGMAX, &tmp); ++ err_acrdmm = !hasmntval(mntp, MNTTAB_OPT_ACREGMAX, &tmp); + nap->acregmax = tmp; + # else /* not MNTTAB_OPT_ACREGMAX */ + nap->acregmax = 0; +@@ -444,7 +446,7 @@ compute_nfs_attrcache_flags(struct nfs_c + } else { + # ifdef MNTTAB_OPT_ACDIRMIN + int tmp; +- err_acrdmm = hasmntvalerr(mntp, MNTTAB_OPT_ACDIRMIN, &tmp); ++ err_acrdmm = !hasmntval(mntp, MNTTAB_OPT_ACDIRMIN, &tmp); + nap->acdirmin = tmp; + # else /* not MNTTAB_OPT_ACDIRMIN */ + nap->acdirmin = 0; +@@ -465,7 +467,7 @@ compute_nfs_attrcache_flags(struct nfs_c + } else { + # ifdef MNTTAB_OPT_ACDIRMAX + int tmp; +- err_acrdmm = hasmntvalerr(mntp, MNTTAB_OPT_ACDIRMAX, &tmp); ++ err_acrdmm = !hasmntval(mntp, MNTTAB_OPT_ACDIRMAX, &tmp); + nap->acdirmax = tmp; + # else /* not MNTTAB_OPT_ACDIRMAX */ + nap->acdirmax = 0; +@@ -492,6 +494,7 @@ static void + compute_nfs_common_args(struct nfs_common_args *nap, mntent_t *mntp, + const char *nfs_proto, u_long nfs_version) + { ++ int val; + #ifdef MNT2_NFS_OPT_TCP + if (nfs_proto && STREQ(nfs_proto, "tcp")) + nap->flags |= MNT2_NFS_OPT_TCP; +@@ -536,7 +539,10 @@ compute_nfs_common_args(struct nfs_commo + # endif /* not MNTTAB_OPT_RESVPORT */ + #endif /* MNT2_NFS_OPT_RESVPORT */ + +- nap->rsize = hasmntval(mntp, MNTTAB_OPT_RSIZE); ++ if (!hasmntval(mntp, MNTTAB_OPT_RSIZE, &val) || val <= 0) ++ nap->rsize = 0; ++ else ++ nap->rsize = val; + #ifdef MNT2_NFS_OPT_RSIZE + if (nap->rsize) + nap->flags |= MNT2_NFS_OPT_RSIZE; +@@ -544,7 +550,10 @@ compute_nfs_common_args(struct nfs_commo + if (nfs_version == NFS_VERSION && nap->rsize > 8192) + nap->rsize = 8192; + +- nap->wsize = hasmntval(mntp, MNTTAB_OPT_WSIZE); ++ if (!hasmntval(mntp, MNTTAB_OPT_WSIZE, &val) || val <= 0) ++ nap->wsize = 0; ++ else ++ nap->wsize = val; + #ifdef MNT2_NFS_OPT_WSIZE + if (nap->wsize) + nap->flags |= MNT2_NFS_OPT_WSIZE; +@@ -552,13 +561,19 @@ compute_nfs_common_args(struct nfs_commo + if (nfs_version == NFS_VERSION && nap->wsize > 8192) + nap->wsize = 8192; + +- nap->timeo = hasmntval(mntp, MNTTAB_OPT_TIMEO); ++ if (!hasmntval(mntp, MNTTAB_OPT_TIMEO, &val) || val <= 0) ++ nap->timeo = 0; ++ else ++ nap->timeo = val; + #ifdef MNT2_NFS_OPT_TIMEO + if (nap->timeo) + nap->flags |= MNT2_NFS_OPT_TIMEO; + #endif /* MNT2_NFS_OPT_TIMEO */ + +- nap->retrans = hasmntval(mntp, MNTTAB_OPT_RETRANS); ++ if (!hasmntval(mntp, MNTTAB_OPT_RETRANS, &val) || val <= 0) ++ nap->retrans = 0; ++ else ++ nap->retrans = val; + #ifdef MNT2_NFS_OPT_RETRANS + if (nap->retrans) + nap->flags |= MNT2_NFS_OPT_RETRANS; +@@ -861,6 +876,7 @@ compute_nfs23_args(nfs_args_t *nap, + char *host_name, + char *fs_name) + { ++ int val; + struct nfs_common_args a; + /* initialize just in case */ + memset((voidp) nap, 0, sizeof(nfs_args_t)); +@@ -995,18 +1011,30 @@ compute_nfs23_args(nfs_args_t *nap, + /************************************************************************/ + + #ifdef MNT2_NFS_OPT_BIODS +- if ((nap->biods = hasmntval(mntp, MNTTAB_OPT_BIODS))) ++ if (!hasmntval(mntp, MNTTAB_OPT_BIODS, &val) || val <= 0) ++ nap->biods = 0; ++ else { ++ nap->biods = val; + nap->flags |= MNT2_NFS_OPT_BIODS; ++ } + #endif /* MNT2_NFS_OPT_BIODS */ + + #ifdef MNTTAB_OPT_SYMTTL /* symlink cache time-to-live */ +- if ((nap->symttl = hasmntval(mntp, MNTTAB_OPT_SYMTTL))) ++ if (!hasmntval(mntp, MNTTAB_OPT_SYMTTL, &val) || val <= 0) ++ nap->symttl = 0; ++ else { ++ nap->symttl = val; + nap->flags |= MNT2_NFS_OPT_SYMTTL; ++ } + #endif /* MNTTAB_OPT_SYMTTL */ + + #ifdef MNT2_NFS_OPT_PGTHRESH /* paging threshold */ +- if ((nap->pg_thresh = hasmntval(mntp, MNTTAB_OPT_PGTHRESH))) ++ if (!hasmntval(mntp, MNTTAB_OPT_PGTHRESH, &val) || val <= 0) ++ nap->pg_thresh = 0; ++ else { ++ nap->pg_thresh = val; + nap->flags |= MNT2_NFS_OPT_PGTHRESH; ++ } + #endif /* MNT2_NFS_OPT_PGTHRESH */ + + #if defined(MNT2_NFS_OPT_POSIX) && defined(MNTTAB_OPT_POSIX) +@@ -1020,7 +1048,7 @@ compute_nfs23_args(nfs_args_t *nap, + + #ifdef HAVE_TRANSPORT_TYPE_TLI + /* set up syncaddr field */ +- nap->syncaddr = (struct netbuf *) NULL; ++ nap->syncaddr = NULL; + + /* set up knconf field */ + if (get_knetconfig(&nap->knconf, nfsncp, nfs_proto) < 0) { +@@ -1043,9 +1071,12 @@ compute_nfs23_args(nfs_args_t *nap, + #endif /* HAVE_NFS_ARGS_T_OPTSTR */ + + #if defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) +- nap->maxgrouplist = hasmntval(mntp, MNTTAB_OPT_MAXGROUPS); +- if (nap->maxgrouplist != 0) ++ if (!hasmntval(mntp, MNTTAB_OPT_MAXGROUPS, &val) || val <= 0) ++ nap->maxgrouplist = 0; ++ else { ++ nap->maxgrouplist = val; + nap->flags |= MNT2_NFS_OPT_MAXGRPS; ++ } + #endif /* defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) */ + + /************************************************************************/ +@@ -1267,6 +1298,7 @@ compute_nfs4_args(nfs4_args_t *nap, + { + char *s; + struct nfs_common_args a; ++ int val; + uint16_t nfs_port; + + /* initialize just in case */ +@@ -1304,11 +1336,10 @@ compute_nfs4_args(nfs4_args_t *nap, + nap->host_addr = xmalloc(nap->host_addrlen); + memcpy(nap->host_addr, ip_addr, nap->host_addrlen); + +- nfs_port = hasmntval(mntp, MNTTAB_OPT_PORT); +- if (nfs_port == 0) ++ if (!hasmntval(mntp, MNTTAB_OPT_PORT, &val) || val <= 0 || val > 65536) + nfs_port = htons(NFS_PORT); + else +- nfs_port = htons(nfs_port); ++ nfs_port = htons(val); + + ((struct sockaddr_in *)nap->host_addr)->sin_port = nfs_port; + +@@ -1341,9 +1372,13 @@ compute_nfs4_args(nfs4_args_t *nap, + #endif /* MNT2_NFS_OPT_POSIX && MNTTAB_OPT_POSIX */ + + #if defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) +- nap->maxgrouplist = hasmntval(mntp, MNTTAB_OPT_MAXGROUPS); +- if (nap->maxgrouplist != 0) ++ nap->maxgrouplist = ++ if (!hasmntval(mntp, MNTTAB_OPT_MAXGROUPS, &val) || val <= 0) ++ nap->maxgrouplist = 0; ++ else { ++ nap->maxgrouplist = val; + nap->flags |= MNT2_NFS_OPT_MAXGRPS; ++ } + #endif /* defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) */ + + #ifdef HAVE_NFS_ARGS_T_OPTSTR +--- am-utils-6.2.orig/libamu/mtab.c ++++ am-utils-6.2/libamu/mtab.c +@@ -133,22 +133,12 @@ hasmnteq(mntent_t *mnt, char *opt) + + + /* +- * Wrapper around hasmntvalerr(), which retains backwards compatibiliy with +- * older use of hasmntval(). +- * +- * XXX: eventually, all use of hasmntval() should be replaced with +- * hasmntvalerr(). ++ * Wrapper around hasmntvaldelim(), which uses the standard "," delim + */ + int +-hasmntval(mntent_t *mnt, char *opt) ++hasmntval(mntent_t *mnt, char *opt, int *valp) + { +- int err, val = 0; +- +- err = hasmntvalerr(mnt, opt, &val); +- if (err) /* if there was an error (hasmntvalerr returned 1) */ +- return 0; /* redundant: val==0 above, but leave here for clarity */ +- /* otherwise there was no error */ +- return val; ++ return hasmntvaldelim(mnt, opt, ",", valp); + } + + +@@ -158,36 +148,31 @@ hasmntval(mntent_t *mnt, char *opt) + * valp (argument won't be touched if no value is set, for example due to an + * error). + * +- * Returns non-zero (1) on error; returns 0 on success. +- * +- * XXX: eventually, all use of hasmntval() should be replaced with +- * hasmntvalerr(). ++ * Returns 0 on error; returns 1 on success. + */ +-unsigned int +-hasmntvalerr(mntent_t *mnt, char *opt, int *valp) ++int ++hasmntvaldelim(mntent_t *mnt, char *opt, const char *delim, int *valp) + { + char *str = amu_hasmntopt(mnt, opt); +- int err = 1; /* 1 means no good value was set (an error) */ + char *eq, *endptr; + long int i; + + /* exit if no option specificed */ +- if (!str) { +- goto out; +- } ++ if (!str) ++ return 0; + + eq = hasmnteq(mnt, opt); + + if (!eq) { /* no argument to option ('=' sign was missing) */ + plog(XLOG_MAP, "numeric option to \"%s\" missing", opt); +- goto out; ++ return 0; + } + + /* if got here, then we had an '=' after option name */ + endptr = NULL; + i = strtol(eq, &endptr, 0); /* hex and octal allowed ;-) */ + if (!endptr || +- (endptr != eq && (*endptr == ',' || *endptr == '\0'))) { ++ (endptr != eq && (*endptr == '\0' || strchr(delim, *endptr)))) { + /* + * endptr set means strtol saw a non-digit. If the non-digit is a + * comma, it's probably the start of the next option. If the comma is +@@ -198,15 +183,13 @@ hasmntvalerr(mntent_t *mnt, char *opt, i + * string. + */ + *valp = (int) i; /* set good value */ +- err = 0; /* no error */ ++ return 1; + } else { + /* whatever was after the '=' sign wasn't a number */ + plog(XLOG_MAP, "invalid numeric option in \"%s\": \"%s\"", opt, str); + /* fall through to error/exit processing */ ++ return 0; + } +- +- out: +- return err; + } + + diff --git a/am-utils-6.2-There-is-really-no-ti-rpc-nfsv4-so-dont-send-one.patch b/am-utils-6.2-There-is-really-no-ti-rpc-nfsv4-so-dont-send-one.patch new file mode 100644 index 0000000..78ba30b --- /dev/null +++ b/am-utils-6.2-There-is-really-no-ti-rpc-nfsv4-so-dont-send-one.patch @@ -0,0 +1,45 @@ +commit e7d1bd38b1d1de6b1bec603eeff915ebb57f3c37 +Author: zoulasc +Date: Thu Mar 10 17:50:34 2016 -0500 + + - There is really no ti-rpc nfsv4, so don't send one; instead send a v3 for now. + +diff --git a/amd/srvr_nfs.c b/amd/srvr_nfs.c +index b7c852c..1418a1a 100644 +--- a/amd/srvr_nfs.c ++++ b/amd/srvr_nfs.c +@@ -140,6 +140,7 @@ create_ping_payload(u_long nfs_version) + { + XDR ping_xdr; + struct rpc_msg ping_msg; ++ int rpc_version; + + /* + * Non nfs mounts like /afs/glue.umd.edu have ended up here. +@@ -150,7 +151,17 @@ create_ping_payload(u_long nfs_version) + } else + plog(XLOG_INFO, "%s: nfs_version: %d", __func__, (int) nfs_version); + +- rpc_msg_init(&ping_msg, NFS_PROGRAM, nfs_version, NFSPROC_NULL); ++ /* ++ * There is really no ti-rpc version for NFSv4; most servers respond ++ * with "program unavailable", which is ok since we don't check the ++ * payload, we just care about the pings. Some servers though are ++ * antisocial (Isilon) and don't respond (which is their right to do). ++ * Eventually we should make a new mechanism to do server pings for ++ * NFSv4, but for now it is easiest to downgrade the RPC version to 3. ++ */ ++ rpc_version = nfs_version == 4 ? 3 : nfs_version; ++ ++ rpc_msg_init(&ping_msg, NFS_PROGRAM, rpc_version, NFSPROC_NULL); + + /* + * Create an XDR endpoint +@@ -600,6 +611,7 @@ nfs_keepalive(voidp v) + case ENETUNREACH: + case EHOSTDOWN: + case EHOSTUNREACH: ++ dlog("Failed to NFS ping to %s (%d)", fs->fs_host, error); + np->np_ping = MAX_ALLOWED_PINGS; /* immediately down */ + np->np_ttl = (time_t) 0; + /* diff --git a/am-utils-6.2-Update-the-ctime-of-the-directory-too-since-it-changed.patch b/am-utils-6.2-Update-the-ctime-of-the-directory-too-since-it-changed.patch new file mode 100644 index 0000000..64fbaff --- /dev/null +++ b/am-utils-6.2-Update-the-ctime-of-the-directory-too-since-it-changed.patch @@ -0,0 +1,30 @@ +commit ad416c8656c2dff6f1bcffee8517284de94c9d92 +Author: zoulasc +Date: Thu May 12 10:21:55 2016 -0400 + + Update the ctime of the directory too, since it changed. From Mark Davies + +diff --git a/amd/autil.c b/amd/autil.c +index 35d8708..f44a0e2 100644 +--- a/amd/autil.c ++++ b/amd/autil.c +@@ -183,6 +183,7 @@ forcibly_timeout_mp(am_node *mp) + * more. + */ + clocktime(&mp->am_parent->am_fattr.na_mtime); ++ mp->am_parent->am_fattr.na_ctime = mp->am_parent->am_fattr.na_mtime; + reschedule_timeout_mp(); + } + } +@@ -312,8 +313,10 @@ am_mounted(am_node *mp) + /* + * Update mtime of parent node (copying "struct nfstime" in '=' below) + */ +- if (mp->am_parent && mp->am_parent->am_al->al_mnt) ++ if (mp->am_parent && mp->am_parent->am_al->al_mnt) { + mp->am_parent->am_fattr.na_mtime = mp->am_fattr.na_mtime; ++ mp->am_parent->am_fattr.na_ctime = mp->am_fattr.na_mtime; ++ } + + /* + * This is ugly, but essentially unavoidable diff --git a/am-utils-6.2-add-more-debugging-in-the-unmount-path.patch b/am-utils-6.2-add-more-debugging-in-the-unmount-path.patch new file mode 100644 index 0000000..ea310d0 --- /dev/null +++ b/am-utils-6.2-add-more-debugging-in-the-unmount-path.patch @@ -0,0 +1,94 @@ +commit a5ea57a64a1d70486e8d8ab2da944e50ca51b836 +Author: zoulasc +Date: Tue Mar 8 23:31:26 2016 -0500 + + - add more debugging in the unmount path + - if the EXPIRE_MULTI call fails, with EAGAIN, fail back to the EXPIRE call + seems to fix unmounting with nfsv4 volumes. + +diff --git a/conf/autofs/autofs_linux.c b/conf/autofs/autofs_linux.c +index d543979..5b4ac06 100644 +--- a/conf/autofs/autofs_linux.c ++++ b/conf/autofs/autofs_linux.c +@@ -365,6 +365,7 @@ autofs_expire_one(am_node *mp, char *name, autofs_wqt_t token) + + ap = find_ap(ap_path); + if (ap == NULL) { ++ dlog("%s: could not find %s", __func__, ap_path); + /* not found??? not sure what to do here... */ + send_fail(fh->ioctlfd, token); + goto out; +@@ -376,6 +377,7 @@ autofs_expire_one(am_node *mp, char *name, autofs_wqt_t token) + p->next = fh->pending_umounts; + fh->pending_umounts = p; + ++ dlog("%s: unmount for %s", __func__, ap_path); + unmount_mp(ap); + + out: +@@ -426,6 +428,7 @@ autofs_missing_one(am_node *mp, autofs_wqt_t wait_queue_token, char *name) + dlog("Mount still pending, not sending autofs reply yet"); + return; + } ++ dlog("%s: lookup failed for %s/%s", __func__, mp->am_path, name); + autofs_lookup_failed(mp, name); + } + mp->am_stats.s_lookup++; +@@ -872,15 +875,42 @@ autofs_compute_mount_flags(mntent_t *mnt) + return 0; + } + ++static int autofs_expire_4(am_node *mp) ++{ ++ struct autofs_packet_expire pkt; ++ autofs_fh_t *fh = mp->am_autofs_fh; ++ ++ dlog("Calling AUTOFS_IOC_EXPIRE"); ++ if (ioctl(fh->ioctlfd, AUTOFS_IOC_EXPIRE, &pkt) == -1) ++ { ++ dlog("AUTOFS_IOC_EXPIRE for %s failed %d", mp->am_path, errno); ++ return -1; ++ } ++ ++ autofs_handle_expire(mp, &pkt); ++ return 0; ++} ++ + + #if AUTOFS_MAX_PROTO_VERSION >= 4 + static int autofs_timeout_mp_task(void *arg) + { + am_node *mp = (am_node *)arg; + autofs_fh_t *fh = mp->am_autofs_fh; +- int now = 0; +- +- while (ioctl(fh->ioctlfd, AUTOFS_IOC_EXPIRE_MULTI, &now) == 0); ++ int how = AUTOFS_EXP_IMMEDIATE; ++ ++ for (;;) ++ { ++ dlog("Calling AUTOFS_IOC_EXPIRE_MULTI"); ++ if (ioctl(fh->ioctlfd, AUTOFS_IOC_EXPIRE_MULTI, &how) == -1) ++ { ++ dlog("AUTOFS_IOC_EXPIRE_MULTI for %s failed %d", mp->am_path, errno); ++ if (errno != EAGAIN) ++ break; ++ if (autofs_expire_4(mp) == -1) ++ break; ++ } ++ } + return 0; + } + #endif /* AUTOFS_MAX_PROTO_VERSION >= 4 */ +@@ -895,9 +925,8 @@ void autofs_timeout_mp(am_node *mp) + mp->am_autofs_ttl = now + gopt.am_timeo_w; + + if (fh->version < 4) { +- struct autofs_packet_expire pkt; +- while (ioctl(fh->ioctlfd, AUTOFS_IOC_EXPIRE, &pkt) == 0) +- autofs_handle_expire(mp, &pkt); ++ while (autofs_expire_4(mp) == 0) ++ continue; + return; + } + diff --git a/am-utils-6.2-dont-use-logical-double-ampersand-when-ampersand-is-meant.patch b/am-utils-6.2-dont-use-logical-double-ampersand-when-ampersand-is-meant.patch new file mode 100644 index 0000000..6271797 --- /dev/null +++ b/am-utils-6.2-dont-use-logical-double-ampersand-when-ampersand-is-meant.patch @@ -0,0 +1,19 @@ +commit a187041e062c5b656def30a3ec282156360003f3 +Author: Christos Zoulas +Date: Wed Jan 21 23:28:46 2015 -0500 + + don't use logical && when & is meant + +diff --git a/amd/map.c b/amd/map.c +index fce8273..0d404cf 100644 +--- a/amd/map.c ++++ b/amd/map.c +@@ -752,7 +752,7 @@ umount_exported(void) + } else { + am_unmounted(mp); + } +- if (!(mf->mf_flags && (MFF_UNMOUNTING|MFF_MOUNTED))) ++ if (!(mf->mf_flags & (MFF_UNMOUNTING|MFF_MOUNTED))) + exported_ap[i] = NULL; + } else { + /* diff --git a/am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch b/am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch new file mode 100644 index 0000000..2ddb6d1 --- /dev/null +++ b/am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch @@ -0,0 +1,57 @@ +am-utils-6.2 - fix compiler assignment warning due to libtirpc + +From: Ian Kent + +When using libtirpc there is a compiler warning on an assignment in +the amq_program_1() function. + +This warning was due to libtirpc using struct sockaddr_in6 for some +address fields in the transport structure as it is backward compatible +with struct sockaddr_in when IPv4 is in use. + +But if TLI is in use svc_getcaller() may not be defined or, if it is, +doesn't work as expected. + +So change to using amu_svc_getcaller(), which deals with the needed +cast for libtirpc, and handle the NULL return if TLI is being used. + +Signed-off-by: Ian Kent +--- + amd/amq_svc.c | 24 +++++++++++++++--------- + 1 file changed, 15 insertions(+), 9 deletions(-) + +diff --git a/amd/amq_svc.c b/amd/amq_svc.c +index 1f2b3d6..40f79fa 100644 +--- a/amd/amq_svc.c ++++ b/amd/amq_svc.c +@@ -162,15 +162,21 @@ amq_program_1(struct svc_req *rqstp, SVCXPRT *transp) + + #if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) + if (gopt.flags & CFM_USE_TCPWRAPPERS) { +- struct sockaddr_in *remote_addr = svc_getcaller(rqstp->rq_xprt); +- char *remote_hostname = inet_ntoa(remote_addr->sin_addr); +- +- if (!amqsvc_is_client_allowed(remote_addr)) { +- plog(XLOG_WARNING, "Amd denied remote amq service to %s", remote_hostname); +- svcerr_auth(transp, AUTH_FAILED); +- return; +- } else { +- dlog("Amd allowed remote amq service to %s", remote_hostname); ++ struct sockaddr_in *remote_addr = amu_svc_getcaller(rqstp->rq_xprt); ++ char *remote_hostname; ++ ++ /* Check the return from amu_svc_getcaller() becuase it's always NULL ++ * if TLI is in use. ++ */ ++ if (remote_addr) { ++ remote_hostname = inet_ntoa(remote_addr->sin_addr); ++ if (!amqsvc_is_client_allowed(remote_addr)) { ++ plog(XLOG_WARNING, "Amd denied remote amq service to %s", remote_hostname); ++ svcerr_auth(transp, AUTH_FAILED); ++ return; ++ } else { ++ dlog("Amd allowed remote amq service to %s", remote_hostname); ++ } + } + } + #endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) */ diff --git a/am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch b/am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch new file mode 100644 index 0000000..6c5c026 --- /dev/null +++ b/am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch @@ -0,0 +1,24 @@ +am-utils-6.2 - fix logical not comparison in get_ldap_timestamp() + +From: Ian Kent + +Looks like the not in this comparison is not meant to be applied to *ts. + +Signed-off-by: Ian Kent +--- + amd/info_ldap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/amd/info_ldap.c b/amd/info_ldap.c +index cfed6fd..ecfc210 100644 +--- a/amd/info_ldap.c ++++ b/amd/info_ldap.c +@@ -446,7 +446,7 @@ get_ldap_timestamp(ALD *a, char *map, time_t *ts) + vals[0], map); + err = ENOENT; + } +- if (!*ts > 0) { ++ if (!(*ts > 0)) { + plog(XLOG_USER, "Nonpositive timestamp %ld for map %s\n", + (u_long) *ts, map); + err = ENOENT; diff --git a/am-utils-6.2-fix-umount-to-mount-race.patch b/am-utils-6.2-fix-umount-to-mount-race.patch new file mode 100644 index 0000000..ca3b397 --- /dev/null +++ b/am-utils-6.2-fix-umount-to-mount-race.patch @@ -0,0 +1,54 @@ +am-utils-6.2 - fix umount to mount race + +From: Richard P + +If a mount request arrives while its mount fs is being umounted the +the reference count of the mount fs never reaches 1 so the location +MF_MOUNTED is not cleared and the mount fs instance is not freed. + +This leads to amd thinking the mount fs is still mounted and the +mount request succeeds without its corresponding target being +mounted. + +This patch from Richard P (with an added fix to a log message) +fixes the problem. + +Signed-off-by: Richard P +Signed-off-by: Ian Kent +--- + amd/amfs_generic.c | 7 +++++-- + amd/autil.c | 6 ++++++ + 2 files changed, 11 insertions(+), 2 deletions(-) + +--- am-utils-6.2.orig/amd/amfs_generic.c ++++ am-utils-6.2/amd/amfs_generic.c +@@ -743,9 +743,12 @@ amfs_bgmount(struct continuation *cp) + + if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { + /* +- * Still mounting - retry later ++ * Still mounting or umounting - retry later + */ +- dlog("mount of \"%s\" already pending", mf->mf_info); ++ if (mf->mf_flags & MFF_MOUNTING) ++ dlog("mount of \"%s\" already pending", mf->mf_info); ++ else ++ dlog("unmount of \"%s\" already pending", mf->mf_info); + goto retry; + } + +--- am-utils-6.2.orig/amd/autil.c ++++ am-utils-6.2/amd/autil.c +@@ -703,6 +703,12 @@ am_unmounted(am_node *mp) + } + + /* ++ * Clear the mounted flag in case there is a pending mount with ++ * the same target fs. ++ */ ++ mf->mf_flags &= ~MFF_MOUNTED; ++ ++ /* + * If this is a pseudo-directory then adjust the link count + * in the parent + */ diff --git a/am-utils-6.2-make-sure-variables-are-initialized.patch b/am-utils-6.2-make-sure-variables-are-initialized.patch new file mode 100644 index 0000000..b5449de --- /dev/null +++ b/am-utils-6.2-make-sure-variables-are-initialized.patch @@ -0,0 +1,20 @@ +commit 54da7c8206e38d0bf08a250835553754a1235360 +Author: Christos Zoulas +Date: Wed Jan 21 23:28:33 2015 -0500 + + make sure variables are initialized + +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index 7192a6a..30effba 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -1711,6 +1711,9 @@ am_nfs3_fsstat_3_svc(am_FSSTAT3args *argp, struct svc_req *rqstp) + if ((gopt.flags & CFM_SHOW_STATFS_ENTRIES) && + mp->am_al->al_mnt && mp->am_al->al_mnt->mf_mopts) { + mnt.mnt_opts = mp->am_al->al_mnt->mf_mopts; ++ blocks = 0; ++ bfree = 0; ++ bavail = 0; + if (amu_hasmntopt(&mnt, "browsable")) { + count_map_entries(mp, &blocks, &bfree, &bavail); + } diff --git a/am-utils-6.2-print_nfs_common_args-is-only-needed-with-DEBUG.patch b/am-utils-6.2-print_nfs_common_args-is-only-needed-with-DEBUG.patch new file mode 100644 index 0000000..404e51f --- /dev/null +++ b/am-utils-6.2-print_nfs_common_args-is-only-needed-with-DEBUG.patch @@ -0,0 +1,26 @@ +commit 116309607c437e302dafa1efb60330f54f815761 +Author: Christos Zoulas +Date: Sat Jan 17 12:21:24 2015 -0500 + + print_nfs_common_args() is only needed with DEBUG + +diff --git a/libamu/mount_fs.c b/libamu/mount_fs.c +index b5576bd..b577bab 100644 +--- a/libamu/mount_fs.c ++++ b/libamu/mount_fs.c +@@ -647,6 +647,7 @@ compute_nfs_common_args(struct nfs_common_args *nap, mntent_t *mntp, + #endif /* defined(MNT2_NFS_OPT_XLATECOOKIE) && defined(MNTTAB_OPT_XLATECOOKIE) */ + } + ++#ifdef DEBUG + static void + print_nfs_common_args(const struct nfs_common_args *a) + { +@@ -664,6 +665,7 @@ print_nfs_common_args(const struct nfs_common_args *a) + plog(XLOG_DEBUG, "NA->acdirmax = %lu", a->acdirmax); + #endif /* HAVE_NFS_ARGS_T_ACREGMIN */ + } ++#endif + + static void + discard_nfs23_args(nfs_args_t *nap) diff --git a/am-utils-6.2-remove-set-but-not-used-variable-again.patch b/am-utils-6.2-remove-set-but-not-used-variable-again.patch new file mode 100644 index 0000000..b4dcf94 --- /dev/null +++ b/am-utils-6.2-remove-set-but-not-used-variable-again.patch @@ -0,0 +1,26 @@ +commit a87188b9f0596651ce987253a6af23aca4b08b75 +Author: Christos Zoulas +Date: Sat Jan 17 12:42:55 2015 -0500 + + remove set but not used variable + +diff --git a/conf/transp/transp_sockets.c b/conf/transp/transp_sockets.c +index b3ad5fc..6326007 100644 +--- a/conf/transp/transp_sockets.c ++++ b/conf/transp/transp_sockets.c +@@ -418,7 +418,6 @@ u_long + get_nfs_version(char *host, struct sockaddr_in *sin, u_long nfs_version, const char *proto, u_long def) + { + CLIENT *clnt; +- int again = 0; + enum clnt_stat clnt_stat; + struct timeval tv; + int sock; +@@ -433,7 +432,6 @@ get_nfs_version(char *host, struct sockaddr_in *sin, u_long nfs_version, const c + nfs_version = def; + else + nfs_version = NFS_VERS_MAX; +- again = 1; + } + tv.tv_sec = 2; /* retry every 2 seconds, but also timeout */ + tv.tv_usec = 0; diff --git a/am-utils-6.2-remove-set-but-not-used-variable-mp_error.patch b/am-utils-6.2-remove-set-but-not-used-variable-mp_error.patch new file mode 100644 index 0000000..1f08d8a --- /dev/null +++ b/am-utils-6.2-remove-set-but-not-used-variable-mp_error.patch @@ -0,0 +1,28 @@ +commit ed717dad0fee421744a24e6fb43e09d62b3f898d +Author: Christos Zoulas +Date: Sat Jan 17 12:45:22 2015 -0500 + + remove set but not used variable + +diff --git a/amd/amfs_generic.c b/amd/amfs_generic.c +index 25d734b..c352a32 100644 +--- a/amd/amfs_generic.c ++++ b/amd/amfs_generic.c +@@ -1153,7 +1153,6 @@ amfs_generic_lookup_child(am_node *mp, char *fname, int *error_return, int op) + { + am_node *new_mp; + am_loc **al_array; +- int mp_error; + + dlog("in amfs_generic_lookup_child"); + +@@ -1178,9 +1177,6 @@ amfs_generic_lookup_child(am_node *mp, char *fname, int *error_return, int op) + return new_mp; + } + +- /* save error_return */ +- mp_error = *error_return; +- + al_array = amfs_lookup_loc(new_mp, error_return); + if (!al_array) { + new_mp->am_error = new_mp->am_al->al_mnt->mf_error = *error_return; diff --git a/am-utils-6.2-remove-set-but-not-used-variable-s.patch b/am-utils-6.2-remove-set-but-not-used-variable-s.patch new file mode 100644 index 0000000..20f5911 --- /dev/null +++ b/am-utils-6.2-remove-set-but-not-used-variable-s.patch @@ -0,0 +1,38 @@ +commit 79bb90caf12d2713b4736c3820135f0f00424f10 +Author: Christos Zoulas +Date: Sat Jan 17 12:29:03 2015 -0500 + + remove set but not used variable + +diff --git a/hlfsd/hlfsd.c b/hlfsd/hlfsd.c +index 686bb63..701abcd 100644 +--- a/hlfsd/hlfsd.c ++++ b/hlfsd/hlfsd.c +@@ -144,7 +144,6 @@ main(int argc, char *argv[]) + int opterrs = 0; + int retry; + int soNFS; /* NFS socket */ +- int s = -99; + mntent_t mnt; + nfs_args_t nfs_args; + am_nfs_handle_t anh; +@@ -449,17 +448,16 @@ main(int argc, char *argv[]) + * set this signal handler. + */ + if (amuDebug(D_DAEMON)) { +- s = -99; + while (stoplight != SIGUSR2) { + plog(XLOG_INFO, "parent waits for child to setup (stoplight=%d)", stoplight); + #ifdef HAVE_SIGSUSPEND + { + sigset_t mask; + sigemptyset(&mask); +- s = sigsuspend(&mask); /* wait for child to set up */ ++ (void)sigsuspend(&mask); /* wait for child to set up */ + } + #else /* not HAVE_SIGSUSPEND */ +- s = sigpause(0); /* wait for child to set up */ ++ (void)sigpause(0); /* wait for child to set up */ + #endif /* not HAVE_SIGSUSPEND */ + sleep(1); + } diff --git a/am-utils-6.2-remove-unused-function-show_map.patch b/am-utils-6.2-remove-unused-function-show_map.patch new file mode 100644 index 0000000..f7b6648 --- /dev/null +++ b/am-utils-6.2-remove-unused-function-show_map.patch @@ -0,0 +1,22 @@ +commit f61becdba8df1d6d515f5476d312d3cf4e933946 +Author: Christos Zoulas +Date: Sat Jan 17 12:43:32 2015 -0500 + + remove unused function + +diff --git a/amq/amq.c b/amq/amq.c +index e99732f..5d4ed7a 100644 +--- a/amq/amq.c ++++ b/amq/amq.c +@@ -256,11 +256,6 @@ show_mi(amq_mount_info_list *ml, enum show_opt e, int *mwid, int *dwid, int *twi + } + + static void +-show_map(amq_map_info *mi) +-{ +-} +- +-static void + show_mapinfo(amq_map_info_list *ml, enum show_opt e, int *nwid, int *wwid) + { + u_int i; diff --git a/am-utils-6.2-uid_t-might-be-a-different-size-than-unsigned-int.patch b/am-utils-6.2-uid_t-might-be-a-different-size-than-unsigned-int.patch new file mode 100644 index 0000000..9b5fbc4 --- /dev/null +++ b/am-utils-6.2-uid_t-might-be-a-different-size-than-unsigned-int.patch @@ -0,0 +1,59 @@ +commit 76e1a5ddc9ef9730205b2da2ed6b654d8fbaef40 +Author: Christos Zoulas +Date: Sat Jan 17 12:27:56 2015 -0500 + + uid_t might be a different size than unsigned int, so XXX: truncate. + +diff --git a/hlfsd/stubs.c b/hlfsd/stubs.c +index b26e5f4..70876b7 100644 +--- a/hlfsd/stubs.c ++++ b/hlfsd/stubs.c +@@ -60,6 +60,21 @@ static int started; + static am_nfs_fh slink; + static am_nfs_fh un_fhandle; + ++static void ++xgetuid(uid_t *uid, const void *p) ++{ ++ u_int xuid; ++ (void)memcpy(&xuid, p, sizeof(xuid)); ++ *uid = xuid; ++} ++ ++static void ++xputuid(void *p, uid_t uid) ++{ ++ u_int xuid = uid; ++ (void)memcpy(p, &xuid, sizeof(xuid)); ++} ++ + /* + * GLOBALS: + */ +@@ -160,7 +175,7 @@ nfsproc_getattr_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) + if (gid != hlfs_gid) { + res.ns_status = NFSERR_STALE; + } else { +- (void)memcpy(&uid, argp->fh_data, sizeof(uid)); ++ xgetuid(&uid, argp->fh_data); + if (plt_search(uid) != (uid2home_t *) NULL) { + res.ns_status = NFS_OK; + un_fattr.na_fileid = uid; +@@ -278,7 +293,7 @@ nfsproc_lookup_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) + un_fattr.na_fileid = untab[idx].uid; + res.dr_u.dr_drok_u.drok_attributes = un_fattr; + memset(&un_fhandle, 0, sizeof(un_fhandle)); +- memcpy(un_fhandle.fh_data, &untab[idx].uid, sizeof(untab[idx].uid)); ++ xputuid(un_fhandle.fh_data, untab[idx].uid); + xstrlcpy((char *) &un_fhandle.fh_data[sizeof(int)], + untab[idx].username, + sizeof(am_nfs_fh) - sizeof(int)); +@@ -333,7 +348,7 @@ nfsproc_readlink_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) + } + + if (groupid == hlfs_gid) { +- memcpy(&userid, argp->fh_data, sizeof(userid)); ++ xgetuid(&userid, argp->fh_data); + username = (char *) &argp->fh_data[sizeof(int)]; + if (!(res.rlr_u.rlr_data_u = mailbox(userid, username))) + return (nfsreadlinkres *) NULL; diff --git a/am-utils.spec b/am-utils.spec index 8e8c4b0..7cbfcb6 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 12%{?dist} +Release: 20%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -45,20 +45,43 @@ Requires(preun): /sbin/install-info # Fix problems with possible future libtool rebases (#1181698) Patch1: am-utils-6.2-dont-include-auto-generated-macros-in-aclinlude_m4.patch +Patch2: am-utils-6.2-print_nfs_common_args-is-only-needed-with-DEBUG.patch +Patch3: am-utils-6.2-uid_t-might-be-a-different-size-than-unsigned-int.patch +Patch4: am-utils-6.2-remove-set-but-not-used-variable-s.patch +Patch5: am-utils-6.2-remove-set-but-not-used-variable-again.patch +Patch6: am-utils-6.2-remove-unused-function-show_map.patch +Patch7: am-utils-6.2-remove-set-but-not-used-variable-mp_error.patch +Patch8: am-utils-6.2-32-bit-fixes.patch +Patch9: am-utils-6.2-make-sure-variables-are-initialized.patch +Patch10: am-utils-6.2-dont-use-logical-double-ampersand-when-ampersand-is-meant.patch +Patch11: am-utils-6.2-Fix-nfs-args-setting-code.patch -Patch2: am-utils-6.2-add-debug-log-trace-to-NFSv3-readdirplus.patch -Patch3: am-utils-6.2-fix-NFSv3-access-method-return-on-non-existent-mount-point.patch -Patch4: am-utils-6.2-fix-NFSv3-lookup-dir-attribute-return-value.patch -Patch5: am-utils-6.2-fix-NFSv3-readdir-post_op_dir-attributes-return.patch -Patch6: am-utils-6.2-fix-NFSv3-unlink3_or_rmdir3-post_op-attributes-return.patch +Patch12: am-utils-6.2-add-debug-log-trace-to-NFSv3-readdirplus.patch +Patch13: am-utils-6.2-fix-NFSv3-access-method-return-on-non-existent-mount-point.patch +Patch14: am-utils-6.2-fix-NFSv3-lookup-dir-attribute-return-value.patch +Patch15: am-utils-6.2-fix-NFSv3-readdir-post_op_dir-attributes-return.patch +Patch16: am-utils-6.2-fix-NFSv3-unlink3_or_rmdir3-post_op-attributes-return.patch -Patch7: am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch -Patch8: am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch -Patch9: am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch -Patch10: am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch -Patch11: am-utils-6.2-add-NFSv3-rpc-request-validation.patch -Patch12: am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch -Patch13: am-utils-6.2-use-linux-libtirpc-if-present.patch +Patch17: am-utils-6.2-fix-Linux-NFS-recognition-of-umounts.patch +Patch18: am-utils-6.2-add-get_nfs_xprt-and-put_nfs_xprt-functions.patch +Patch19: am-utils-6.2-use-new-get_nfs_xprt-and-put_nfs_xprt-functions.patch +Patch20: am-utils-6.2-add-NFSv3-nfs_quick_reply-functionality.patch +Patch21: am-utils-6.2-add-NFSv3-rpc-request-validation.patch +Patch22: am-utils-6.2-fix-wcc-attr-usage-in-unlink3_or_rmdir3.patch + +Patch23: am-utils-6.2-Add-the-sys-alias-for-unix-as-well-as-none-and-null.patch +Patch24: am-utils-6.2-Default-to-string-mount-options-for-NFSv4.patch +Patch25: am-utils-6.2-Improve-debugging-for-unmounting.patch +Patch26: am-utils-6.2-add-more-debugging-in-the-unmount-path.patch +Patch27: am-utils-6.2-There-is-really-no-ti-rpc-nfsv4-so-dont-send-one.patch +Patch28: am-utils-6.2-Fix-SEGV-on-amq-entries-that-print-times.patch +Patch29: am-utils-6.2-Make-hasmntval-return-an-0-on-error-1-on-success.patch +Patch30: am-utils-6.2-Update-the-ctime-of-the-directory-too-since-it-changed.patch + +Patch31: am-utils-6.2-use-linux-libtirpc-if-present.patch +Patch32: am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch +Patch33: am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch +Patch34: am-utils-6.2-fix-umount-to-mount-race.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -96,6 +119,27 @@ mounting and unmounting filesystems. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 ./bootstrap @@ -207,6 +251,29 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Sep 14 2016 Ian Kent - 5:6.2.0-20 +- print_nfs_common_args() is only needed with DEBUG. +- uid_t might be a different size than unsigned int. +- remove set but not used variable s. +- remove set but not used variable again. +- remove unused function show_map(). +- remove set but not used variable mp_error. +- 32 bit fixes. +- make sure variables are initialized. +- dont use logical double ampersand when ampersand is meant. +- Fix nfs args setting code. +- Add the sys alias for unix as well as none and null. +- Default to string mount options for NFSv4. +- Improve debugging for unmounting. +- add more debugging in the unmount path. +- There is really no ti-rpc nfsv4 so dont send one. +- Fix SEGV on amq entries that print times. +- Make hasmntval return an 0 on error 1 on success. +- Update the ctime of the directory too since it changed. +- fix compiler assignment warning due to libtirpc. +- fix logical not comparison in get_ldap_timestamp(). +- fix umount to mount race. + * Wed Mar 2 2016 Ian Kent - 5:6.2.0-12 - add get_nfs_xprt() and put_nfs_xprt() functions. - use new get_nfs_xprt() and put_nfs_xprt() functions. From cff2af1e7422955ea97ff56f304f5ecbc104292a Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Wed, 14 Sep 2016 17:56:29 +0800 Subject: [PATCH 06/57] - fix typo in libtirpc configure macro. --- am-utils-6.2-use-linux-libtirpc-if-present.patch | 2 +- am-utils.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/am-utils-6.2-use-linux-libtirpc-if-present.patch b/am-utils-6.2-use-linux-libtirpc-if-present.patch index 1649b54..df20d5c 100644 --- a/am-utils-6.2-use-linux-libtirpc-if-present.patch +++ b/am-utils-6.2-use-linux-libtirpc-if-present.patch @@ -88,6 +88,6 @@ index 0000000..918423c + TIRPC_CPPFLAGS="-I/usr/include/tirpc" + AC_DEFINE(HAVE_LIBTIRPC, 1, [Define to 1 if you have libtirpc headers installed]) + AC_CHECK_LIB(tirpc, clnt_tli_create, [TIRPC_LIBS="-ltirpc"], [TIRPC_CPPFLAGS=""])]) -+ AMU_CFLAGS="$ANU_CFLAGS $TIRPC_CPPFLAGS" ++ AMU_CFLAGS="$AMU_CFLAGS $TIRPC_CPPFLAGS" + LIBS="$LIBS $TIRPC_LIBS" +]) diff --git a/am-utils.spec b/am-utils.spec index 7cbfcb6..c2f75b6 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 20%{?dist} +Release: 21%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Sep 14 2016 Ian Kent - 5:6.2.0-21 +- fix typo in libtirpc configure macro. + * Wed Sep 14 2016 Ian Kent - 5:6.2.0-20 - print_nfs_common_args() is only needed with DEBUG. - uid_t might be a different size than unsigned int. From cc01065e1581519b61698f807d8b6801efa5b459 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 3 Oct 2016 16:54:15 +0800 Subject: [PATCH 07/57] - fix ambiguous else due to dlog() macro usage. --- am-utils-6.2-fix-umount-to-mount-race.patch | 11 ++++++----- am-utils.spec | 5 ++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/am-utils-6.2-fix-umount-to-mount-race.patch b/am-utils-6.2-fix-umount-to-mount-race.patch index ca3b397..1121ece 100644 --- a/am-utils-6.2-fix-umount-to-mount-race.patch +++ b/am-utils-6.2-fix-umount-to-mount-race.patch @@ -16,13 +16,13 @@ fixes the problem. Signed-off-by: Richard P Signed-off-by: Ian Kent --- - amd/amfs_generic.c | 7 +++++-- + amd/amfs_generic.c | 8 ++++++-- amd/autil.c | 6 ++++++ - 2 files changed, 11 insertions(+), 2 deletions(-) + 2 files changed, 12 insertions(+), 2 deletions(-) --- am-utils-6.2.orig/amd/amfs_generic.c +++ am-utils-6.2/amd/amfs_generic.c -@@ -743,9 +743,12 @@ amfs_bgmount(struct continuation *cp) +@@ -743,9 +743,13 @@ amfs_bgmount(struct continuation *cp) if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { /* @@ -30,10 +30,11 @@ Signed-off-by: Ian Kent + * Still mounting or umounting - retry later */ - dlog("mount of \"%s\" already pending", mf->mf_info); -+ if (mf->mf_flags & MFF_MOUNTING) ++ if (mf->mf_flags & MFF_MOUNTING) { + dlog("mount of \"%s\" already pending", mf->mf_info); -+ else ++ } else { + dlog("unmount of \"%s\" already pending", mf->mf_info); ++ } goto retry; } diff --git a/am-utils.spec b/am-utils.spec index c2f75b6..1503578 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 21%{?dist} +Release: 22%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Oct 3 2016 Ian Kent - 5:6.2.0-22 +- fix ambiguous else due to dlog() macro usage. + * Wed Sep 14 2016 Ian Kent - 5:6.2.0-21 - fix typo in libtirpc configure macro. From 38fe2a08cf78f906a85946b0a0ec845617386460 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 19 Dec 2016 11:14:54 +0800 Subject: [PATCH 08/57] - fix fix-umount-to-mount-race patch (bug 1399213). --- am-utils-6.2-fix-umount-to-mount-race.patch | 98 +++++++++++++++++---- am-utils.spec | 5 +- 2 files changed, 87 insertions(+), 16 deletions(-) diff --git a/am-utils-6.2-fix-umount-to-mount-race.patch b/am-utils-6.2-fix-umount-to-mount-race.patch index 1121ece..fb8d77d 100644 --- a/am-utils-6.2-fix-umount-to-mount-race.patch +++ b/am-utils-6.2-fix-umount-to-mount-race.patch @@ -1,6 +1,6 @@ am-utils-6.2 - fix umount to mount race -From: Richard P +From: Ian Kent If a mount request arrives while its mount fs is being umounted the the reference count of the mount fs never reaches 1 so the location @@ -10,18 +10,39 @@ This leads to amd thinking the mount fs is still mounted and the mount request succeeds without its corresponding target being mounted. -This patch from Richard P (with an added fix to a log message) -fixes the problem. - -Signed-off-by: Richard P Signed-off-by: Ian Kent --- - amd/amfs_generic.c | 8 ++++++-- - amd/autil.c | 6 ++++++ - 2 files changed, 12 insertions(+), 2 deletions(-) + amd/amd.h | 1 + + amd/amfs_generic.c | 10 +++++++--- + amd/autil.c | 9 +++++++++ + amd/map.c | 13 ++++++++++++- + 4 files changed, 29 insertions(+), 4 deletions(-) ---- am-utils-6.2.orig/amd/amfs_generic.c -+++ am-utils-6.2/amd/amfs_generic.c +diff --git a/amd/amd.h b/amd/amd.h +index f66f5b7..504bcf7 100644 +--- a/amd/amd.h ++++ b/amd/amd.h +@@ -112,6 +112,7 @@ + #define AMF_AUTOFS 0x0004 /* This node is part of an autofs filesystem */ + #define AMF_REMOUNT 0x0008 /* This node needs to be remounted */ + #define AMF_SOFTLOOKUP 0x0010 /* This node returns EIO if server is down */ ++#define AMF_SOFTUNMOUNT 0x0020 /* unmount_node() returned EAGAIN, mount still referenced */ + + /* + * macros for struct mntfs (list of mounted filesystems) +diff --git a/amd/amfs_generic.c b/amd/amfs_generic.c +index 86d0ab7..7ab2829 100644 +--- a/amd/amfs_generic.c ++++ b/amd/amfs_generic.c +@@ -178,7 +178,7 @@ amfs_lookup_node(am_node *mp, char *fname, int *error_return) + error = mf->mf_error; + continue; + } +- if (!(mf->mf_flags & MFF_MOUNTED) || (mf->mf_flags & MFF_UNMOUNTING)) { ++ if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { + in_progrss: + /* + * If the fs is not mounted or it is unmounting then there @@ -743,9 +743,13 @@ amfs_bgmount(struct continuation *cp) if (mf->mf_flags & (MFF_MOUNTING | MFF_UNMOUNTING)) { @@ -38,18 +59,65 @@ Signed-off-by: Ian Kent goto retry; } ---- am-utils-6.2.orig/amd/autil.c -+++ am-utils-6.2/amd/autil.c -@@ -703,6 +703,12 @@ am_unmounted(am_node *mp) +diff --git a/amd/autil.c b/amd/autil.c +index f44a0e2..1962c71 100644 +--- a/amd/autil.c ++++ b/amd/autil.c +@@ -703,6 +703,15 @@ am_unmounted(am_node *mp) } /* + * Clear the mounted flag in case there is a pending mount with -+ * the same target fs. ++ * the same target fs and this is the last reference to it. + */ -+ mf->mf_flags &= ~MFF_MOUNTED; ++ if (mp->am_flags & AMF_SOFTUNMOUNT) ++ mp->am_flags &= ~AMF_SOFTUNMOUNT; ++ else ++ mf->mf_flags &= ~MFF_MOUNTED; + + /* * If this is a pseudo-directory then adjust the link count * in the parent */ +diff --git a/amd/map.c b/amd/map.c +index a6df44b..cf5263e 100644 +--- a/amd/map.c ++++ b/amd/map.c +@@ -819,11 +819,17 @@ unmount_node(opaque_t arg) + #endif /* HAVE_FS_AUTOFS */ + if (mf->mf_refc == 1) + error = mf->mf_ops->umount_fs(mp, mf); ++ ++ /* Mount was not actually unmounted, soft umount. ++ * Tell the caller about it. ++ */ ++ if (!error && mf->mf_refc > 1) ++ error = EAGAIN; + } + + /* do this again, it might have changed */ + mf = mp->am_al->al_mnt; +- if (error) { ++ if (error && error != EAGAIN) { + errno = error; /* XXX */ + dlog("%s: unmount: %m", mf->mf_mount); + } +@@ -870,6 +876,10 @@ free_map_if_success(int rc, int term, opaque_t arg) + #endif /* HAVE_FS_AUTOFS */ + amd_stats.d_uerr++; + } else if (rc) { ++ if (rc == EAGAIN) { ++ mp->am_flags |= AMF_SOFTUNMOUNT; ++ goto done; ++ } + notify_child(mp, AMQ_UMNT_FAILED, rc, 0); + if (mf->mf_ops == &amfs_program_ops || rc == EBUSY) + plog(XLOG_STATS, "\"%s\" on %s still active", mp->am_path, mf->mf_mount); +@@ -885,6 +895,7 @@ free_map_if_success(int rc, int term, opaque_t arg) + #endif /* HAVE_FS_AUTOFS */ + amd_stats.d_uerr++; + } else { ++done: + /* + * am_unmounted() will call notify_child() appropriately. + */ diff --git a/am-utils.spec b/am-utils.spec index 1503578..134dfef 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 22%{?dist} +Release: 23%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Dec 1 2016 Ian Kent - 5:6.2.0-23 +- fix fix-umount-to-mount-race patch (bug 1399213). + * Mon Oct 3 2016 Ian Kent - 5:6.2.0-22 - fix ambiguous else due to dlog() macro usage. From 638150685a9610ce813c874e05d8d410c656dfe8 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 10 Feb 2017 05:54:59 +0000 Subject: [PATCH 09/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 134dfef..c999ba4 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 23%{?dist} +Release: 24%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Fri Feb 10 2017 Fedora Release Engineering - 5:6.2.0-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Thu Dec 1 2016 Ian Kent - 5:6.2.0-23 - fix fix-umount-to-mount-race patch (bug 1399213). From 881e6e24f311ef3c230fd64e2215572160682bd1 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 26 Jul 2017 02:48:04 +0000 Subject: [PATCH 10/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index c999ba4..c557f22 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 24%{?dist} +Release: 25%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 26 2017 Fedora Release Engineering - 5:6.2.0-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Fri Feb 10 2017 Fedora Release Engineering - 5:6.2.0-24 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From 140f0698e96c1ff27b575fe21cb05eefd65c44fe Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 2 Aug 2017 17:32:26 +0000 Subject: [PATCH 11/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index c557f22..ff3ce7a 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 25%{?dist} +Release: 26%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -251,6 +251,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Aug 02 2017 Fedora Release Engineering - 5:6.2.0-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Wed Jul 26 2017 Fedora Release Engineering - 5:6.2.0-25 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 39097857d18e6f08836d5fa500fe6dd4e225542e Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 29 Aug 2017 10:19:20 +0800 Subject: [PATCH 12/57] - fix nfsv3 fh length in NFS_FH_DREF(). --- ...2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch | 26 +++++++++++++++++++ am-utils.spec | 8 +++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch diff --git a/am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch b/am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch new file mode 100644 index 0000000..0c2a873 --- /dev/null +++ b/am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch @@ -0,0 +1,26 @@ +am-utils-6.2 - fix nfsv3 fh length in NFS_FH_DREF() + +From: Ian Kent + +The NFS_FH_DREF() macro for linux uses sizeof(struct nfs_fh) for the +length of the file handle copy regardless of the version of NFS used. + +But NFSv3 file handles are 64 bytes and not copying the whole file +handle can cause automounts to fail. + +Changing this to use the size of the passed nfs file handle fixes +the problem. + +Signed-off-by: Ian Kent +--- + conf/fh_dref/fh_dref_linux.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/conf/fh_dref/fh_dref_linux.h b/conf/fh_dref/fh_dref_linux.h +index 7ffa5b50..f8fb1a89 100644 +--- a/conf/fh_dref/fh_dref_linux.h ++++ b/conf/fh_dref/fh_dref_linux.h +@@ -1,2 +1,2 @@ + /* $srcdir/conf/fh_dref/fh_dref_linux.h */ +-#define NFS_FH_DREF(dst, src) memcpy((char *) &(dst.data), (char *) src, sizeof(struct nfs_fh)) ++#define NFS_FH_DREF(dst, src) memcpy((char *) &(dst.data), (char *) src, sizeof(*src)) diff --git a/am-utils.spec b/am-utils.spec index ff3ce7a..d07516d 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 26%{?dist} +Release: 27%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -83,6 +83,8 @@ Patch32: am-utils-6.2-fix-compiler-assignment-warning-due-to-libtirpc.patch Patch33: am-utils-6.2-fix-logical-not-comparison-in-get_ldap_timestamp.patch Patch34: am-utils-6.2-fix-umount-to-mount-race.patch +Patch35: am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -140,6 +142,7 @@ mounting and unmounting filesystems. %patch32 -p1 %patch33 -p1 %patch34 -p1 +%patch35 -p1 ./bootstrap @@ -251,6 +254,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Aug 24 2017 Ian Kent - 5:6.2.0-27 +- fix nfsv3 fh length in NFS_FH_DREF(). + * Wed Aug 02 2017 Fedora Release Engineering - 5:6.2.0-26 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild From f6425c6b857b76bcf42fe278a42c9061d14a93d0 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Sun, 4 Feb 2018 15:59:50 +0800 Subject: [PATCH 13/57] - Update "Requires(pre)" to use /usr/bin/grep instead of /bin/grep. --- am-utils.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index d07516d..8a34b81 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 27%{?dist} +Release: 28%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -35,7 +35,7 @@ Requires: gawk Requires: findutils Requires: libtirpc -Requires(pre): /bin/grep +Requires(pre): /usr/bin/grep Requires(post): /sbin/install-info Requires(post): systemd-sysv Requires(post): systemd-units @@ -254,6 +254,9 @@ fi %{_libdir}/libamu.so* %changelog +* Sun Feb 04 2018 Ian Kent - 5:6.2.0-28 +- Update "Requires(pre)" to use /usr/bin/grep instead of /bin/grep. + * Thu Aug 24 2017 Ian Kent - 5:6.2.0-27 - fix nfsv3 fh length in NFS_FH_DREF(). From 44633db9d9dff16d7f6b36888851da4d10f36826 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Sun, 4 Feb 2018 16:53:29 +0800 Subject: [PATCH 14/57] - Remove "BuildRequires: tcp_wrappers-devel" as tcp_wrappers is depricated. --- am-utils.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 8a34b81..44a5822 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 28%{?dist} +Release: 29%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -22,7 +22,6 @@ BuildRequires: automake BuildRequires: libtool BuildRequires: bison BuildRequires: flex -BuildRequires: tcp_wrappers-devel BuildRequires: systemd-units BuildRequires: texinfo BuildRequires: gcc @@ -254,6 +253,9 @@ fi %{_libdir}/libamu.so* %changelog +* Sun Feb 04 2018 Ian Kent - 5:6.2.0-29 +- Remove "BuildRequires: tcp_wrappers-devel" as tcp_wrappers is depricated. + * Sun Feb 04 2018 Ian Kent - 5:6.2.0-28 - Update "Requires(pre)" to use /usr/bin/grep instead of /bin/grep. From 51372607b241ff163e5351ddb6a2ea9cfd1d9c8b Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Sun, 4 Feb 2018 17:06:50 +0800 Subject: [PATCH 15/57] - Add "BuildRequires: kernel-headers" for linux/version.h requirement. --- am-utils.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 44a5822..e71c412 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 29%{?dist} +Release: 30%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -27,6 +27,7 @@ BuildRequires: texinfo BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel +BuildRequires: kernel-headers Requires: rpcbind Requires: grep @@ -253,6 +254,9 @@ fi %{_libdir}/libamu.so* %changelog +* Sun Feb 04 2018 Ian Kent - 5:6.2.0-30 +- Add "BuildRequires: kernel-headers" for linux/version.h requirement. + * Sun Feb 04 2018 Ian Kent - 5:6.2.0-29 - Remove "BuildRequires: tcp_wrappers-devel" as tcp_wrappers is depricated. From d7d39135db0beb7e9a9f16064fb97d44f035e910 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 6 Feb 2018 14:28:44 +0800 Subject: [PATCH 16/57] - try to workaround the removal of RPC code from glibc. --- ...unt-for-glibc-removed-rpcsvc_mount_h.patch | 160 ++++++ ...-for-glibc-removed-rpcsvc_nfs_prot_h.patch | 463 ++++++++++++++++++ ...ls-6.2-use-linux-libtirpc-if-present.patch | 31 +- am-utils.spec | 12 +- 4 files changed, 650 insertions(+), 16 deletions(-) create mode 100644 am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch create mode 100644 am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch diff --git a/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch b/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch new file mode 100644 index 0000000..04ba5a0 --- /dev/null +++ b/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch @@ -0,0 +1,160 @@ +am-utils-6.2 - account for glibc removed rpcsvc/mount.h + +From: Ian Kent + +The glibc RPC code may have been removed and if so rpcsvc/mount.h +is no longer available in any package. + +Account for this by including the old glibc rpcsvc/mount.h directly +in nfs_prot_linux.h. + +Signed-off-by: Ian Kent +--- + conf/nfs_prot/nfs_prot_linux.h | 134 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 134 insertions(+) + +diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h +index 9934b440..63493712 100644 +--- a/conf/nfs_prot/nfs_prot_linux.h ++++ b/conf/nfs_prot/nfs_prot_linux.h +@@ -481,6 +481,140 @@ extern bool_t xdr_statfsres (); + #endif + #endif /* HAVE_RPCSVC_NFS_PROT_H */ + ++#ifndef HAVE_RPCSVC_MOUNT_H ++/* ++ * On Linux the RPC code may have been removed from glibc. ++ * If HAVE_RPCSVC_MOUNT_H is undefined that is the case ++ * and there is no rpcsvc/imount.h anywhere so provide it ++ * here. ++ */ ++#include ++ ++#define MNTPATHLEN 1024 ++#define MNTNAMLEN 255 ++#define FHSIZE 32 ++ ++typedef char fhandle[FHSIZE]; ++ ++struct fhstatus { ++ u_int fhs_status; ++ union { ++ fhandle fhs_fhandle; ++ } fhstatus_u; ++}; ++typedef struct fhstatus fhstatus; ++ ++typedef char *dirpath; ++ ++typedef char *name; ++ ++typedef struct mountbody *mountlist; ++ ++struct mountbody { ++ name ml_hostname; ++ dirpath ml_directory; ++ mountlist ml_next; ++}; ++typedef struct mountbody mountbody; ++ ++typedef struct groupnode *groups; ++ ++struct groupnode { ++ name gr_name; ++ groups gr_next; ++}; ++typedef struct groupnode groupnode; ++ ++typedef struct exportnode *exports; ++ ++struct exportnode { ++ dirpath ex_dir; ++ groups ex_groups; ++ exports ex_next; ++}; ++typedef struct exportnode exportnode; ++ ++#define MOUNTPROG 100005 ++#define MOUNTVERS 1 ++ ++#if defined(__STDC__) || defined(__cplusplus) ++#define MOUNTPROC_NULL 0 ++extern void * mountproc_null_1(void *, CLIENT *); ++extern void * mountproc_null_1_svc(void *, struct svc_req *); ++#define MOUNTPROC_MNT 1 ++extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *); ++extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *); ++#define MOUNTPROC_DUMP 2 ++extern mountlist * mountproc_dump_1(void *, CLIENT *); ++extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *); ++#define MOUNTPROC_UMNT 3 ++extern void * mountproc_umnt_1(dirpath *, CLIENT *); ++extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *); ++#define MOUNTPROC_UMNTALL 4 ++extern void * mountproc_umntall_1(void *, CLIENT *); ++extern void * mountproc_umntall_1_svc(void *, struct svc_req *); ++#define MOUNTPROC_EXPORT 5 ++extern exports * mountproc_export_1(void *, CLIENT *); ++extern exports * mountproc_export_1_svc(void *, struct svc_req *); ++#define MOUNTPROC_EXPORTALL 6 ++extern exports * mountproc_exportall_1(void *, CLIENT *); ++extern exports * mountproc_exportall_1_svc(void *, struct svc_req *); ++extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); ++ ++#else /* K&R C */ ++#define MOUNTPROC_NULL 0 ++extern void * mountproc_null_1(); ++extern void * mountproc_null_1_svc(); ++#define MOUNTPROC_MNT 1 ++extern fhstatus * mountproc_mnt_1(); ++extern fhstatus * mountproc_mnt_1_svc(); ++#define MOUNTPROC_DUMP 2 ++extern mountlist * mountproc_dump_1(); ++extern mountlist * mountproc_dump_1_svc(); ++#define MOUNTPROC_UMNT 3 ++extern void * mountproc_umnt_1(); ++extern void * mountproc_umnt_1_svc(); ++#define MOUNTPROC_UMNTALL 4 ++extern void * mountproc_umntall_1(); ++extern void * mountproc_umntall_1_svc(); ++#define MOUNTPROC_EXPORT 5 ++extern exports * mountproc_export_1(); ++extern exports * mountproc_export_1_svc(); ++#define MOUNTPROC_EXPORTALL 6 ++extern exports * mountproc_exportall_1(); ++extern exports * mountproc_exportall_1_svc(); ++extern int mountprog_1_freeresult (); ++#endif /* K&R C */ ++ ++/* the xdr functions */ ++ ++#if defined(__STDC__) || defined(__cplusplus) ++extern bool_t xdr_fhandle (XDR *, fhandle); ++extern bool_t xdr_fhstatus (XDR *, fhstatus*); ++extern bool_t xdr_dirpath (XDR *, dirpath*); ++extern bool_t xdr_name (XDR *, name*); ++extern bool_t xdr_mountlist (XDR *, mountlist*); ++extern bool_t xdr_mountbody (XDR *, mountbody*); ++extern bool_t xdr_groups (XDR *, groups*); ++extern bool_t xdr_groupnode (XDR *, groupnode*); ++extern bool_t xdr_exports (XDR *, exports*); ++extern bool_t xdr_exportnode (XDR *, exportnode*); ++ ++#else /* K&R C */ ++extern bool_t xdr_fhandle (); ++extern bool_t xdr_fhstatus (); ++extern bool_t xdr_dirpath (); ++extern bool_t xdr_name (); ++extern bool_t xdr_mountlist (); ++extern bool_t xdr_mountbody (); ++extern bool_t xdr_groups (); ++extern bool_t xdr_groupnode (); ++extern bool_t xdr_exports (); ++extern bool_t xdr_exportnode (); ++ ++#endif /* K&R C */ ++#endif ++ + /* + * Hard-code support for some file systems so the built amd + * binary can always run them. Also, this helps detection of iso9660 diff --git a/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch b/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch new file mode 100644 index 0000000..c925902 --- /dev/null +++ b/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch @@ -0,0 +1,463 @@ +am-utils-6.2 - account for glibc removed rpcsvc/nfs_prot.h + +From: Ian Kent + +The glibc RPC code may have been removed and if so rpcsvc/nfs_prot.h +is no longer available in any package. + +Account for this by including the old glibc rpcsvc/nfs_prot.h directly +in nfs_prot_linux.h. + +Signed-off-by: Ian Kent +--- + conf/nfs_prot/nfs_prot_linux.h | 437 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 437 insertions(+) + +diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h +index 7ccf18f0..9934b440 100644 +--- a/conf/nfs_prot/nfs_prot_linux.h ++++ b/conf/nfs_prot/nfs_prot_linux.h +@@ -42,6 +42,443 @@ + + #ifdef HAVE_RPCSVC_NFS_PROT_H + # include ++#else ++/* ++ * On Linux the RPC code may have been removed from glibc. ++ * If HAVE_RPCSVC_NFS_PROT_H is undefined that is the case ++ * and there is no rpcsvc/nfs_prot.h anywhere so provide it ++ * here. ++ */ ++#include ++ ++#define NFS_PORT 2049 ++#define NFS_MAXDATA 8192 ++#define NFS_MAXPATHLEN 1024 ++#define NFS_MAXNAMLEN 255 ++#define NFS_FHSIZE 32 ++#define NFS_COOKIESIZE 4 ++#define NFS_FIFO_DEV -1 ++#define NFSMODE_FMT 0170000 ++#define NFSMODE_DIR 0040000 ++#define NFSMODE_CHR 0020000 ++#define NFSMODE_BLK 0060000 ++#define NFSMODE_REG 0100000 ++#define NFSMODE_LNK 0120000 ++#define NFSMODE_SOCK 0140000 ++#define NFSMODE_FIFO 0010000 ++ ++enum nfsstat { ++ NFS_OK = 0, ++ NFSERR_PERM = 1, ++ NFSERR_NOENT = 2, ++ NFSERR_IO = 5, ++ NFSERR_NXIO = 6, ++ NFSERR_ACCES = 13, ++ NFSERR_EXIST = 17, ++ NFSERR_NODEV = 19, ++ NFSERR_NOTDIR = 20, ++ NFSERR_ISDIR = 21, ++ NFSERR_FBIG = 27, ++ NFSERR_NOSPC = 28, ++ NFSERR_ROFS = 30, ++ NFSERR_NAMETOOLONG = 63, ++ NFSERR_NOTEMPTY = 66, ++ NFSERR_DQUOT = 69, ++ NFSERR_STALE = 70, ++ NFSERR_WFLUSH = 99, ++}; ++typedef enum nfsstat nfsstat; ++ ++enum ftype { ++ NFNON = 0, ++ NFREG = 1, ++ NFDIR = 2, ++ NFBLK = 3, ++ NFCHR = 4, ++ NFLNK = 5, ++ NFSOCK = 6, ++ NFBAD = 7, ++ NFFIFO = 8, ++}; ++typedef enum ftype ftype; ++ ++struct nfs_fh { ++ char data[NFS_FHSIZE]; ++}; ++typedef struct nfs_fh nfs_fh; ++ ++struct nfstime { ++ u_int seconds; ++ u_int useconds; ++}; ++typedef struct nfstime nfstime; ++ ++struct fattr { ++ ftype type; ++ u_int mode; ++ u_int nlink; ++ u_int uid; ++ u_int gid; ++ u_int size; ++ u_int blocksize; ++ u_int rdev; ++ u_int blocks; ++ u_int fsid; ++ u_int fileid; ++ nfstime atime; ++ nfstime mtime; ++ nfstime ctime; ++}; ++typedef struct fattr fattr; ++ ++struct sattr { ++ u_int mode; ++ u_int uid; ++ u_int gid; ++ u_int size; ++ nfstime atime; ++ nfstime mtime; ++}; ++typedef struct sattr sattr; ++ ++typedef char *filename; ++ ++typedef char *nfspath; ++ ++struct attrstat { ++ nfsstat status; ++ union { ++ fattr attributes; ++ } attrstat_u; ++}; ++typedef struct attrstat attrstat; ++ ++struct sattrargs { ++ nfs_fh file; ++ sattr attributes; ++}; ++typedef struct sattrargs sattrargs; ++ ++struct diropargs { ++ nfs_fh dir; ++ filename name; ++}; ++typedef struct diropargs diropargs; ++ ++struct diropokres { ++ nfs_fh file; ++ fattr attributes; ++}; ++typedef struct diropokres diropokres; ++ ++struct diropres { ++ nfsstat status; ++ union { ++ diropokres diropres; ++ } diropres_u; ++}; ++typedef struct diropres diropres; ++ ++struct readlinkres { ++ nfsstat status; ++ union { ++ nfspath data; ++ } readlinkres_u; ++}; ++typedef struct readlinkres readlinkres; ++ ++struct readargs { ++ nfs_fh file; ++ u_int offset; ++ u_int count; ++ u_int totalcount; ++}; ++typedef struct readargs readargs; ++ ++struct readokres { ++ fattr attributes; ++ struct { ++ u_int data_len; ++ char *data_val; ++ } data; ++}; ++typedef struct readokres readokres; ++ ++struct readres { ++ nfsstat status; ++ union { ++ readokres reply; ++ } readres_u; ++}; ++typedef struct readres readres; ++ ++struct writeargs { ++ nfs_fh file; ++ u_int beginoffset; ++ u_int offset; ++ u_int totalcount; ++ struct { ++ u_int data_len; ++ char *data_val; ++ } data; ++}; ++typedef struct writeargs writeargs; ++ ++struct createargs { ++ diropargs where; ++ sattr attributes; ++}; ++typedef struct createargs createargs; ++ ++struct renameargs { ++ diropargs from; ++ diropargs to; ++}; ++typedef struct renameargs renameargs; ++ ++struct linkargs { ++ nfs_fh from; ++ diropargs to; ++}; ++typedef struct linkargs linkargs; ++ ++struct symlinkargs { ++ diropargs from; ++ nfspath to; ++ sattr attributes; ++}; ++typedef struct symlinkargs symlinkargs; ++ ++typedef char nfscookie[NFS_COOKIESIZE]; ++ ++struct readdirargs { ++ nfs_fh dir; ++ nfscookie cookie; ++ u_int count; ++}; ++typedef struct readdirargs readdirargs; ++ ++struct entry { ++ u_int fileid; ++ filename name; ++ nfscookie cookie; ++ struct entry *nextentry; ++}; ++typedef struct entry entry; ++ ++struct dirlist { ++ entry *entries; ++ bool_t eof; ++}; ++typedef struct dirlist dirlist; ++ ++struct readdirres { ++ nfsstat status; ++ union { ++ dirlist reply; ++ } readdirres_u; ++}; ++typedef struct readdirres readdirres; ++ ++struct statfsokres { ++ u_int tsize; ++ u_int bsize; ++ u_int blocks; ++ u_int bfree; ++ u_int bavail; ++}; ++typedef struct statfsokres statfsokres; ++ ++struct statfsres { ++ nfsstat status; ++ union { ++ statfsokres reply; ++ } statfsres_u; ++}; ++typedef struct statfsres statfsres; ++ ++#define NFS_PROGRAM 100003 ++#define NFS_VERSION 2 ++ ++#if defined(__STDC__) || defined(__cplusplus) ++#define NFSPROC_NULL 0 ++extern void * nfsproc_null_2(void *, CLIENT *); ++extern void * nfsproc_null_2_svc(void *, struct svc_req *); ++#define NFSPROC_GETATTR 1 ++extern attrstat * nfsproc_getattr_2(nfs_fh *, CLIENT *); ++extern attrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); ++#define NFSPROC_SETATTR 2 ++extern attrstat * nfsproc_setattr_2(sattrargs *, CLIENT *); ++extern attrstat * nfsproc_setattr_2_svc(sattrargs *, struct svc_req *); ++#define NFSPROC_ROOT 3 ++extern void * nfsproc_root_2(void *, CLIENT *); ++extern void * nfsproc_root_2_svc(void *, struct svc_req *); ++#define NFSPROC_LOOKUP 4 ++extern diropres * nfsproc_lookup_2(diropargs *, CLIENT *); ++extern diropres * nfsproc_lookup_2_svc(diropargs *, struct svc_req *); ++#define NFSPROC_READLINK 5 ++extern readlinkres * nfsproc_readlink_2(nfs_fh *, CLIENT *); ++extern readlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); ++#define NFSPROC_READ 6 ++extern readres * nfsproc_read_2(readargs *, CLIENT *); ++extern readres * nfsproc_read_2_svc(readargs *, struct svc_req *); ++#define NFSPROC_WRITECACHE 7 ++extern void * nfsproc_writecache_2(void *, CLIENT *); ++extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); ++#define NFSPROC_WRITE 8 ++extern attrstat * nfsproc_write_2(writeargs *, CLIENT *); ++extern attrstat * nfsproc_write_2_svc(writeargs *, struct svc_req *); ++#define NFSPROC_CREATE 9 ++extern diropres * nfsproc_create_2(createargs *, CLIENT *); ++extern diropres * nfsproc_create_2_svc(createargs *, struct svc_req *); ++#define NFSPROC_REMOVE 10 ++extern nfsstat * nfsproc_remove_2(diropargs *, CLIENT *); ++extern nfsstat * nfsproc_remove_2_svc(diropargs *, struct svc_req *); ++#define NFSPROC_RENAME 11 ++extern nfsstat * nfsproc_rename_2(renameargs *, CLIENT *); ++extern nfsstat * nfsproc_rename_2_svc(renameargs *, struct svc_req *); ++#define NFSPROC_LINK 12 ++extern nfsstat * nfsproc_link_2(linkargs *, CLIENT *); ++extern nfsstat * nfsproc_link_2_svc(linkargs *, struct svc_req *); ++#define NFSPROC_SYMLINK 13 ++extern nfsstat * nfsproc_symlink_2(symlinkargs *, CLIENT *); ++extern nfsstat * nfsproc_symlink_2_svc(symlinkargs *, struct svc_req *); ++#define NFSPROC_MKDIR 14 ++extern diropres * nfsproc_mkdir_2(createargs *, CLIENT *); ++extern diropres * nfsproc_mkdir_2_svc(createargs *, struct svc_req *); ++#define NFSPROC_RMDIR 15 ++extern nfsstat * nfsproc_rmdir_2(diropargs *, CLIENT *); ++extern nfsstat * nfsproc_rmdir_2_svc(diropargs *, struct svc_req *); ++#define NFSPROC_READDIR 16 ++extern readdirres * nfsproc_readdir_2(readdirargs *, CLIENT *); ++extern readdirres * nfsproc_readdir_2_svc(readdirargs *, struct svc_req *); ++#define NFSPROC_STATFS 17 ++extern statfsres * nfsproc_statfs_2(nfs_fh *, CLIENT *); ++extern statfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); ++extern int nfs_program_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); ++ ++#else /* K&R C */ ++#define NFSPROC_NULL 0 ++extern void * nfsproc_null_2(); ++extern void * nfsproc_null_2_svc(); ++#define NFSPROC_GETATTR 1 ++extern attrstat * nfsproc_getattr_2(); ++extern attrstat * nfsproc_getattr_2_svc(); ++#define NFSPROC_SETATTR 2 ++extern attrstat * nfsproc_setattr_2(); ++extern attrstat * nfsproc_setattr_2_svc(); ++#define NFSPROC_ROOT 3 ++extern void * nfsproc_root_2(); ++extern void * nfsproc_root_2_svc(); ++#define NFSPROC_LOOKUP 4 ++extern diropres * nfsproc_lookup_2(); ++extern diropres * nfsproc_lookup_2_svc(); ++#define NFSPROC_READLINK 5 ++extern readlinkres * nfsproc_readlink_2(); ++extern readlinkres * nfsproc_readlink_2_svc(); ++#define NFSPROC_READ 6 ++extern readres * nfsproc_read_2(); ++extern readres * nfsproc_read_2_svc(); ++#define NFSPROC_WRITECACHE 7 ++extern void * nfsproc_writecache_2(); ++extern void * nfsproc_writecache_2_svc(); ++#define NFSPROC_WRITE 8 ++extern attrstat * nfsproc_write_2(); ++extern attrstat * nfsproc_write_2_svc(); ++#define NFSPROC_CREATE 9 ++extern diropres * nfsproc_create_2(); ++extern diropres * nfsproc_create_2_svc(); ++#define NFSPROC_REMOVE 10 ++extern nfsstat * nfsproc_remove_2(); ++extern nfsstat * nfsproc_remove_2_svc(); ++#define NFSPROC_RENAME 11 ++extern nfsstat * nfsproc_rename_2(); ++extern nfsstat * nfsproc_rename_2_svc(); ++#define NFSPROC_LINK 12 ++extern nfsstat * nfsproc_link_2(); ++extern nfsstat * nfsproc_link_2_svc(); ++#define NFSPROC_SYMLINK 13 ++extern nfsstat * nfsproc_symlink_2(); ++extern nfsstat * nfsproc_symlink_2_svc(); ++#define NFSPROC_MKDIR 14 ++extern diropres * nfsproc_mkdir_2(); ++extern diropres * nfsproc_mkdir_2_svc(); ++#define NFSPROC_RMDIR 15 ++extern nfsstat * nfsproc_rmdir_2(); ++extern nfsstat * nfsproc_rmdir_2_svc(); ++#define NFSPROC_READDIR 16 ++extern readdirres * nfsproc_readdir_2(); ++extern readdirres * nfsproc_readdir_2_svc(); ++#define NFSPROC_STATFS 17 ++extern statfsres * nfsproc_statfs_2(); ++extern statfsres * nfsproc_statfs_2_svc(); ++extern int nfs_program_2_freeresult (); ++#endif /* K&R C */ ++ ++/* the xdr functions */ ++ ++#if defined(__STDC__) || defined(__cplusplus) ++extern bool_t xdr_nfsstat (XDR *, nfsstat*); ++extern bool_t xdr_ftype (XDR *, ftype*); ++extern bool_t xdr_nfs_fh (XDR *, nfs_fh*); ++extern bool_t xdr_nfstime (XDR *, nfstime*); ++extern bool_t xdr_fattr (XDR *, fattr*); ++extern bool_t xdr_sattr (XDR *, sattr*); ++extern bool_t xdr_filename (XDR *, filename*); ++extern bool_t xdr_nfspath (XDR *, nfspath*); ++extern bool_t xdr_attrstat (XDR *, attrstat*); ++extern bool_t xdr_sattrargs (XDR *, sattrargs*); ++extern bool_t xdr_diropargs (XDR *, diropargs*); ++extern bool_t xdr_diropokres (XDR *, diropokres*); ++extern bool_t xdr_diropres (XDR *, diropres*); ++extern bool_t xdr_readlinkres (XDR *, readlinkres*); ++extern bool_t xdr_readargs (XDR *, readargs*); ++extern bool_t xdr_readokres (XDR *, readokres*); ++extern bool_t xdr_readres (XDR *, readres*); ++extern bool_t xdr_writeargs (XDR *, writeargs*); ++extern bool_t xdr_createargs (XDR *, createargs*); ++extern bool_t xdr_renameargs (XDR *, renameargs*); ++extern bool_t xdr_linkargs (XDR *, linkargs*); ++extern bool_t xdr_symlinkargs (XDR *, symlinkargs*); ++extern bool_t xdr_nfscookie (XDR *, nfscookie); ++extern bool_t xdr_readdirargs (XDR *, readdirargs*); ++extern bool_t xdr_entry (XDR *, entry*); ++extern bool_t xdr_dirlist (XDR *, dirlist*); ++extern bool_t xdr_readdirres (XDR *, readdirres*); ++extern bool_t xdr_statfsokres (XDR *, statfsokres*); ++extern bool_t xdr_statfsres (XDR *, statfsres*); ++ ++#else /* K&R C */ ++extern bool_t xdr_nfsstat (); ++extern bool_t xdr_ftype (); ++extern bool_t xdr_nfs_fh (); ++extern bool_t xdr_nfstime (); ++extern bool_t xdr_fattr (); ++extern bool_t xdr_sattr (); ++extern bool_t xdr_filename (); ++extern bool_t xdr_nfspath (); ++extern bool_t xdr_attrstat (); ++extern bool_t xdr_sattrargs (); ++extern bool_t xdr_diropargs (); ++extern bool_t xdr_diropokres (); ++extern bool_t xdr_diropres (); ++extern bool_t xdr_readlinkres (); ++extern bool_t xdr_readargs (); ++extern bool_t xdr_readokres (); ++extern bool_t xdr_readres (); ++extern bool_t xdr_writeargs (); ++extern bool_t xdr_createargs (); ++extern bool_t xdr_renameargs (); ++extern bool_t xdr_linkargs (); ++extern bool_t xdr_symlinkargs (); ++extern bool_t xdr_nfscookie (); ++extern bool_t xdr_readdirargs (); ++extern bool_t xdr_entry (); ++extern bool_t xdr_dirlist (); ++extern bool_t xdr_readdirres (); ++extern bool_t xdr_statfsokres (); ++extern bool_t xdr_statfsres (); ++#endif + #endif /* HAVE_RPCSVC_NFS_PROT_H */ + + /* diff --git a/am-utils-6.2-use-linux-libtirpc-if-present.patch b/am-utils-6.2-use-linux-libtirpc-if-present.patch index df20d5c..f1fa47b 100644 --- a/am-utils-6.2-use-linux-libtirpc-if-present.patch +++ b/am-utils-6.2-use-linux-libtirpc-if-present.patch @@ -10,12 +10,12 @@ Signed-off-by: Ian Kent Makefile.am | 3 ++- configure.ac | 4 ++++ include/am_compat.h | 8 ++++++-- - m4/macros/check_linux_libtirpc.m4 | 13 +++++++++++++ - 4 files changed, 25 insertions(+), 3 deletions(-) + m4/macros/check_linux_libtirpc.m4 | 14 ++++++++++++++ + 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 m4/macros/check_linux_libtirpc.m4 diff --git a/Makefile.am b/Makefile.am -index bae4615..e094e95 100644 +index bae4615e..e094e950 100644 --- a/Makefile.am +++ b/Makefile.am @@ -146,7 +146,8 @@ EXTRA_DIST_M4 = \ @@ -29,7 +29,7 @@ index bae4615..e094e95 100644 EXTRA_DIST_CONF = \ conf/autofs/autofs_default.h \ diff --git a/configure.ac b/configure.ac -index ce61925..98b444d 100644 +index ce619257..98b444d3 100644 --- a/configure.ac +++ b/configure.ac @@ -222,6 +222,9 @@ dnl lots of code. So I am forced to use a special purpose macro that sets @@ -51,7 +51,7 @@ index ce61925..98b444d 100644 cdfs/cdfs_mount.h \ fs/udf/udf_mount.h \ diff --git a/include/am_compat.h b/include/am_compat.h -index 3463f3f..d6826fc 100644 +index 3463f3fa..d6826fc7 100644 --- a/include/am_compat.h +++ b/include/am_compat.h @@ -454,11 +454,15 @@ struct hsfs_args { @@ -74,20 +74,21 @@ index 3463f3f..d6826fc 100644 #ifndef INADDR_NONE diff --git a/m4/macros/check_linux_libtirpc.m4 b/m4/macros/check_linux_libtirpc.m4 new file mode 100644 -index 0000000..918423c +index 00000000..0abd1ad3 --- /dev/null +++ b/m4/macros/check_linux_libtirpc.m4 -@@ -0,0 +1,13 @@ +@@ -0,0 +1,14 @@ +dnl ###################################################################### +dnl Check for Linux libtirpc library +AC_DEFUN([AMU_CHECK_LIBTIRPC],[ -+TIRPC_CPPFLAGS="" -+TIRPC_LIBS="" -+ +AC_CHECK_HEADER(tirpc/netconfig.h,[ -+ TIRPC_CPPFLAGS="-I/usr/include/tirpc" -+ AC_DEFINE(HAVE_LIBTIRPC, 1, [Define to 1 if you have libtirpc headers installed]) -+ AC_CHECK_LIB(tirpc, clnt_tli_create, [TIRPC_LIBS="-ltirpc"], [TIRPC_CPPFLAGS=""])]) -+ AMU_CFLAGS="$AMU_CFLAGS $TIRPC_CPPFLAGS" -+ LIBS="$LIBS $TIRPC_LIBS" ++ amu_check_libtirpc_save_CPPFLAGS=$CPPFLAGS ++ CPPFLAGS="$CPPFLAGS -I/usr/include/tirpc" ++ AC_CHECK_LIB(tirpc,clnt_tli_create,,amu_check_libtirpc=notfound)]) ++ if test "$amu_check_libtirpc" = "notfound" ++ then ++ CPPFLAGS="$amu_check_libtirpc_save_CPPFLAGS" ++ else ++ AC_DEFINE(HAVE_LIBTIRPC, 1, [Define to 1 if you have libtirpc headers installed]) ++ fi +]) diff --git a/am-utils.spec b/am-utils.spec index e71c412..7e6c5a2 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 30%{?dist} +Release: 31%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -85,6 +85,9 @@ Patch34: am-utils-6.2-fix-umount-to-mount-race.patch Patch35: am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch +Patch36: am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch +Patch37: am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -143,6 +146,8 @@ mounting and unmounting filesystems. %patch33 -p1 %patch34 -p1 %patch35 -p1 +%patch36 -p1 +%patch37 -p1 ./bootstrap @@ -154,6 +159,8 @@ chmod +x find-requires %configure \ --enable-shared \ --enable-am-cflags="-DHAVE_LINUX_NFS_MOUNT_H" \ + --enable-cppflags="-I%{_includedir}/nsl" \ + --enable-ldflags="%{_libdir}/nsl" \ --enable-libs="-lnsl -lresolv" \ --enable-debug @@ -254,6 +261,9 @@ fi %{_libdir}/libamu.so* %changelog +* Sun Feb 06 2018 Ian Kent - 5:6.2.0-31 +- try to workaround the removal of RPC code from glibc. + * Sun Feb 04 2018 Ian Kent - 5:6.2.0-30 - Add "BuildRequires: kernel-headers" for linux/version.h requirement. From e826a424cd8c83cd0c906d1d4720beb67e01a14a Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 6 Feb 2018 14:37:19 +0800 Subject: [PATCH 17/57] - add libnsl2 Requires and libnsl2-devel BuildRequires. --- am-utils.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 7e6c5a2..7a8e11d 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 31%{?dist} +Release: 32%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -28,12 +28,14 @@ BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel BuildRequires: kernel-headers +BuildRequires: libnsl2-devel Requires: rpcbind Requires: grep Requires: gawk Requires: findutils Requires: libtirpc +Requires: libnsl2 Requires(pre): /usr/bin/grep Requires(post): /sbin/install-info @@ -261,7 +263,10 @@ fi %{_libdir}/libamu.so* %changelog -* Sun Feb 06 2018 Ian Kent - 5:6.2.0-31 +* Mon Feb 06 2018 Ian Kent - 5:6.2.0-32 +- add libnsl2 Requires and libnsl2-devel BuildRequires. + +* Mon Feb 06 2018 Ian Kent - 5:6.2.0-31 - try to workaround the removal of RPC code from glibc. * Sun Feb 04 2018 Ian Kent - 5:6.2.0-30 From 9705d357ef0fa2276122eb19ffa68acd96238f2e Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 6 Feb 2018 14:49:16 +0800 Subject: [PATCH 18/57] - fix --enable-ldflags argument mistake. --- am-utils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 7a8e11d..28ed2f9 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -162,7 +162,7 @@ chmod +x find-requires --enable-shared \ --enable-am-cflags="-DHAVE_LINUX_NFS_MOUNT_H" \ --enable-cppflags="-I%{_includedir}/nsl" \ - --enable-ldflags="%{_libdir}/nsl" \ + --enable-ldflags="-L%{_libdir}/nsl" \ --enable-libs="-lnsl -lresolv" \ --enable-debug From 12433ee32c578d6f11ce15336bef424e16a3e050 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 6 Feb 2018 16:07:20 +0800 Subject: [PATCH 19/57] - replace workaround for missing RPC code with package rpcsvc-proto-devel. --- ...unt-for-glibc-removed-rpcsvc_mount_h.patch | 160 ------ ...-for-glibc-removed-rpcsvc_nfs_prot_h.patch | 463 ------------------ am-utils.spec | 15 +- 3 files changed, 7 insertions(+), 631 deletions(-) delete mode 100644 am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch delete mode 100644 am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch diff --git a/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch b/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch deleted file mode 100644 index 04ba5a0..0000000 --- a/am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch +++ /dev/null @@ -1,160 +0,0 @@ -am-utils-6.2 - account for glibc removed rpcsvc/mount.h - -From: Ian Kent - -The glibc RPC code may have been removed and if so rpcsvc/mount.h -is no longer available in any package. - -Account for this by including the old glibc rpcsvc/mount.h directly -in nfs_prot_linux.h. - -Signed-off-by: Ian Kent ---- - conf/nfs_prot/nfs_prot_linux.h | 134 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 134 insertions(+) - -diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h -index 9934b440..63493712 100644 ---- a/conf/nfs_prot/nfs_prot_linux.h -+++ b/conf/nfs_prot/nfs_prot_linux.h -@@ -481,6 +481,140 @@ extern bool_t xdr_statfsres (); - #endif - #endif /* HAVE_RPCSVC_NFS_PROT_H */ - -+#ifndef HAVE_RPCSVC_MOUNT_H -+/* -+ * On Linux the RPC code may have been removed from glibc. -+ * If HAVE_RPCSVC_MOUNT_H is undefined that is the case -+ * and there is no rpcsvc/imount.h anywhere so provide it -+ * here. -+ */ -+#include -+ -+#define MNTPATHLEN 1024 -+#define MNTNAMLEN 255 -+#define FHSIZE 32 -+ -+typedef char fhandle[FHSIZE]; -+ -+struct fhstatus { -+ u_int fhs_status; -+ union { -+ fhandle fhs_fhandle; -+ } fhstatus_u; -+}; -+typedef struct fhstatus fhstatus; -+ -+typedef char *dirpath; -+ -+typedef char *name; -+ -+typedef struct mountbody *mountlist; -+ -+struct mountbody { -+ name ml_hostname; -+ dirpath ml_directory; -+ mountlist ml_next; -+}; -+typedef struct mountbody mountbody; -+ -+typedef struct groupnode *groups; -+ -+struct groupnode { -+ name gr_name; -+ groups gr_next; -+}; -+typedef struct groupnode groupnode; -+ -+typedef struct exportnode *exports; -+ -+struct exportnode { -+ dirpath ex_dir; -+ groups ex_groups; -+ exports ex_next; -+}; -+typedef struct exportnode exportnode; -+ -+#define MOUNTPROG 100005 -+#define MOUNTVERS 1 -+ -+#if defined(__STDC__) || defined(__cplusplus) -+#define MOUNTPROC_NULL 0 -+extern void * mountproc_null_1(void *, CLIENT *); -+extern void * mountproc_null_1_svc(void *, struct svc_req *); -+#define MOUNTPROC_MNT 1 -+extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *); -+extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *); -+#define MOUNTPROC_DUMP 2 -+extern mountlist * mountproc_dump_1(void *, CLIENT *); -+extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *); -+#define MOUNTPROC_UMNT 3 -+extern void * mountproc_umnt_1(dirpath *, CLIENT *); -+extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *); -+#define MOUNTPROC_UMNTALL 4 -+extern void * mountproc_umntall_1(void *, CLIENT *); -+extern void * mountproc_umntall_1_svc(void *, struct svc_req *); -+#define MOUNTPROC_EXPORT 5 -+extern exports * mountproc_export_1(void *, CLIENT *); -+extern exports * mountproc_export_1_svc(void *, struct svc_req *); -+#define MOUNTPROC_EXPORTALL 6 -+extern exports * mountproc_exportall_1(void *, CLIENT *); -+extern exports * mountproc_exportall_1_svc(void *, struct svc_req *); -+extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); -+ -+#else /* K&R C */ -+#define MOUNTPROC_NULL 0 -+extern void * mountproc_null_1(); -+extern void * mountproc_null_1_svc(); -+#define MOUNTPROC_MNT 1 -+extern fhstatus * mountproc_mnt_1(); -+extern fhstatus * mountproc_mnt_1_svc(); -+#define MOUNTPROC_DUMP 2 -+extern mountlist * mountproc_dump_1(); -+extern mountlist * mountproc_dump_1_svc(); -+#define MOUNTPROC_UMNT 3 -+extern void * mountproc_umnt_1(); -+extern void * mountproc_umnt_1_svc(); -+#define MOUNTPROC_UMNTALL 4 -+extern void * mountproc_umntall_1(); -+extern void * mountproc_umntall_1_svc(); -+#define MOUNTPROC_EXPORT 5 -+extern exports * mountproc_export_1(); -+extern exports * mountproc_export_1_svc(); -+#define MOUNTPROC_EXPORTALL 6 -+extern exports * mountproc_exportall_1(); -+extern exports * mountproc_exportall_1_svc(); -+extern int mountprog_1_freeresult (); -+#endif /* K&R C */ -+ -+/* the xdr functions */ -+ -+#if defined(__STDC__) || defined(__cplusplus) -+extern bool_t xdr_fhandle (XDR *, fhandle); -+extern bool_t xdr_fhstatus (XDR *, fhstatus*); -+extern bool_t xdr_dirpath (XDR *, dirpath*); -+extern bool_t xdr_name (XDR *, name*); -+extern bool_t xdr_mountlist (XDR *, mountlist*); -+extern bool_t xdr_mountbody (XDR *, mountbody*); -+extern bool_t xdr_groups (XDR *, groups*); -+extern bool_t xdr_groupnode (XDR *, groupnode*); -+extern bool_t xdr_exports (XDR *, exports*); -+extern bool_t xdr_exportnode (XDR *, exportnode*); -+ -+#else /* K&R C */ -+extern bool_t xdr_fhandle (); -+extern bool_t xdr_fhstatus (); -+extern bool_t xdr_dirpath (); -+extern bool_t xdr_name (); -+extern bool_t xdr_mountlist (); -+extern bool_t xdr_mountbody (); -+extern bool_t xdr_groups (); -+extern bool_t xdr_groupnode (); -+extern bool_t xdr_exports (); -+extern bool_t xdr_exportnode (); -+ -+#endif /* K&R C */ -+#endif -+ - /* - * Hard-code support for some file systems so the built amd - * binary can always run them. Also, this helps detection of iso9660 diff --git a/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch b/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch deleted file mode 100644 index c925902..0000000 --- a/am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch +++ /dev/null @@ -1,463 +0,0 @@ -am-utils-6.2 - account for glibc removed rpcsvc/nfs_prot.h - -From: Ian Kent - -The glibc RPC code may have been removed and if so rpcsvc/nfs_prot.h -is no longer available in any package. - -Account for this by including the old glibc rpcsvc/nfs_prot.h directly -in nfs_prot_linux.h. - -Signed-off-by: Ian Kent ---- - conf/nfs_prot/nfs_prot_linux.h | 437 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 437 insertions(+) - -diff --git a/conf/nfs_prot/nfs_prot_linux.h b/conf/nfs_prot/nfs_prot_linux.h -index 7ccf18f0..9934b440 100644 ---- a/conf/nfs_prot/nfs_prot_linux.h -+++ b/conf/nfs_prot/nfs_prot_linux.h -@@ -42,6 +42,443 @@ - - #ifdef HAVE_RPCSVC_NFS_PROT_H - # include -+#else -+/* -+ * On Linux the RPC code may have been removed from glibc. -+ * If HAVE_RPCSVC_NFS_PROT_H is undefined that is the case -+ * and there is no rpcsvc/nfs_prot.h anywhere so provide it -+ * here. -+ */ -+#include -+ -+#define NFS_PORT 2049 -+#define NFS_MAXDATA 8192 -+#define NFS_MAXPATHLEN 1024 -+#define NFS_MAXNAMLEN 255 -+#define NFS_FHSIZE 32 -+#define NFS_COOKIESIZE 4 -+#define NFS_FIFO_DEV -1 -+#define NFSMODE_FMT 0170000 -+#define NFSMODE_DIR 0040000 -+#define NFSMODE_CHR 0020000 -+#define NFSMODE_BLK 0060000 -+#define NFSMODE_REG 0100000 -+#define NFSMODE_LNK 0120000 -+#define NFSMODE_SOCK 0140000 -+#define NFSMODE_FIFO 0010000 -+ -+enum nfsstat { -+ NFS_OK = 0, -+ NFSERR_PERM = 1, -+ NFSERR_NOENT = 2, -+ NFSERR_IO = 5, -+ NFSERR_NXIO = 6, -+ NFSERR_ACCES = 13, -+ NFSERR_EXIST = 17, -+ NFSERR_NODEV = 19, -+ NFSERR_NOTDIR = 20, -+ NFSERR_ISDIR = 21, -+ NFSERR_FBIG = 27, -+ NFSERR_NOSPC = 28, -+ NFSERR_ROFS = 30, -+ NFSERR_NAMETOOLONG = 63, -+ NFSERR_NOTEMPTY = 66, -+ NFSERR_DQUOT = 69, -+ NFSERR_STALE = 70, -+ NFSERR_WFLUSH = 99, -+}; -+typedef enum nfsstat nfsstat; -+ -+enum ftype { -+ NFNON = 0, -+ NFREG = 1, -+ NFDIR = 2, -+ NFBLK = 3, -+ NFCHR = 4, -+ NFLNK = 5, -+ NFSOCK = 6, -+ NFBAD = 7, -+ NFFIFO = 8, -+}; -+typedef enum ftype ftype; -+ -+struct nfs_fh { -+ char data[NFS_FHSIZE]; -+}; -+typedef struct nfs_fh nfs_fh; -+ -+struct nfstime { -+ u_int seconds; -+ u_int useconds; -+}; -+typedef struct nfstime nfstime; -+ -+struct fattr { -+ ftype type; -+ u_int mode; -+ u_int nlink; -+ u_int uid; -+ u_int gid; -+ u_int size; -+ u_int blocksize; -+ u_int rdev; -+ u_int blocks; -+ u_int fsid; -+ u_int fileid; -+ nfstime atime; -+ nfstime mtime; -+ nfstime ctime; -+}; -+typedef struct fattr fattr; -+ -+struct sattr { -+ u_int mode; -+ u_int uid; -+ u_int gid; -+ u_int size; -+ nfstime atime; -+ nfstime mtime; -+}; -+typedef struct sattr sattr; -+ -+typedef char *filename; -+ -+typedef char *nfspath; -+ -+struct attrstat { -+ nfsstat status; -+ union { -+ fattr attributes; -+ } attrstat_u; -+}; -+typedef struct attrstat attrstat; -+ -+struct sattrargs { -+ nfs_fh file; -+ sattr attributes; -+}; -+typedef struct sattrargs sattrargs; -+ -+struct diropargs { -+ nfs_fh dir; -+ filename name; -+}; -+typedef struct diropargs diropargs; -+ -+struct diropokres { -+ nfs_fh file; -+ fattr attributes; -+}; -+typedef struct diropokres diropokres; -+ -+struct diropres { -+ nfsstat status; -+ union { -+ diropokres diropres; -+ } diropres_u; -+}; -+typedef struct diropres diropres; -+ -+struct readlinkres { -+ nfsstat status; -+ union { -+ nfspath data; -+ } readlinkres_u; -+}; -+typedef struct readlinkres readlinkres; -+ -+struct readargs { -+ nfs_fh file; -+ u_int offset; -+ u_int count; -+ u_int totalcount; -+}; -+typedef struct readargs readargs; -+ -+struct readokres { -+ fattr attributes; -+ struct { -+ u_int data_len; -+ char *data_val; -+ } data; -+}; -+typedef struct readokres readokres; -+ -+struct readres { -+ nfsstat status; -+ union { -+ readokres reply; -+ } readres_u; -+}; -+typedef struct readres readres; -+ -+struct writeargs { -+ nfs_fh file; -+ u_int beginoffset; -+ u_int offset; -+ u_int totalcount; -+ struct { -+ u_int data_len; -+ char *data_val; -+ } data; -+}; -+typedef struct writeargs writeargs; -+ -+struct createargs { -+ diropargs where; -+ sattr attributes; -+}; -+typedef struct createargs createargs; -+ -+struct renameargs { -+ diropargs from; -+ diropargs to; -+}; -+typedef struct renameargs renameargs; -+ -+struct linkargs { -+ nfs_fh from; -+ diropargs to; -+}; -+typedef struct linkargs linkargs; -+ -+struct symlinkargs { -+ diropargs from; -+ nfspath to; -+ sattr attributes; -+}; -+typedef struct symlinkargs symlinkargs; -+ -+typedef char nfscookie[NFS_COOKIESIZE]; -+ -+struct readdirargs { -+ nfs_fh dir; -+ nfscookie cookie; -+ u_int count; -+}; -+typedef struct readdirargs readdirargs; -+ -+struct entry { -+ u_int fileid; -+ filename name; -+ nfscookie cookie; -+ struct entry *nextentry; -+}; -+typedef struct entry entry; -+ -+struct dirlist { -+ entry *entries; -+ bool_t eof; -+}; -+typedef struct dirlist dirlist; -+ -+struct readdirres { -+ nfsstat status; -+ union { -+ dirlist reply; -+ } readdirres_u; -+}; -+typedef struct readdirres readdirres; -+ -+struct statfsokres { -+ u_int tsize; -+ u_int bsize; -+ u_int blocks; -+ u_int bfree; -+ u_int bavail; -+}; -+typedef struct statfsokres statfsokres; -+ -+struct statfsres { -+ nfsstat status; -+ union { -+ statfsokres reply; -+ } statfsres_u; -+}; -+typedef struct statfsres statfsres; -+ -+#define NFS_PROGRAM 100003 -+#define NFS_VERSION 2 -+ -+#if defined(__STDC__) || defined(__cplusplus) -+#define NFSPROC_NULL 0 -+extern void * nfsproc_null_2(void *, CLIENT *); -+extern void * nfsproc_null_2_svc(void *, struct svc_req *); -+#define NFSPROC_GETATTR 1 -+extern attrstat * nfsproc_getattr_2(nfs_fh *, CLIENT *); -+extern attrstat * nfsproc_getattr_2_svc(nfs_fh *, struct svc_req *); -+#define NFSPROC_SETATTR 2 -+extern attrstat * nfsproc_setattr_2(sattrargs *, CLIENT *); -+extern attrstat * nfsproc_setattr_2_svc(sattrargs *, struct svc_req *); -+#define NFSPROC_ROOT 3 -+extern void * nfsproc_root_2(void *, CLIENT *); -+extern void * nfsproc_root_2_svc(void *, struct svc_req *); -+#define NFSPROC_LOOKUP 4 -+extern diropres * nfsproc_lookup_2(diropargs *, CLIENT *); -+extern diropres * nfsproc_lookup_2_svc(diropargs *, struct svc_req *); -+#define NFSPROC_READLINK 5 -+extern readlinkres * nfsproc_readlink_2(nfs_fh *, CLIENT *); -+extern readlinkres * nfsproc_readlink_2_svc(nfs_fh *, struct svc_req *); -+#define NFSPROC_READ 6 -+extern readres * nfsproc_read_2(readargs *, CLIENT *); -+extern readres * nfsproc_read_2_svc(readargs *, struct svc_req *); -+#define NFSPROC_WRITECACHE 7 -+extern void * nfsproc_writecache_2(void *, CLIENT *); -+extern void * nfsproc_writecache_2_svc(void *, struct svc_req *); -+#define NFSPROC_WRITE 8 -+extern attrstat * nfsproc_write_2(writeargs *, CLIENT *); -+extern attrstat * nfsproc_write_2_svc(writeargs *, struct svc_req *); -+#define NFSPROC_CREATE 9 -+extern diropres * nfsproc_create_2(createargs *, CLIENT *); -+extern diropres * nfsproc_create_2_svc(createargs *, struct svc_req *); -+#define NFSPROC_REMOVE 10 -+extern nfsstat * nfsproc_remove_2(diropargs *, CLIENT *); -+extern nfsstat * nfsproc_remove_2_svc(diropargs *, struct svc_req *); -+#define NFSPROC_RENAME 11 -+extern nfsstat * nfsproc_rename_2(renameargs *, CLIENT *); -+extern nfsstat * nfsproc_rename_2_svc(renameargs *, struct svc_req *); -+#define NFSPROC_LINK 12 -+extern nfsstat * nfsproc_link_2(linkargs *, CLIENT *); -+extern nfsstat * nfsproc_link_2_svc(linkargs *, struct svc_req *); -+#define NFSPROC_SYMLINK 13 -+extern nfsstat * nfsproc_symlink_2(symlinkargs *, CLIENT *); -+extern nfsstat * nfsproc_symlink_2_svc(symlinkargs *, struct svc_req *); -+#define NFSPROC_MKDIR 14 -+extern diropres * nfsproc_mkdir_2(createargs *, CLIENT *); -+extern diropres * nfsproc_mkdir_2_svc(createargs *, struct svc_req *); -+#define NFSPROC_RMDIR 15 -+extern nfsstat * nfsproc_rmdir_2(diropargs *, CLIENT *); -+extern nfsstat * nfsproc_rmdir_2_svc(diropargs *, struct svc_req *); -+#define NFSPROC_READDIR 16 -+extern readdirres * nfsproc_readdir_2(readdirargs *, CLIENT *); -+extern readdirres * nfsproc_readdir_2_svc(readdirargs *, struct svc_req *); -+#define NFSPROC_STATFS 17 -+extern statfsres * nfsproc_statfs_2(nfs_fh *, CLIENT *); -+extern statfsres * nfsproc_statfs_2_svc(nfs_fh *, struct svc_req *); -+extern int nfs_program_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); -+ -+#else /* K&R C */ -+#define NFSPROC_NULL 0 -+extern void * nfsproc_null_2(); -+extern void * nfsproc_null_2_svc(); -+#define NFSPROC_GETATTR 1 -+extern attrstat * nfsproc_getattr_2(); -+extern attrstat * nfsproc_getattr_2_svc(); -+#define NFSPROC_SETATTR 2 -+extern attrstat * nfsproc_setattr_2(); -+extern attrstat * nfsproc_setattr_2_svc(); -+#define NFSPROC_ROOT 3 -+extern void * nfsproc_root_2(); -+extern void * nfsproc_root_2_svc(); -+#define NFSPROC_LOOKUP 4 -+extern diropres * nfsproc_lookup_2(); -+extern diropres * nfsproc_lookup_2_svc(); -+#define NFSPROC_READLINK 5 -+extern readlinkres * nfsproc_readlink_2(); -+extern readlinkres * nfsproc_readlink_2_svc(); -+#define NFSPROC_READ 6 -+extern readres * nfsproc_read_2(); -+extern readres * nfsproc_read_2_svc(); -+#define NFSPROC_WRITECACHE 7 -+extern void * nfsproc_writecache_2(); -+extern void * nfsproc_writecache_2_svc(); -+#define NFSPROC_WRITE 8 -+extern attrstat * nfsproc_write_2(); -+extern attrstat * nfsproc_write_2_svc(); -+#define NFSPROC_CREATE 9 -+extern diropres * nfsproc_create_2(); -+extern diropres * nfsproc_create_2_svc(); -+#define NFSPROC_REMOVE 10 -+extern nfsstat * nfsproc_remove_2(); -+extern nfsstat * nfsproc_remove_2_svc(); -+#define NFSPROC_RENAME 11 -+extern nfsstat * nfsproc_rename_2(); -+extern nfsstat * nfsproc_rename_2_svc(); -+#define NFSPROC_LINK 12 -+extern nfsstat * nfsproc_link_2(); -+extern nfsstat * nfsproc_link_2_svc(); -+#define NFSPROC_SYMLINK 13 -+extern nfsstat * nfsproc_symlink_2(); -+extern nfsstat * nfsproc_symlink_2_svc(); -+#define NFSPROC_MKDIR 14 -+extern diropres * nfsproc_mkdir_2(); -+extern diropres * nfsproc_mkdir_2_svc(); -+#define NFSPROC_RMDIR 15 -+extern nfsstat * nfsproc_rmdir_2(); -+extern nfsstat * nfsproc_rmdir_2_svc(); -+#define NFSPROC_READDIR 16 -+extern readdirres * nfsproc_readdir_2(); -+extern readdirres * nfsproc_readdir_2_svc(); -+#define NFSPROC_STATFS 17 -+extern statfsres * nfsproc_statfs_2(); -+extern statfsres * nfsproc_statfs_2_svc(); -+extern int nfs_program_2_freeresult (); -+#endif /* K&R C */ -+ -+/* the xdr functions */ -+ -+#if defined(__STDC__) || defined(__cplusplus) -+extern bool_t xdr_nfsstat (XDR *, nfsstat*); -+extern bool_t xdr_ftype (XDR *, ftype*); -+extern bool_t xdr_nfs_fh (XDR *, nfs_fh*); -+extern bool_t xdr_nfstime (XDR *, nfstime*); -+extern bool_t xdr_fattr (XDR *, fattr*); -+extern bool_t xdr_sattr (XDR *, sattr*); -+extern bool_t xdr_filename (XDR *, filename*); -+extern bool_t xdr_nfspath (XDR *, nfspath*); -+extern bool_t xdr_attrstat (XDR *, attrstat*); -+extern bool_t xdr_sattrargs (XDR *, sattrargs*); -+extern bool_t xdr_diropargs (XDR *, diropargs*); -+extern bool_t xdr_diropokres (XDR *, diropokres*); -+extern bool_t xdr_diropres (XDR *, diropres*); -+extern bool_t xdr_readlinkres (XDR *, readlinkres*); -+extern bool_t xdr_readargs (XDR *, readargs*); -+extern bool_t xdr_readokres (XDR *, readokres*); -+extern bool_t xdr_readres (XDR *, readres*); -+extern bool_t xdr_writeargs (XDR *, writeargs*); -+extern bool_t xdr_createargs (XDR *, createargs*); -+extern bool_t xdr_renameargs (XDR *, renameargs*); -+extern bool_t xdr_linkargs (XDR *, linkargs*); -+extern bool_t xdr_symlinkargs (XDR *, symlinkargs*); -+extern bool_t xdr_nfscookie (XDR *, nfscookie); -+extern bool_t xdr_readdirargs (XDR *, readdirargs*); -+extern bool_t xdr_entry (XDR *, entry*); -+extern bool_t xdr_dirlist (XDR *, dirlist*); -+extern bool_t xdr_readdirres (XDR *, readdirres*); -+extern bool_t xdr_statfsokres (XDR *, statfsokres*); -+extern bool_t xdr_statfsres (XDR *, statfsres*); -+ -+#else /* K&R C */ -+extern bool_t xdr_nfsstat (); -+extern bool_t xdr_ftype (); -+extern bool_t xdr_nfs_fh (); -+extern bool_t xdr_nfstime (); -+extern bool_t xdr_fattr (); -+extern bool_t xdr_sattr (); -+extern bool_t xdr_filename (); -+extern bool_t xdr_nfspath (); -+extern bool_t xdr_attrstat (); -+extern bool_t xdr_sattrargs (); -+extern bool_t xdr_diropargs (); -+extern bool_t xdr_diropokres (); -+extern bool_t xdr_diropres (); -+extern bool_t xdr_readlinkres (); -+extern bool_t xdr_readargs (); -+extern bool_t xdr_readokres (); -+extern bool_t xdr_readres (); -+extern bool_t xdr_writeargs (); -+extern bool_t xdr_createargs (); -+extern bool_t xdr_renameargs (); -+extern bool_t xdr_linkargs (); -+extern bool_t xdr_symlinkargs (); -+extern bool_t xdr_nfscookie (); -+extern bool_t xdr_readdirargs (); -+extern bool_t xdr_entry (); -+extern bool_t xdr_dirlist (); -+extern bool_t xdr_readdirres (); -+extern bool_t xdr_statfsokres (); -+extern bool_t xdr_statfsres (); -+#endif - #endif /* HAVE_RPCSVC_NFS_PROT_H */ - - /* diff --git a/am-utils.spec b/am-utils.spec index 28ed2f9..5b0d523 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 32%{?dist} +Release: 33%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -29,6 +29,7 @@ BuildRequires: m4 BuildRequires: libtirpc-devel BuildRequires: kernel-headers BuildRequires: libnsl2-devel +BuildRequires: rpcsvc-proto-devel Requires: rpcbind Requires: grep @@ -87,9 +88,6 @@ Patch34: am-utils-6.2-fix-umount-to-mount-race.patch Patch35: am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch -Patch36: am-utils-6.2-account-for-glibc-removed-rpcsvc_nfs_prot_h.patch -Patch37: am-utils-6.2-account-for-glibc-removed-rpcsvc_mount_h.patch - # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -148,8 +146,6 @@ mounting and unmounting filesystems. %patch33 -p1 %patch34 -p1 %patch35 -p1 -%patch36 -p1 -%patch37 -p1 ./bootstrap @@ -263,10 +259,13 @@ fi %{_libdir}/libamu.so* %changelog -* Mon Feb 06 2018 Ian Kent - 5:6.2.0-32 +* Tue Feb 06 2018 Ian Kent - 5:6.2.0-33 +- replace workaround for missing RPC code with package rpcsvc-proto-devel. + +* Tue Feb 06 2018 Ian Kent - 5:6.2.0-32 - add libnsl2 Requires and libnsl2-devel BuildRequires. -* Mon Feb 06 2018 Ian Kent - 5:6.2.0-31 +* Tue Feb 06 2018 Ian Kent - 5:6.2.0-31 - try to workaround the removal of RPC code from glibc. * Sun Feb 04 2018 Ian Kent - 5:6.2.0-30 From 6648a5a65f863bc257bc2c34765c2efbaf6b3cf5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 12 Jul 2018 20:10:22 +0000 Subject: [PATCH 20/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 5b0d523..3e7dd64 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 33%{?dist} +Release: 34%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -259,6 +259,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Jul 12 2018 Fedora Release Engineering - 5:6.2.0-34 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Tue Feb 06 2018 Ian Kent - 5:6.2.0-33 - replace workaround for missing RPC code with package rpcsvc-proto-devel. From c9c51b7071a3026a269ecf526e66374e03872316 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 29 Oct 2018 11:48:15 +0800 Subject: [PATCH 21/57] - disable hesiod support (bz#1643257). --- am-utils.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 3e7dd64..8cb85bd 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 34%{?dist} +Release: 35%{?dist} License: BSD Epoch: 5 Group: System Environment/Daemons @@ -15,7 +15,6 @@ Source3: am-utils.sysconf Source4: am-utils.net.map BuildRequires: gdbm-devel -BuildRequires: hesiod-devel BuildRequires: openldap-devel BuildRequires: autoconf BuildRequires: automake @@ -160,6 +159,7 @@ chmod +x find-requires --enable-cppflags="-I%{_includedir}/nsl" \ --enable-ldflags="-L%{_libdir}/nsl" \ --enable-libs="-lnsl -lresolv" \ + --without-hesiod \ --enable-debug sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool @@ -259,6 +259,9 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Oct 29 2018 Ian Kent - 5:6.2.0-34 +- disable hesiod support. + * Thu Jul 12 2018 Fedora Release Engineering - 5:6.2.0-34 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 7867648970dbe1cba67988942ec097d8e6c0dd2f Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sun, 27 Jan 2019 15:24:13 +0100 Subject: [PATCH 22/57] Remove obsolete scriptlets References: https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets Signed-off-by: Igor Gnatenko --- am-utils.spec | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 8cb85bd..fd46d34 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -38,12 +38,10 @@ Requires: libtirpc Requires: libnsl2 Requires(pre): /usr/bin/grep -Requires(post): /sbin/install-info Requires(post): systemd-sysv Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units -Requires(preun): /sbin/install-info # Fix problems with possible future libtool rebases (#1181698) Patch1: am-utils-6.2-dont-include-auto-generated-macros-in-aclinlude_m4.patch @@ -215,20 +213,9 @@ fi /sbin/ldconfig %systemd_post amd.service -if [ -f %{_infodir}/am-utils.info.gz ]; then - /sbin/install-info %{_infodir}/am-utils.info.gz %{_infodir}/dir || : -fi - %preun %systemd_preun amd.service -if [ $1 -eq 0 ]; then - # Package removal, not upgrade - if [ -f %{_infodir}/am-utils.info.gz ]; then - /sbin/install-info --delete %{_infodir}/am-utils.info.gz %{_infodir}/dir || : - fi -fi - %postun %systemd_postun_with_restart amd.service From 6aca9ec1552b4dfbaa17c6488c389c9beea2d5db Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:17:38 +0100 Subject: [PATCH 23/57] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- am-utils.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index fd46d34..cf902f6 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -5,7 +5,6 @@ Version: 6.2.0 Release: 35%{?dist} License: BSD Epoch: 5 -Group: System Environment/Daemons URL: http://am-utils.org # Git repository git://git.fsl.cs.sunysb.edu/am-utils-6.2.git Source: ftp://ftp.am-utils.org/pub/am-utils/am-utils-%{upstream_version}.tar.gz From 3bd39fea444c88bbb78b3abd23be1efa2aed84cf Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 31 Jan 2019 13:14:13 +0000 Subject: [PATCH 24/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index cf902f6..be54137 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 35%{?dist} +Release: 36%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Jan 31 2019 Fedora Release Engineering - 5:6.2.0-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Mon Oct 29 2018 Ian Kent - 5:6.2.0-34 - disable hesiod support. From c14a48fe7c237965ad2db5a2d974817d2e6d138b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Wed, 24 Apr 2019 14:56:28 +0200 Subject: [PATCH 25/57] Remove hardcoded gzip suffix from GNU info pages --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index be54137..ab08e14 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 36%{?dist} +Release: 37%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Apr 24 2019 Björn Esser - 5:6.2.0-37 +- Remove hardcoded gzip suffix from GNU info pages + * Thu Jan 31 2019 Fedora Release Engineering - 5:6.2.0-36 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 1abd73baef761a85f0945291743bf7ea708538d9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 24 Jul 2019 17:49:03 +0000 Subject: [PATCH 26/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index ab08e14..01a4d86 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 37%{?dist} +Release: 38%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 24 2019 Fedora Release Engineering - 5:6.2.0-38 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Wed Apr 24 2019 Björn Esser - 5:6.2.0-37 - Remove hardcoded gzip suffix from GNU info pages From 6a94e4334eff17fcf7ed662f4ebae12e1f8b60f3 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jan 2020 11:29:07 +0000 Subject: [PATCH 27/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 01a4d86..a37c146 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 38%{?dist} +Release: 39%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,9 @@ fi %{_libdir}/libamu.so* %changelog +* Tue Jan 28 2020 Fedora Release Engineering - 5:6.2.0-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Wed Jul 24 2019 Fedora Release Engineering - 5:6.2.0-38 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 3b4ae1fde7df457c9107828aa16a954a8174f417 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 27 Jul 2020 11:58:39 +0000 Subject: [PATCH 28/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index a37c146..1414c65 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 39%{?dist} +Release: 40%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,9 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Jul 27 2020 Fedora Release Engineering - 5:6.2.0-40 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Tue Jan 28 2020 Fedora Release Engineering - 5:6.2.0-39 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From 478854e071583c24bdcb01b941d0040c09214e12 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 31 Jul 2020 23:58:22 +0000 Subject: [PATCH 29/57] - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 1414c65..e845825 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 40%{?dist} +Release: 41%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -245,6 +245,10 @@ fi %{_libdir}/libamu.so* %changelog +* Fri Jul 31 2020 Fedora Release Engineering - 5:6.2.0-41 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Mon Jul 27 2020 Fedora Release Engineering - 5:6.2.0-40 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From e0347233ef1c773471e9ec8c632600807c5a641e Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 16 Dec 2020 23:28:18 +0000 Subject: [PATCH 30/57] Add BuildRequires: make https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot --- am-utils.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/am-utils.spec b/am-utils.spec index e845825..f226d5e 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -28,6 +28,7 @@ BuildRequires: libtirpc-devel BuildRequires: kernel-headers BuildRequires: libnsl2-devel BuildRequires: rpcsvc-proto-devel +BuildRequires: make Requires: rpcbind Requires: grep From e5c17a114150335e6abfb5e2fbef9ebecda92cef Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 00:01:51 +0000 Subject: [PATCH 31/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index f226d5e..6fabed8 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 41%{?dist} +Release: 42%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -246,6 +246,9 @@ fi %{_libdir}/libamu.so* %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 5:6.2.0-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Fri Jul 31 2020 Fedora Release Engineering - 5:6.2.0-41 - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From 0e4dd5d3419085f8a5a3728e093de327fafc0ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 2 Mar 2021 16:14:13 +0100 Subject: [PATCH 32/57] Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. --- am-utils.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 6fabed8..a3f76c5 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 42%{?dist} +Release: 43%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -246,6 +246,10 @@ fi %{_libdir}/libamu.so* %changelog +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 5:6.2.0-43 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + * Tue Jan 26 2021 Fedora Release Engineering - 5:6.2.0-42 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 897e55380d5f30707b0002519ec0b98ee0a1d919 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 21 Jul 2021 12:34:04 +0000 Subject: [PATCH 33/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering From 684d5e8c0ee090469d1d335f7afeba165f134580 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 21 Jul 2021 17:29:29 +0000 Subject: [PATCH 34/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index a3f76c5..7add392 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 43%{?dist} +Release: 44%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -246,6 +246,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 21 2021 Fedora Release Engineering - 5:6.2.0-44 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 5:6.2.0-43 - Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. From bf5ee6b5d0a9a5f0c058b1881dbcca0ee78ca9c7 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Sun, 29 Aug 2021 12:15:38 +0800 Subject: [PATCH 35/57] - add changes for bug 1942977. --- ...ert-AC_HELP_STRING-to-AS_HELP_STRING.patch | 95 ++++++ ...-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch | 272 +++++++++++++++++ ...onvert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch | 67 +++++ ...-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch | 277 ++++++++++++++++++ ...M_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch | 25 ++ ...-prevent-building-with-autoconf-2_71.patch | 26 ++ am-utils-6.2-fix-double-quote-escaping.patch | 64 ++++ am-utils-6.2-update-configure_ac.patch | 84 ++++++ ...ls-6.2-use-linux-libtirpc-if-present.patch | 9 +- am-utils.spec | 33 ++- 10 files changed, 947 insertions(+), 5 deletions(-) create mode 100644 am-utils-6.2-convert-AC_HELP_STRING-to-AS_HELP_STRING.patch create mode 100644 am-utils-6.2-convert-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch create mode 100644 am-utils-6.2-convert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch create mode 100644 am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch create mode 100644 am-utils-6.2-convert-AM_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch create mode 100644 am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch create mode 100644 am-utils-6.2-fix-double-quote-escaping.patch create mode 100644 am-utils-6.2-update-configure_ac.patch diff --git a/am-utils-6.2-convert-AC_HELP_STRING-to-AS_HELP_STRING.patch b/am-utils-6.2-convert-AC_HELP_STRING-to-AS_HELP_STRING.patch new file mode 100644 index 0000000..b8208ff --- /dev/null +++ b/am-utils-6.2-convert-AC_HELP_STRING-to-AS_HELP_STRING.patch @@ -0,0 +1,95 @@ +am-utils-6.2 - convert AC_HELP_STRING to AS_HELP_STRING + +From: Ian Kent + +autoconf 2.71 autoreconf tells us AC_HELP_STRING is obsolete. +Use AS_HELP_STRING instead. + +Signed-off-by: Ian Kent +--- + m4/macros/opt_amu_cflags.m4 | 2 +- + m4/macros/opt_cppflags.m4 | 2 +- + m4/macros/opt_debug.m4 | 2 +- + m4/macros/opt_ldflags.m4 | 2 +- + m4/macros/opt_libs.m4 | 2 +- + m4/macros/with_addon.m4 | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/m4/macros/opt_amu_cflags.m4 b/m4/macros/opt_amu_cflags.m4 +index 1194786b..e94dbc24 100644 +--- a/m4/macros/opt_amu_cflags.m4 ++++ b/m4/macros/opt_amu_cflags.m4 +@@ -4,7 +4,7 @@ dnl NOTE: this is only for final compiltions, not for configure tests) + AC_DEFUN([AMU_OPT_AMU_CFLAGS], + [AC_MSG_CHECKING(for additional C option compilation flags) + AC_ARG_ENABLE(am-cflags, +-AC_HELP_STRING([--enable-am-cflags=ARG], ++AS_HELP_STRING([--enable-am-cflags=ARG], + [compile package with ARG additional C flags]), + [ + if test "$enableval" = "" || test "$enableval" = "yes" || test "$enableval" = "no"; then +diff --git a/m4/macros/opt_cppflags.m4 b/m4/macros/opt_cppflags.m4 +index 9cb72362..97197212 100644 +--- a/m4/macros/opt_cppflags.m4 ++++ b/m4/macros/opt_cppflags.m4 +@@ -4,7 +4,7 @@ dnl NOTE: this is for configuration as well as compilations! + AC_DEFUN([AMU_OPT_CPPFLAGS], + [AC_MSG_CHECKING(for configuration/compilation (-I) preprocessor flags) + AC_ARG_ENABLE(cppflags, +-AC_HELP_STRING([--enable-cppflags=ARG], ++AS_HELP_STRING([--enable-cppflags=ARG], + [configure/compile with ARG (-I) preprocessor flags]), + [ + if test "$enableval" = "" || test "$enableval" = "yes" || test "$enableval" = "no"; then +diff --git a/m4/macros/opt_debug.m4 b/m4/macros/opt_debug.m4 +index b6f044e9..bca938ac 100644 +--- a/m4/macros/opt_debug.m4 ++++ b/m4/macros/opt_debug.m4 +@@ -4,7 +4,7 @@ dnl and "no" means none. + AC_DEFUN([AMU_OPT_DEBUG], + [AC_MSG_CHECKING(for debugging options) + AC_ARG_ENABLE(debug, +-AC_HELP_STRING([--enable-debug=ARG],[enable debugging (yes/mem/no)]), ++AS_HELP_STRING([--enable-debug=ARG],[enable debugging (yes/mem/no)]), + [ + if test "$enableval" = yes; then + AC_MSG_RESULT(yes) +diff --git a/m4/macros/opt_ldflags.m4 b/m4/macros/opt_ldflags.m4 +index cf3ee432..51c66601 100644 +--- a/m4/macros/opt_ldflags.m4 ++++ b/m4/macros/opt_ldflags.m4 +@@ -4,7 +4,7 @@ dnl NOTE: this is for configuration as well as compilations! + AC_DEFUN([AMU_OPT_LDFLAGS], + [AC_MSG_CHECKING(for configuration/compilation (-L) library flags) + AC_ARG_ENABLE(ldflags, +-AC_HELP_STRING([--enable-ldflags=ARG], ++AS_HELP_STRING([--enable-ldflags=ARG], + [configure/compile with ARG (-L) library flags]), + [ + if test "$enableval" = "" || test "$enableval" = "yes" || test "$enableval" = "no"; then +diff --git a/m4/macros/opt_libs.m4 b/m4/macros/opt_libs.m4 +index e7414860..40d496ba 100644 +--- a/m4/macros/opt_libs.m4 ++++ b/m4/macros/opt_libs.m4 +@@ -4,7 +4,7 @@ dnl NOTE: this is for configuration as well as compilations! + AC_DEFUN([AMU_OPT_LIBS], + [AC_MSG_CHECKING(for configuration/compilation (-l) library flags) + AC_ARG_ENABLE(libs, +-AC_HELP_STRING([--enable-libs=ARG], ++AS_HELP_STRING([--enable-libs=ARG], + [configure/compile with ARG (-l) library flags]), + [ + if test "$enableval" = "" || test "$enableval" = "yes" || test "$enableval" = "no"; then +diff --git a/m4/macros/with_addon.m4 b/m4/macros/with_addon.m4 +index d8ea8cfa..c3d8a7fa 100644 +--- a/m4/macros/with_addon.m4 ++++ b/m4/macros/with_addon.m4 +@@ -4,7 +4,7 @@ AC_DEFUN([AMU_WITH_ADDON], + [AC_MSG_CHECKING([if $1 is wanted]) + ac_upcase=`echo $1|tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + AC_ARG_WITH($1, +- AC_HELP_STRING([--with-$1], ++ AS_HELP_STRING([--with-$1], + [enable $2 support (default=yes if found)] + ),[ + if test "$withval" = "yes"; then diff --git a/am-utils-6.2-convert-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch b/am-utils-6.2-convert-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch new file mode 100644 index 0000000..d4cd3cf --- /dev/null +++ b/am-utils-6.2-convert-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch @@ -0,0 +1,272 @@ +am-utils-6.2 - convert AC_TRY_COMPILE to AC_COMPILE_IFELSE + +From: Ian Kent + +autoconf 2.71 autoreconf tells us AC_TRY_COMPILE is obsolete. +Convert to use the AC_COMPILE_IFELSE instead. + +Signed-off-by: Ian Kent +--- + m4/macros/c_void_p.m4 | 9 +++++---- + m4/macros/check_varargs_macros.m4 | 24 ++++++++++++++---------- + m4/macros/extern_optarg.m4 | 11 ++++++----- + m4/macros/field_mntent_t_mnt_time_string.m4 | 7 ++++--- + m4/macros/mount_headers.m4 | 4 ++-- + m4/macros/struct_mntent.m4 | 7 ++++--- + m4/macros/struct_mnttab.m4 | 7 ++++--- + m4/macros/try_compile_anyfs.m4 | 8 +++++--- + m4/macros/try_compile_nfs.m4 | 7 ++++--- + m4/macros/try_compile_rpc.m4 | 8 +++++--- + 10 files changed, 53 insertions(+), 39 deletions(-) + +diff --git a/m4/macros/c_void_p.m4 b/m4/macros/c_void_p.m4 +index 3977c9be..64e998ff 100644 +--- a/m4/macros/c_void_p.m4 ++++ b/m4/macros/c_void_p.m4 +@@ -6,11 +6,12 @@ AC_CACHE_CHECK(if compiler can handle void *, + ac_cv_c_void_p, + [ + # try to compile a program which uses void * +-AC_TRY_COMPILE( +-[ ], +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ ]], ++[[ + void *vp; +-], ac_cv_c_void_p=yes, ac_cv_c_void_p=no) ++]])], ac_cv_c_void_p=yes, ac_cv_c_void_p=no) + ]) + if test "$ac_cv_c_void_p" = yes + then +diff --git a/m4/macros/check_varargs_macros.m4 b/m4/macros/check_varargs_macros.m4 +index 44bd3edf..93c26ffc 100644 +--- a/m4/macros/check_varargs_macros.m4 ++++ b/m4/macros/check_varargs_macros.m4 +@@ -6,23 +6,27 @@ AC_CACHE_CHECK(if compiler can handle variable-length macros, + ac_cv_varargs_macros, + [ + # try C99 style +-AC_TRY_COMPILE( +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ + #define foo(str,size,fmt,...) bar(__FILE__,__LINE__,(str),(size),(fmt),__VA_ARGS__) +-], +-[ ++]], ++[[ + char a[80]; + foo(a, sizeof(a), "%d,%d", 1, 2); +-], ac_cv_varargs_macros=c99, ++]] ++)], ac_cv_varargs_macros=c99, + # else try gcc style +-AC_TRY_COMPILE( +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ + #define foo(str,size,args...) bar(__FILE__,__LINE__,(str),(size),(fmt),args) +-], +-[ ++]], ++[[ + char a[80]; + foo(a, sizeof(a), "%d,%d", 1, 2); +-], ac_cv_varargs_macros=gcc, ac_cv_varargs_macros=none)) ++]] ++)], ac_cv_varargs_macros=gcc, ac_cv_varargs_macros=none)) + ]) + if test "$ac_cv_varargs_macros" = c99 + then +diff --git a/m4/macros/extern_optarg.m4 b/m4/macros/extern_optarg.m4 +index 70cb50ae..b082b061 100644 +--- a/m4/macros/extern_optarg.m4 ++++ b/m4/macros/extern_optarg.m4 +@@ -6,8 +6,9 @@ AC_CACHE_CHECK(if external definition for optarg[] exists, + ac_cv_extern_optarg, + [ + # try to compile program that uses the variable +-AC_TRY_COMPILE( +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ + #ifdef HAVE_STDIO_H + # include + #endif /* HAVE_STDIO_H */ +@@ -23,10 +24,10 @@ AC_TRY_COMPILE( + #ifdef HAVE_ERRNO_H + # include + #endif /* HAVE_ERRNO_H */ +-], +-[ ++]], ++[[ + char *cp = optarg; +-], ac_cv_extern_optarg=yes, ac_cv_extern_optarg=no) ++]])], ac_cv_extern_optarg=yes, ac_cv_extern_optarg=no) + ]) + if test "$ac_cv_extern_optarg" = yes + then +diff --git a/m4/macros/field_mntent_t_mnt_time_string.m4 b/m4/macros/field_mntent_t_mnt_time_string.m4 +index 42ad647b..9ed83f46 100644 +--- a/m4/macros/field_mntent_t_mnt_time_string.m4 ++++ b/m4/macros/field_mntent_t_mnt_time_string.m4 +@@ -6,7 +6,8 @@ AC_CACHE_CHECK(if mntent_t field mnt_time exist as type string, + ac_cv_field_mntent_t_mnt_time_string, + [ + # try to compile a program +-AC_TRY_COMPILE( ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( + AMU_MOUNT_HEADERS( + [ + /* now set the typedef */ +@@ -20,13 +21,13 @@ typedef struct mnttab mntent_t; + # endif /* not HAVE_STRUCT_MNTTAB */ + #endif /* not HAVE_STRUCT_MNTENT */ + ]), +-[ ++[[ + mntent_t mtt; + char *cp = "test"; + int i; + mtt.mnt_time = cp; + i = mtt.mnt_time[0]; +-], ac_cv_field_mntent_t_mnt_time_string=yes, ac_cv_field_mntent_t_mnt_time_string=no) ++]])], ac_cv_field_mntent_t_mnt_time_string=yes, ac_cv_field_mntent_t_mnt_time_string=no) + ]) + if test "$ac_cv_field_mntent_t_mnt_time_string" = yes + then +diff --git a/m4/macros/mount_headers.m4 b/m4/macros/mount_headers.m4 +index cf7b9103..3a1226f4 100644 +--- a/m4/macros/mount_headers.m4 ++++ b/m4/macros/mount_headers.m4 +@@ -1,12 +1,12 @@ + dnl ###################################################################### + dnl an M4 macro to include a list of common headers being used everywhere + define(AMU_MOUNT_HEADERS, +-[ ++[[ + #include "${srcdir}/include/mount_headers1.h" + #include AMU_NFS_PROTOCOL_HEADER + #include "${srcdir}/include/mount_headers2.h" + + $1 +-] ++]] + ) + dnl ====================================================================== +diff --git a/m4/macros/struct_mntent.m4 b/m4/macros/struct_mntent.m4 +index d9f48119..9a9ad18b 100644 +--- a/m4/macros/struct_mntent.m4 ++++ b/m4/macros/struct_mntent.m4 +@@ -6,12 +6,13 @@ AC_CACHE_CHECK(for struct mntent, + ac_cv_have_struct_mntent, + [ + # try to compile a program which may have a definition for the structure +-AC_TRY_COMPILE( ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( + AMU_MOUNT_HEADERS + , +-[ ++[[ + struct mntent mt; +-], ac_cv_have_struct_mntent=yes, ac_cv_have_struct_mntent=no) ++]])], ac_cv_have_struct_mntent=yes, ac_cv_have_struct_mntent=no) + ]) + if test "$ac_cv_have_struct_mntent" = yes + then +diff --git a/m4/macros/struct_mnttab.m4 b/m4/macros/struct_mnttab.m4 +index ed1cb563..4eabbaa4 100644 +--- a/m4/macros/struct_mnttab.m4 ++++ b/m4/macros/struct_mnttab.m4 +@@ -6,12 +6,13 @@ AC_CACHE_CHECK(for struct mnttab, + ac_cv_have_struct_mnttab, + [ + # try to compile a program which may have a definition for the structure +-AC_TRY_COMPILE( ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( + AMU_MOUNT_HEADERS + , +-[ ++[[ + struct mnttab mt; +-], ac_cv_have_struct_mnttab=yes, ac_cv_have_struct_mnttab=no) ++]])], ac_cv_have_struct_mnttab=yes, ac_cv_have_struct_mnttab=no) + ]) + if test "$ac_cv_have_struct_mnttab" = yes + then +diff --git a/m4/macros/try_compile_anyfs.m4 b/m4/macros/try_compile_anyfs.m4 +index 22a57198..cd34eee4 100644 +--- a/m4/macros/try_compile_anyfs.m4 ++++ b/m4/macros/try_compile_anyfs.m4 +@@ -6,8 +6,9 @@ dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) + dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) + AC_DEFUN([AC_TRY_COMPILE_ANYFS], + [# try to compile a program which may have a definition for a structure +-AC_TRY_COMPILE( +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ + #ifdef HAVE_SYS_TYPES_H + # include + #endif /* HAVE_SYS_TYPES_H */ +@@ -180,6 +181,7 @@ struct netexport { int this_is_SO_wrong; }; /* for bsdi-2.1 */ + #ifdef HAVE_FS_UDF_UDF_MOUNT_H + # include + #endif /* HAVE_FS_UDF_UDF_MOUNT_H */ +-], [$1], [$2], [$3]) ++]], [[$1]] ++)], [$2], [$3]) + ]) + dnl ====================================================================== +diff --git a/m4/macros/try_compile_nfs.m4 b/m4/macros/try_compile_nfs.m4 +index d04e1961..9a7a3892 100644 +--- a/m4/macros/try_compile_nfs.m4 ++++ b/m4/macros/try_compile_nfs.m4 +@@ -6,8 +6,9 @@ dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) + dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) + AC_DEFUN([AC_TRY_COMPILE_NFS], + [# try to compile a program which may have a definition for a structure +-AC_TRY_COMPILE( +-AMU_MOUNT_HEADERS +-, [$1], [$2], [$3]) ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++AMU_MOUNT_HEADERS, ++[[$1]])], [$2], [$3]) + ]) + dnl ====================================================================== +diff --git a/m4/macros/try_compile_rpc.m4 b/m4/macros/try_compile_rpc.m4 +index 5c95348c..f98bea7d 100644 +--- a/m4/macros/try_compile_rpc.m4 ++++ b/m4/macros/try_compile_rpc.m4 +@@ -6,8 +6,9 @@ dnl [$2] action to take if the program compiled (3rd arg to AC_TRY_COMPILE) + dnl [$3] action to take if program did not compile (4rd arg to AC_TRY_COMPILE) + AC_DEFUN([AC_TRY_COMPILE_RPC], + [# try to compile a program which may have a definition for a structure +-AC_TRY_COMPILE( +-[ ++AC_COMPILE_IFELSE( ++[AC_LANG_PROGRAM( ++[[ + #ifdef HAVE_SYS_TYPES_H + # include + #endif /* HAVE_SYS_TYPES_H */ +@@ -18,6 +19,7 @@ AC_TRY_COMPILE( + #if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) + # include + #endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */ +-], [$1], [$2], [$3]) ++]], [[$1]] ++)], [$2], [$3]) + ]) + dnl ====================================================================== diff --git a/am-utils-6.2-convert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch b/am-utils-6.2-convert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch new file mode 100644 index 0000000..6b753c4 --- /dev/null +++ b/am-utils-6.2-convert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch @@ -0,0 +1,67 @@ +am-utils-6.2 - convert AC_TRY_LINK to AC_LINK_IFELSE + +From: Ian Kent + +autoconf 2.71 autoreconf tells us AC_TRY_LINK is obsolete. +Convert to use the AC_LINK_IFELSE instead. + +Signed-off-by: Ian Kent +--- + m4/macros/check_lib2.m4 | 30 ++++++++++++++++++------------ + 1 file changed, 18 insertions(+), 12 deletions(-) + +diff --git a/m4/macros/check_lib2.m4 b/m4/macros/check_lib2.m4 +index 64e6bb5b..7d4e5a5e 100644 +--- a/m4/macros/check_lib2.m4 ++++ b/m4/macros/check_lib2.m4 +@@ -16,32 +16,38 @@ AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, + + # first try with base library, without auxiliary library + LIBS="-l$1 $LIBS" +-AC_TRY_LINK(dnl +-ifelse([$2], [main], , dnl Avoid conflicting decl of main. ++dnl ithe ifelse() macro is used to avoid conflicting decl of main. ++AC_LINK_IFELSE( ++[AC_LANG_SOURCE( ++[[ ++ifelse([$2], [main], , + [/* Override any gcc2 internal prototype to avoid an error. */ + ] + [/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $2(); +-]), +- [$2()], +- eval "ac_cv_lib_$ac_lib_var=\"$1\"", +- eval "ac_cv_lib_$ac_lib_var=no") ++])]], ++ [[$2()]])], ++ [eval "ac_cv_lib_$ac_lib_var=\"$1\""], ++ [eval "ac_cv_lib_$ac_lib_var=no"]) + + # if OK, set to no auxiliary library, else try auxiliary library + if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = no"; then + LIBS="-l$1 $5 $LIBS" +- AC_TRY_LINK(dnl +- ifelse([$2], [main], , dnl Avoid conflicting decl of main. ++dnl ithe ifelse() macro is used to avoid conflicting decl of main. ++ AC_LINK_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ ++ ifelse([$2], [main], , + [/* Override any gcc2 internal prototype to avoid an error. */ + ] + [/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $2(); +- ]), +- [$2()], +- eval "ac_cv_lib_$ac_lib_var=\"$1 $5\"", +- eval "ac_cv_lib_$ac_lib_var=no") ++ ])]], ++ [[$2()]])], ++ [eval "ac_cv_lib_$ac_lib_var=\"$1 $5\""], ++ [eval "ac_cv_lib_$ac_lib_var=no"]) + fi + + LIBS="$ac_save_LIBS" diff --git a/am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch b/am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch new file mode 100644 index 0000000..5230395 --- /dev/null +++ b/am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch @@ -0,0 +1,277 @@ +am-utils-6.2 - convert AC_TRY_RUN to AC_RUN_IFELSE + +From: Ian Kent + +autoconf 2.71 autoreconf tells us AC_TRY_RUN is obsolete. +Convert to use the AC_RUN_IFELSE instead. + +Signed-off-by: Ian Kent +--- + m4/macros/check_fs_mntent.m4 | 7 ++++--- + m4/macros/check_gnu_getopt.m4 | 6 ++++-- + m4/macros/check_libwrap_severity.m4 | 14 ++++++++------ + m4/macros/check_mnttab_type.m4 | 7 ++++--- + m4/macros/check_mount_type.m4 | 7 ++++--- + m4/macros/expand_cpp_hex.m4 | 7 ++++--- + m4/macros/expand_cpp_int.m4 | 7 ++++--- + m4/macros/expand_cpp_string.m4 | 7 ++++--- + m4/macros/expand_run_string.m4 | 7 ++++--- + m4/macros/func_bad_hasmntopt.m4 | 5 +++-- + 10 files changed, 43 insertions(+), 31 deletions(-) + +diff --git a/m4/macros/check_fs_mntent.m4 b/m4/macros/check_fs_mntent.m4 +index 6146c7ee..e612b4ec 100644 +--- a/m4/macros/check_fs_mntent.m4 ++++ b/m4/macros/check_fs_mntent.m4 +@@ -144,8 +144,9 @@ do + fi + + # run a test program for bsdi3 +- AC_TRY_RUN( +- [ ++ AC_RUN_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ + #include + #include + main() +@@ -158,7 +159,7 @@ main() + else + exit(0); + } +- ], [eval "ac_cv_fs_$ac_fs_name=yes" ++ ]])], [eval "ac_cv_fs_$ac_fs_name=yes" + break + ] + ) +diff --git a/m4/macros/check_gnu_getopt.m4 b/m4/macros/check_gnu_getopt.m4 +index 76315321..6ac6440c 100644 +--- a/m4/macros/check_gnu_getopt.m4 ++++ b/m4/macros/check_gnu_getopt.m4 +@@ -3,7 +3,9 @@ dnl Do we have a GNUish getopt + AC_DEFUN([AMU_CHECK_GNU_GETOPT], + [ + AC_CACHE_CHECK([for GNU getopt], ac_cv_sys_gnu_getopt, [ +-AC_TRY_RUN([ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + #include + #include + int main() +@@ -29,7 +31,7 @@ int main() + fprintf(rf, isGNU ? "yes" : "no"); + exit(0); + } +-],[ ++]])],[ + ac_cv_sys_gnu_getopt="`cat conftestresult`" + ],[ + ac_cv_sys_gnu_getopt="fail" +diff --git a/m4/macros/check_libwrap_severity.m4 b/m4/macros/check_libwrap_severity.m4 +index 955ba55a..f57ffcb1 100644 +--- a/m4/macros/check_libwrap_severity.m4 ++++ b/m4/macros/check_libwrap_severity.m4 +@@ -8,22 +8,24 @@ AC_CACHE_CHECK([if libwrap wants caller to define allow_severity and deny_severi + SAVEDLIBS="$LIBS" + LIBS="$LIBS -lwrap" + # run program one without defining our own severity variables +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + int main() + { + exit(0); + } +-],[ac_tmp_val1="yes"],[ac_tmp_val1="no"]) ++]])],[ac_tmp_val1="yes"],[ac_tmp_val1="no"]) + # run program two with defining our own severity variables +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + int deny_severity, allow_severity, rfc931_timeout; + int main() + { + exit(0); + } +-],[ac_tmp_val2="yes"],[ac_tmp_val2="no"]) ++]])],[ac_tmp_val2="yes"],[ac_tmp_val2="no"]) + # restore original value of $LIBS + LIBS="$SAVEDLIBS" + # now decide what to do +diff --git a/m4/macros/check_mnttab_type.m4 b/m4/macros/check_mnttab_type.m4 +index 61e1c01b..a840991e 100644 +--- a/m4/macros/check_mnttab_type.m4 ++++ b/m4/macros/check_mnttab_type.m4 +@@ -116,8 +116,9 @@ do + fi + + # then run a test program for bsdi3, tru64, and others +- AC_TRY_RUN( +- [ ++ AC_RUN_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ + #include + #include + main() +@@ -130,7 +131,7 @@ main() + else + exit(0); + } +- ], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" ++ ]])], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) +diff --git a/m4/macros/check_mount_type.m4 b/m4/macros/check_mount_type.m4 +index 9b08def7..c779e0bf 100644 +--- a/m4/macros/check_mount_type.m4 ++++ b/m4/macros/check_mount_type.m4 +@@ -135,8 +135,9 @@ do + fi + + # run a test program for bsdi3 +- AC_TRY_RUN( +- [ ++ AC_RUN_IFELSE( ++ [AC_LANG_SOURCE( ++ [[ + #include + #include + main() +@@ -149,7 +150,7 @@ main() + else + exit(0); + } +- ], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" ++ ]])], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break + ] + ) +diff --git a/m4/macros/expand_cpp_hex.m4 b/m4/macros/expand_cpp_hex.m4 +index 0c7a9e42..13c7c832 100644 +--- a/m4/macros/expand_cpp_hex.m4 ++++ b/m4/macros/expand_cpp_hex.m4 +@@ -10,8 +10,9 @@ AC_EGREP_CPP(0x, + [$1] + $2, + value="notfound" +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + [$1] + main(argc) + int argc; +@@ -24,7 +25,7 @@ exit(0); + # error no such option $2 + #endif + exit(1); +-}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") ++}]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" + ) +diff --git a/m4/macros/expand_cpp_int.m4 b/m4/macros/expand_cpp_int.m4 +index 37253769..e58649e8 100644 +--- a/m4/macros/expand_cpp_int.m4 ++++ b/m4/macros/expand_cpp_int.m4 +@@ -12,8 +12,9 @@ AC_EGREP_CPP( + [$1] + $2, + value="notfound" +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + [$1] + main(argc) + int argc; +@@ -26,7 +27,7 @@ exit(0); + # error no such option $2 + #endif + exit(1); +-}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") ++}]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" + ) +diff --git a/m4/macros/expand_cpp_string.m4 b/m4/macros/expand_cpp_string.m4 +index 51293c4f..e014b7e4 100644 +--- a/m4/macros/expand_cpp_string.m4 ++++ b/m4/macros/expand_cpp_string.m4 +@@ -10,8 +10,9 @@ AC_EGREP_CPP(\".*\", + [$1] + $2, + value="notfound" +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + [$1] + main(argc) + int argc; +@@ -24,7 +25,7 @@ exit(0); + # error no such option $2 + #endif + exit(1); +-}], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") ++}]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" + ) +diff --git a/m4/macros/expand_run_string.m4 b/m4/macros/expand_run_string.m4 +index 2cb964e1..f9390020 100644 +--- a/m4/macros/expand_run_string.m4 ++++ b/m4/macros/expand_run_string.m4 +@@ -4,15 +4,16 @@ dnl Takes: (header, code-to-run, [action-if-found, [action-if-not-found]]) + AC_DEFUN([AMU_EXPAND_RUN_STRING], + [ + value="notfound" +-AC_TRY_RUN( +-[ ++AC_RUN_IFELSE( ++[AC_LANG_SOURCE( ++[[ + $1 + main(argc) + int argc; + { + $2 + exit(0); +-}], ++}]])], + [ + value=`./conftest dummy 2>>config.log` + test -z "$value" && value="notfound" +diff --git a/m4/macros/func_bad_hasmntopt.m4 b/m4/macros/func_bad_hasmntopt.m4 +index d458bd30..9071e595 100644 +--- a/m4/macros/func_bad_hasmntopt.m4 ++++ b/m4/macros/func_bad_hasmntopt.m4 +@@ -3,7 +3,8 @@ dnl Check if we have as buggy hasmntopt() libc function + AC_DEFUN([AMU_FUNC_BAD_HASMNTOPT], + [ + AC_CACHE_CHECK([for working hasmntopt], ac_cv_func_hasmntopt_working, +-[AC_TRY_RUN( ++[AC_RUN_IFELSE( ++[AC_LANG_SOURCE( + AMU_MOUNT_HEADERS( + [[ + #ifdef HAVE_MNTENT_H +@@ -47,7 +48,7 @@ int main() + exit(1); + exit(0); + } +-]]), ++]]))], + [ac_cv_func_hasmntopt_working=yes], + [ac_cv_func_hasmntopt_working=no] + )]) diff --git a/am-utils-6.2-convert-AM_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch b/am-utils-6.2-convert-AM_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch new file mode 100644 index 0000000..9744db4 --- /dev/null +++ b/am-utils-6.2-convert-AM_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch @@ -0,0 +1,25 @@ +am-utils-6.2 - convert AM_CONFIG_HEADER to AC_CONFIG_HEADERS + +From: Ian Kent + +autoconf 2.71 autoreconf tells us AM_CONFIG_HEADER macro is obsolete. +Use AC_CONFIG_HEADERS instead. + +Signed-off-by: Ian Kent +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 98b444d3..e1bc3290 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -18,7 +18,7 @@ AC_INIT([am-utils], + AC_MSG_NOTICE(*** INITIALIZATION ***) + AC_CONFIG_SRCDIR([amd/amd.c]) + AC_CONFIG_MACRO_DIR([m4]) +-AM_CONFIG_HEADER(config.h) ++AC_CONFIG_HEADERS(config.h) + AH_TOP([ + /* + * Start of am-utils-6.x config.h file. diff --git a/am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch b/am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch new file mode 100644 index 0000000..d97c535 --- /dev/null +++ b/am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch @@ -0,0 +1,26 @@ +am-utils-6.2 - dont prevent autoconf 2.7 build + +From: Ian Kent + +Fedora is updating to autoconf 2.71, stop bootstrap from preventing +the build. + +Signed-off-by: Ian Kent +--- + bootstrap | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/bootstrap b/bootstrap +index 000b0167..d454c631 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -9,7 +9,8 @@ validateversion() { + local v="$(autoreconf --version 2>&1 | head -1)" + case "$v" in + *2.69) ;; +- *) echo "am-utils requires autoconf 2.69, you have:" ++ *2.71) ;; ++ *) echo "am-utils requires autoconf 2.69 or 2.71, you have:" + echo " $v" + exit 1;; + esac diff --git a/am-utils-6.2-fix-double-quote-escaping.patch b/am-utils-6.2-fix-double-quote-escaping.patch new file mode 100644 index 0000000..8373b4d --- /dev/null +++ b/am-utils-6.2-fix-double-quote-escaping.patch @@ -0,0 +1,64 @@ +am-utils-6.2 - fix double quote escaping + +From: Ian Kent + +autoconf 2.71 autoreconf tells us that back quotes and double quotes +must not be escaped in certain cases. + +Signed-off-by: Ian Kent +--- + m4/macros/package_bugreport.m4 | 2 +- + m4/macros/package_name.m4 | 2 +- + m4/macros/package_version.m4 | 2 +- + m4/macros/with_addon.m4 | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/m4/macros/package_bugreport.m4 b/m4/macros/package_bugreport.m4 +index 8e1688d9..d2d08412 100644 +--- a/m4/macros/package_bugreport.m4 ++++ b/m4/macros/package_bugreport.m4 +@@ -3,6 +3,6 @@ dnl Bugreport name + AC_DEFUN([AMU_PACKAGE_BUGREPORT], + [AC_MSG_CHECKING(bug-reporting address) + AC_DEFINE_UNQUOTED(PACKAGE_BUGREPORT, "$1") +-AC_MSG_RESULT(\"$1\") ++AC_MSG_RESULT("$1") + ]) + dnl ====================================================================== +diff --git a/m4/macros/package_name.m4 b/m4/macros/package_name.m4 +index 27f5711b..c2b3e013 100644 +--- a/m4/macros/package_name.m4 ++++ b/m4/macros/package_name.m4 +@@ -3,6 +3,6 @@ dnl Package name + AC_DEFUN([AMU_PACKAGE_NAME], + [AC_MSG_CHECKING(package name) + AC_DEFINE_UNQUOTED(PACKAGE_NAME, "$1") +-AC_MSG_RESULT(\"$1\") ++AC_MSG_RESULT("$1") + ]) + dnl ====================================================================== +diff --git a/m4/macros/package_version.m4 b/m4/macros/package_version.m4 +index 0d6c6ef2..2ddd4ade 100644 +--- a/m4/macros/package_version.m4 ++++ b/m4/macros/package_version.m4 +@@ -3,6 +3,6 @@ dnl Version of package + AC_DEFUN([AMU_PACKAGE_VERSION], + [AC_MSG_CHECKING(version of package) + AC_DEFINE_UNQUOTED(PACKAGE_VERSION, "$1") +-AC_MSG_RESULT(\"$1\") ++AC_MSG_RESULT("$1") + ]) + dnl ====================================================================== +diff --git a/m4/macros/with_addon.m4 b/m4/macros/with_addon.m4 +index b061621c..d8ea8cfa 100644 +--- a/m4/macros/with_addon.m4 ++++ b/m4/macros/with_addon.m4 +@@ -12,7 +12,7 @@ if test "$withval" = "yes"; then + elif test "$withval" = "no"; then + with_$1=no + else +- AC_MSG_ERROR(please use \"yes\" or \"no\" with --with-$1) ++ AC_MSG_ERROR(please use "yes" or "no" with --with-$1) + fi + ],[ + with_$1=yes diff --git a/am-utils-6.2-update-configure_ac.patch b/am-utils-6.2-update-configure_ac.patch new file mode 100644 index 0000000..8fd5935 --- /dev/null +++ b/am-utils-6.2-update-configure_ac.patch @@ -0,0 +1,84 @@ +am-utils-6.2 - update configure.ac + +From: Ian Kent + +Make some changes to configure.ac suggested by autoupdate from autoconf +2.71. + +Also move AC_USE_SYSTEM_EXTENSIONS and AC_SEARCH_LIBS([strerror],[cposix]) +further up to elliminate some warnings. + +Signed-off-by: Ian Kent +--- + configure.ac | 18 +++++++----------- + 1 file changed, 7 insertions(+), 11 deletions(-) + +diff --git a/configure.ac b/configure.ac +index e1bc3290..ef4dab0e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -12,9 +12,7 @@ dnl ###################################################################### + dnl INITIALIZATION + dnl AC_INIT + dnl new init style: PACKAGE, VERSION, BUG-REPORTING-ADDRESS +-AC_INIT([am-utils], +- sinclude([vers.m4]), +- [https://bugzilla.am-utils.org/ or am-utils@am-utils.org]) ++AC_INIT([am-utils],sinclude([vers.m4]),[https://bugzilla.am-utils.org/ or am-utils@am-utils.org]) + AC_MSG_NOTICE(*** INITIALIZATION ***) + AC_CONFIG_SRCDIR([amd/amd.c]) + AC_CONFIG_MACRO_DIR([m4]) +@@ -55,7 +53,7 @@ AH_BOTTOM([ + ]) + dnl + dnl AC_CONFIG_AUX_DIR(m4) +-AC_PREREQ(2.52) ++AC_PREREQ(2.69) + AC_REVISION($Revision: 1.134 $) + AC_COPYRIGHT([Copyright (c) 1997-2011 Erez Zadok]) + dnl find out system type +@@ -105,14 +103,14 @@ dnl ====================================================================== + dnl Particular Program Checks + AC_MSG_NOTICE(*** PARTICULAR PROGRAMS (part 1) ***) + dnl AC-PROG-LIBTOOL will run this, but we need this to squelch warnings +-dnl from autoconf about AMU_TRY_COMPILE running before AC_AIX/AC_ISC_POSIX ++dnl from autoconf about AMU_TRY_COMPILE running before AC_USE_SYSTEM_EXTENSIONS/AC_SEARCH_LIBS([strerror],[cposix]) ++AC_USE_SYSTEM_EXTENSIONS ++AC_SEARCH_LIBS([strerror],[cposix]) + AC_PROG_CC + AC_PROG_CPP + AC_PROG_CC_C_O + AC_PROG_GCC_TRADITIONAL + AC_PROG_MAKE_SET +-AC_ISC_POSIX +-AC_AIX + dnl XXX: available in autoconf-2.14 + dnl AC_PROG_CC_STDC + dnl ====================================================================== +@@ -148,7 +146,7 @@ dnl my version of prog_libtool will not build shared by default + dnl AM_PROG_LIBTOOL2 + dnl build static libraries by default + AC_DISABLE_SHARED +-dnl XXX: for autoconf-2.14: use AC_PROG_LIBTOOL, not AM_PROG_LIBTOOL ++dnl XXX: for autoconf-2.69: use LT_INIT, not AC_PROG_LIBTOOL + case ${host_os} in + # Temporarily undo renaming of "linux-gnu" to "linux", because + # libtool only looks for "linux-gnu". Sigh. +@@ -156,7 +154,7 @@ case ${host_os} in + esac + dnl this line must appear only once and on its own line + dnl (hence the double case statements above and below) +-AC_PROG_LIBTOOL ++LT_INIT + case ${host_os} in + # end temporary renaming of "linux-gnu" to "linux" + linux-gnu ) host_os=linux ;; +@@ -175,8 +173,6 @@ dnl ###################################################################### + dnl Some of these macros must be called before any call to the C compiler + AC_MSG_NOTICE(*** UNIX VARIANTS ***) + dnl UNIX VARIANTS +-dnl AC_AIX +-dnl AC_ISC_POSIX + AMU_LINUX_HEADERS + dnl ====================================================================== + diff --git a/am-utils-6.2-use-linux-libtirpc-if-present.patch b/am-utils-6.2-use-linux-libtirpc-if-present.patch index f1fa47b..8b20351 100644 --- a/am-utils-6.2-use-linux-libtirpc-if-present.patch +++ b/am-utils-6.2-use-linux-libtirpc-if-present.patch @@ -10,8 +10,8 @@ Signed-off-by: Ian Kent Makefile.am | 3 ++- configure.ac | 4 ++++ include/am_compat.h | 8 ++++++-- - m4/macros/check_linux_libtirpc.m4 | 14 ++++++++++++++ - 4 files changed, 26 insertions(+), 3 deletions(-) + m4/macros/check_linux_libtirpc.m4 | 15 +++++++++++++++ + 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 m4/macros/check_linux_libtirpc.m4 diff --git a/Makefile.am b/Makefile.am @@ -74,10 +74,10 @@ index 3463f3fa..d6826fc7 100644 #ifndef INADDR_NONE diff --git a/m4/macros/check_linux_libtirpc.m4 b/m4/macros/check_linux_libtirpc.m4 new file mode 100644 -index 00000000..0abd1ad3 +index 00000000..7b40e45c --- /dev/null +++ b/m4/macros/check_linux_libtirpc.m4 -@@ -0,0 +1,14 @@ +@@ -0,0 +1,15 @@ +dnl ###################################################################### +dnl Check for Linux libtirpc library +AC_DEFUN([AMU_CHECK_LIBTIRPC],[ @@ -92,3 +92,4 @@ index 00000000..0abd1ad3 + AC_DEFINE(HAVE_LIBTIRPC, 1, [Define to 1 if you have libtirpc headers installed]) + fi +]) ++dnl ====================================================================== diff --git a/am-utils.spec b/am-utils.spec index 7add392..c323f27 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 44%{?dist} +Release: 45%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -85,6 +85,15 @@ Patch34: am-utils-6.2-fix-umount-to-mount-race.patch Patch35: am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch +Patch36: am-utils-6.2-fix-double-quote-escaping.patch +Patch37: am-utils-6.2-convert-AM_CONFIG_HEADER-to-AC_CONFIG_HEADERS.patch +Patch38: am-utils-6.2-convert-AC_HELP_STRING-to-AS_HELP_STRING.patch +Patch39: am-utils-6.2-convert-AC_TRY_COMPILE-to-AC_COMPILE_IFELSE.patch +Patch40: am-utils-6.2-convert-AC_TRY_LINK-to-AC_LINK_IFELSE.patch +Patch41: am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch +Patch42: am-utils-6.2-update-configure_ac.patch +Patch43: am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -94,6 +103,10 @@ Patch35: am-utils-6.2-fix-nfsv3-fh-length-in-NFS_FH_DREF.patch %define _use_internal_dependency_generator 0 %define old_find_requires %{__find_requires} +# The sed munging of configure by _fix_broken_configure_for_lto +# causes a check failure so opt-out. +%global _lto_cflags %nil + %description Am-utils includes an updated version of Amd, the popular BSD automounter. An automounter is a program which maintains a cache @@ -143,6 +156,14 @@ mounting and unmounting filesystems. %patch33 -p1 %patch34 -p1 %patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 ./bootstrap @@ -246,6 +267,16 @@ fi %{_libdir}/libamu.so* %changelog +* Sat Aug 28 2021 Ian Kent - 5:6.2.0-45 +- fix autoconf double quote escaping. +- convert autoconf AM_CONFIG_HEADER to AC_CONFIG_HEADERS. +- convert autoconf AC_HELP_STRING to AS_HELP_STRING. +- convert autoconf AC_TRY_COMPILE to AC_COMPILE_IFELSE. +- convert autoconf AC_TRY_LINK to AC_LINK_IFELSE. +- convert autoconf AC_TRY_RUN to AC_RUN_IFELSE. +- update autoconf configure.ac. +- dont prevent building with autoconf 2.71. + * Wed Jul 21 2021 Fedora Release Engineering - 5:6.2.0-44 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 71ca6f41bb03550334f56f499f8582df47a88580 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jan 2022 21:10:36 +0000 Subject: [PATCH 36/57] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index c323f27..578d2a0 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 45%{?dist} +Release: 46%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -267,6 +267,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jan 19 2022 Fedora Release Engineering - 5:6.2.0-46 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Sat Aug 28 2021 Ian Kent - 5:6.2.0-45 - fix autoconf double quote escaping. - convert autoconf AM_CONFIG_HEADER to AC_CONFIG_HEADERS. From 3753a269b8a60f92bc24dffbeb2886c04eb871ec Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 20 Jul 2022 20:42:23 +0000 Subject: [PATCH 37/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 578d2a0..e14b6e4 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 46%{?dist} +Release: 47%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -267,6 +267,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 20 2022 Fedora Release Engineering - 5:6.2.0-47 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Wed Jan 19 2022 Fedora Release Engineering - 5:6.2.0-46 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From fa9b2f2bb85a63a94fc882f22924864c18432492 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Thu, 4 Aug 2022 09:09:27 +0800 Subject: [PATCH 38/57] - fix bug 2113103 - am-utils: FTBFS in Fedora rawhide/f37 --- ...ls-6.2-fix-SEGV-on-quick-reply-error.patch | 33 ++ ...tils-6.2-fix-fsmount-naming-conflict.patch | 307 ++++++++++++++++++ ...td-version-used-when-mount-is-nfs-v4.patch | 29 ++ am-utils.conf | 4 + am-utils.spec | 16 +- 5 files changed, 388 insertions(+), 1 deletion(-) create mode 100644 am-utils-6.2-fix-SEGV-on-quick-reply-error.patch create mode 100644 am-utils-6.2-fix-fsmount-naming-conflict.patch create mode 100644 am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch diff --git a/am-utils-6.2-fix-SEGV-on-quick-reply-error.patch b/am-utils-6.2-fix-SEGV-on-quick-reply-error.patch new file mode 100644 index 0000000..3d7c268 --- /dev/null +++ b/am-utils-6.2-fix-SEGV-on-quick-reply-error.patch @@ -0,0 +1,33 @@ +am-utils-6.2 - fix SEGV on quick reply error + +From: Ian Kent + +Clearly a programming mistake on my part, odd it hasn't been seen +before ... + +Signed-off-by: Ian Kent +--- + amd/nfs_subr.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/amd/nfs_subr.c b/amd/nfs_subr.c +index b88a40c8..c0ca0e42 100644 +--- a/amd/nfs_subr.c ++++ b/amd/nfs_subr.c +@@ -1293,6 +1293,8 @@ nfs_quick_reply3(am_node *mp, int error) + am_post_op_attr *post_op_obj; + int ret; + ++ post_op_dir = &result.res_u.ok.dir_attributes; ++ + if (error) { + /* + * Return the error that was passed to us. +@@ -1300,7 +1302,6 @@ nfs_quick_reply3(am_node *mp, int error) + post_op_dir->attributes_follow = 0; + result.status = nfs_error(error); + } else { +- post_op_dir = &result.res_u.ok.dir_attributes; + post_op_obj = &result.res_u.ok.obj_attributes; + am_fattr3 *fattr3; + nfsfattr *fattr; diff --git a/am-utils-6.2-fix-fsmount-naming-conflict.patch b/am-utils-6.2-fix-fsmount-naming-conflict.patch new file mode 100644 index 0000000..30de666 --- /dev/null +++ b/am-utils-6.2-fix-fsmount-naming-conflict.patch @@ -0,0 +1,307 @@ +am-utils-6.2 - fix fsmount naming conflict + +From: Ian Kent + +The mount API's new fsmount() system call conflicts with am-utils +struct fsmount so rename it and realted program variables from +fsmount to fs_mount. + +Signed-off-by: Ian Kent +--- + fsinfo/fsi_analyze.c | 14 +++++++------- + fsinfo/fsi_data.h | 6 +++--- + fsinfo/fsi_gram.y | 16 ++++++++-------- + fsinfo/fsi_util.c | 10 +++++----- + fsinfo/fsinfo.h | 4 ++-- + fsinfo/wr_bparam.c | 2 +- + fsinfo/wr_fstab.c | 26 +++++++++++++------------- + 7 files changed, 39 insertions(+), 39 deletions(-) + +diff --git a/fsinfo/fsi_analyze.c b/fsinfo/fsi_analyze.c +index 78598b85..0b92cfd7 100644 +--- a/fsinfo/fsi_analyze.c ++++ b/fsinfo/fsi_analyze.c +@@ -404,7 +404,7 @@ fixup_required_disk_info(disk_fs *dp) + + + static void +-fixup_required_mount_info(fsmount *fp, dict_ent *de) ++fixup_required_mount_info(fs_mount *fp, dict_ent *de) + { + if (!ISSET(fp->f_mask, FM_FROM)) { + if (de->de_count != 1) { +@@ -417,24 +417,24 @@ fixup_required_mount_info(fsmount *fp, dict_ent *de) + if (!mp) + abort(); + fp->f_ref = mp; +- set_fsmount(fp, FM_FROM, mp->m_dk->d_host->h_hostname); ++ set_fs_mount(fp, FM_FROM, mp->m_dk->d_host->h_hostname); + fsi_log("set: %s comes from %s", fp->f_volname, fp->f_from); + } + } + + if (!ISSET(fp->f_mask, FM_FSTYPE)) { +- set_fsmount(fp, FM_FSTYPE, xstrdup("nfs")); ++ set_fs_mount(fp, FM_FSTYPE, xstrdup("nfs")); + fsi_log("set: fstype is %s", fp->f_fstype); + } + + if (!ISSET(fp->f_mask, FM_OPTS)) { +- set_fsmount(fp, FM_OPTS, xstrdup("rw,nosuid,grpid,defaults")); ++ set_fs_mount(fp, FM_OPTS, xstrdup("rw,nosuid,grpid,defaults")); + fsi_log("set: opts are %s", fp->f_opts); + } + + if (!ISSET(fp->f_mask, FM_LOCALNAME)) { + if (fp->f_ref) { +- set_fsmount(fp, FM_LOCALNAME, xstrdup(fp->f_volname)); ++ set_fs_mount(fp, FM_LOCALNAME, xstrdup(fp->f_volname)); + fsi_log("set: localname is %s", fp->f_localname); + } else { + lerror(fp->f_ioloc, "cannot determine localname since volname %s is not uniquely defined", fp->f_volname); +@@ -476,10 +476,10 @@ static void + analyze_mounts(host *hp) + { + qelem *q = hp->h_mount; +- fsmount *fp; ++ fs_mount *fp; + int netbootp = 0; + +- ITER(fp, fsmount, q) { ++ ITER(fp, fs_mount, q) { + char *p; + char *nn = xstrdup(fp->f_volname); + int req; +diff --git a/fsinfo/fsi_data.h b/fsinfo/fsi_data.h +index 4cc341d8..3a190626 100644 +--- a/fsinfo/fsi_data.h ++++ b/fsinfo/fsi_data.h +@@ -47,7 +47,7 @@ typedef struct dict_data dict_data; + typedef struct dict_ent dict_ent; + typedef struct disk_fs disk_fs; + typedef struct ether_if ether_if; +-typedef struct fsmount fsmount; ++typedef struct fs_mount fs_mount; + typedef struct host host; + typedef struct ioloc ioloc; + typedef struct fsi_mount fsi_mount; +@@ -85,7 +85,7 @@ struct host { + qelem q; + int h_mask; + ioloc *h_ioloc; +- fsmount *h_netroot, *h_netswap; ++ fs_mount *h_netroot, *h_netswap; + #define HF_HOST 0 + char *h_hostname; /* The full name of the host */ + char *h_lochost; /* The name of the host with local domains stripped */ +@@ -181,7 +181,7 @@ struct fsi_mount { + * disk_fs_strings in analyze.c will + * need updating. + */ +-struct fsmount { ++struct fs_mount { + qelem f_q; + fsi_mount *f_ref; + ioloc *f_ioloc; +diff --git a/fsinfo/fsi_gram.y b/fsinfo/fsi_gram.y +index 85d19aa5..17d32401 100644 +--- a/fsinfo/fsi_gram.y ++++ b/fsinfo/fsi_gram.y +@@ -56,7 +56,7 @@ extern qelem *list_of_hosts, *list_of_automounts; + qelem *q; + char *s; + fsi_mount *m; +- fsmount *f; ++ fs_mount *f; + } + + %token tARCH +@@ -372,7 +372,7 @@ list_of_mounts : + { $$ = 0; } + + | list_of_mounts tMOUNT tSTR localinfo_list +- { set_fsmount($4, FM_VOLNAME, $3); ++ { set_fs_mount($4, FM_VOLNAME, $3); + if ($1) + $$ = $1; + else +@@ -392,22 +392,22 @@ list_of_mounts : + */ + localinfo_list : + /* empty */ +- { $$ = new_fsmount(); } ++ { $$ = new_fs_mount(); } + + | localinfo_list tDIRECT +- { $$ = $1; set_fsmount($$, FM_DIRECT, ""); } ++ { $$ = $1; set_fs_mount($$, FM_DIRECT, ""); } + + | localinfo_list tAS tSTR +- { $$ = $1; set_fsmount($$, FM_LOCALNAME, $3); } ++ { $$ = $1; set_fs_mount($$, FM_LOCALNAME, $3); } + + | localinfo_list tFROM tSTR +- { $$ = $1; set_fsmount($$, FM_FROM, $3); } ++ { $$ = $1; set_fs_mount($$, FM_FROM, $3); } + + | localinfo_list tFSTYPE tSTR +- { $$ = $1; set_fsmount($$, FM_FSTYPE, $3); } ++ { $$ = $1; set_fs_mount($$, FM_FSTYPE, $3); } + + | localinfo_list tOPTS tSTR +- { $$ = $1; set_fsmount($$, FM_OPTS, $3); } ++ { $$ = $1; set_fs_mount($$, FM_OPTS, $3); } + + | localinfo_list error '=' tSTR + { yyerror("unknown mount attribute"); } +diff --git a/fsinfo/fsi_util.c b/fsinfo/fsi_util.c +index f8ff313c..d53ff0df 100644 +--- a/fsinfo/fsi_util.c ++++ b/fsinfo/fsi_util.c +@@ -581,7 +581,7 @@ new_mount(void) + + + void +-set_fsmount(fsmount *fp, int k, char *v) ++set_fs_mount(fs_mount *fp, int k, char *v) + { + int m = 1 << k; + +@@ -623,13 +623,13 @@ set_fsmount(fsmount *fp, int k, char *v) + } + + +-fsmount * +-new_fsmount(void) ++fs_mount * ++new_fs_mount(void) + { +- fsmount *fp = CALLOC(struct fsmount); ++ fs_mount *fp = CALLOC(struct fs_mount); + + fp->f_ioloc = current_location(); +- show_new("fsmount"); ++ show_new("fs_mount"); + return fp; + } + +diff --git a/fsinfo/fsinfo.h b/fsinfo/fsinfo.h +index 7a871631..896f8bec 100644 +--- a/fsinfo/fsinfo.h ++++ b/fsinfo/fsinfo.h +@@ -63,7 +63,7 @@ extern dict *new_dict(void); + extern dict_ent *dict_locate(dict *, char *); + extern disk_fs *new_disk_fs(void); + extern ether_if *new_ether_if(void); +-extern fsmount *new_fsmount(void); ++extern fs_mount *new_fs_mount(void); + extern host *new_host(void); + extern int dict_iter(dict *, int (*)(qelem *)); + extern int errors; +@@ -94,7 +94,7 @@ extern void lwarning(ioloc *l, char *fmt, ...) + __attribute__((__format__(__printf__, 2, 3))); + extern void rem_que(qelem *); + extern void set_disk_fs(disk_fs *, int, char *); +-extern void set_fsmount(fsmount *, int, char *); ++extern void set_fs_mount(fs_mount *, int, char *); + extern void set_mount(fsi_mount *, int, char *); + extern void show_area_being_processed(char *area, int n); + extern void show_new(char *msg); +diff --git a/fsinfo/wr_bparam.c b/fsinfo/wr_bparam.c +index 00befa9c..b318d5d3 100644 +--- a/fsinfo/wr_bparam.c ++++ b/fsinfo/wr_bparam.c +@@ -49,7 +49,7 @@ + * Write a host/path in NFS format + */ + static int +-write_nfsname(FILE *ef, fsmount *fp, char *hn) ++write_nfsname(FILE *ef, fs_mount *fp, char *hn) + { + int errors = 0; + char *h = xstrdup(fp->f_ref->m_dk->d_host->h_hostname); +diff --git a/fsinfo/wr_fstab.c b/fsinfo/wr_fstab.c +index 166353eb..4daf161d 100644 +--- a/fsinfo/wr_fstab.c ++++ b/fsinfo/wr_fstab.c +@@ -48,22 +48,22 @@ + + /* forward definitions */ + static void write_aix1_dkfstab(FILE *ef, disk_fs *dp); +-static void write_aix1_dkrmount(FILE *ef, char *hn, fsmount *fp); ++static void write_aix1_dkrmount(FILE *ef, char *hn, fs_mount *fp); + static void write_aix3_dkfstab(FILE *ef, disk_fs *dp); +-static void write_aix3_dkrmount(FILE *ef, char *hn, fsmount *fp); ++static void write_aix3_dkrmount(FILE *ef, char *hn, fs_mount *fp); + static int write_dkfstab(FILE *ef, qelem *q, void (*output) (FILE *, disk_fs *)); +-static int write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fsmount *)); ++static int write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fs_mount *)); + static void write_generic_dkfstab(FILE *ef, disk_fs *dp); +-static void write_generic_dkrmount(FILE *ef, char *hn, fsmount *fp); ++static void write_generic_dkrmount(FILE *ef, char *hn, fs_mount *fp); + static void write_ultrix_dkfstab(FILE *ef, disk_fs *dp); +-static void write_ultrix_dkrmount(FILE *ef, char *hn, fsmount *fp); ++static void write_ultrix_dkrmount(FILE *ef, char *hn, fs_mount *fp); + + /* ----------------------------------------------- */ + + static struct os_fstab_type { + char *os_name; + void (*op_fstab) (FILE *ef, disk_fs *dp); +- void (*op_mount) (FILE *ef, char *hn, fsmount *fp); ++ void (*op_mount) (FILE *ef, char *hn, fs_mount *fp); + } os_tabs[] = { + + { +@@ -117,7 +117,7 @@ write_aix1_dkfstab(FILE *ef, disk_fs *dp) + + + static void +-write_aix1_dkrmount(FILE *ef, char *hn, fsmount *fp) ++write_aix1_dkrmount(FILE *ef, char *hn, fs_mount *fp) + { + char *h = xstrdup(fp->f_ref->m_dk->d_host->h_hostname); + char *hp = xstrdup(h); +@@ -166,7 +166,7 @@ write_aix3_dkfstab(FILE *ef, disk_fs *dp) + + + static void +-write_aix3_dkrmount(FILE *ef, char *hn, fsmount *fp) ++write_aix3_dkrmount(FILE *ef, char *hn, fs_mount *fp) + { + char *h = xstrdup(fp->f_ref->m_dk->d_host->h_hostname); + +@@ -200,7 +200,7 @@ write_ultrix_dkfstab(FILE *ef, disk_fs *dp) + + + static void +-write_ultrix_dkrmount(FILE *ef, char *hn, fsmount *fp) ++write_ultrix_dkrmount(FILE *ef, char *hn, fs_mount *fp) + { + char *h = xstrdup(fp->f_ref->m_dk->d_host->h_hostname); + +@@ -234,7 +234,7 @@ write_generic_dkfstab(FILE *ef, disk_fs *dp) + + + static void +-write_generic_dkrmount(FILE *ef, char *hn, fsmount *fp) ++write_generic_dkrmount(FILE *ef, char *hn, fs_mount *fp) + { + char *h; + +@@ -291,12 +291,12 @@ write_dkfstab(FILE *ef, qelem *q, void (*output) (FILE *, disk_fs *)) + + + static int +-write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fsmount *)) ++write_dkrmount(FILE *ef, qelem *q, char *hn, void (*output) (FILE *, char *, fs_mount *)) + { + int errors = 0; +- fsmount *fp; ++ fs_mount *fp; + +- ITER(fp, fsmount, q) ++ ITER(fp, fs_mount, q) + (*output) (ef, hn, fp); + + return errors; diff --git a/am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch b/am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch new file mode 100644 index 0000000..7aafc46 --- /dev/null +++ b/am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch @@ -0,0 +1,29 @@ +am-utils-6.2 - fix mountd version used when mount is nfs v4 + +From: Ian Kent + +If we are trying to mount the exports of a type host map entry and the +mounts are NFS v4 make sure mountd version 3 is used in the same way it +is used for NFS v3 mounts. + +Signed-off-by: Ian Kent +--- + amd/amfs_host.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/amd/amfs_host.c b/amd/amfs_host.c +index a3468ecd..a363c5cc 100644 +--- a/amd/amfs_host.c ++++ b/amd/amfs_host.c +@@ -346,8 +346,9 @@ amfs_host_mount(am_node *am, mntfs *mf) + host = mf->mf_server->fs_host; + sin = *mf->mf_server->fs_ip; + plog(XLOG_INFO, "amfs_host_mount: NFS version %d", (int) mf->mf_server->fs_version); +-#ifdef HAVE_FS_NFS3 +- if (mf->mf_server->fs_version == NFS_VERSION3) ++#if defined(HAVE_FS_NFS3) || defined(HAVE_FS_NFS4) ++ if (mf->mf_server->fs_version == NFS_VERSION3 || ++ mf->mf_server->fs_version == NFS_VERSION4) + mnt_version = AM_MOUNTVERS3; + else + #endif /* HAVE_FS_NFS3 */ diff --git a/am-utils.conf b/am-utils.conf index 388e673..ef3d7cb 100644 --- a/am-utils.conf +++ b/am-utils.conf @@ -28,6 +28,10 @@ fully_qualified_hosts = no cache_duration = 300 # Fedora doesn't support NFSv2, use the amd NFSv3 server. auto_nfs_version = 3 +# The latest Fedora kernel builds disable UDP so unless a custom build +# is done the internal amd automount server must use the autofs protocol +# not the NFS protocol. +mount_type = autofs # DEFINE AN AMD MOUNT POINT [ /net ] diff --git a/am-utils.spec b/am-utils.spec index e14b6e4..51f260b 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 47%{?dist} +Release: 48%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -94,6 +94,10 @@ Patch41: am-utils-6.2-convert-AC_TRY_RUN-to-AC_RUN_IFELSE.patch Patch42: am-utils-6.2-update-configure_ac.patch Patch43: am-utils-6.2-dont-prevent-building-with-autoconf-2_71.patch +Patch44: am-utils-6.2-fix-fsmount-naming-conflict.patch +Patch45: am-utils-6.2-fix-SEGV-on-quick-reply-error.patch +Patch46: am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -165,6 +169,10 @@ mounting and unmounting filesystems. %patch42 -p1 %patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 + ./bootstrap find_requires=%{old_find_requires} @@ -267,6 +275,12 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Aug 04 2022 Ian Kent - 5:6.2.0-48 +- fix fsmount naming conflict. +- fix SEGV on quick reply error. +- fix mountd version used when mount is nfs v4. +- set mount_type = autofs in default installed configuration. + * Wed Jul 20 2022 Fedora Release Engineering - 5:6.2.0-47 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From 9ba765bc8c208aeef962b035d033a12e18166e57 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 15 Aug 2022 11:08:08 +0800 Subject: [PATCH 39/57] - more fixes for bug 2113103 - am-utils: FTBFS in Fedora rawhide/f37 --- am-utils-6.2-dont-include-linux_mount_h.patch | 35 +++++ ...2-fix-linux-nfs-kernel-module-search.patch | 134 ++++++++++++++++++ am-utils.spec | 12 +- 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 am-utils-6.2-dont-include-linux_mount_h.patch create mode 100644 am-utils-6.2-fix-linux-nfs-kernel-module-search.patch diff --git a/am-utils-6.2-dont-include-linux_mount_h.patch b/am-utils-6.2-dont-include-linux_mount_h.patch new file mode 100644 index 0000000..2f8aaf5 --- /dev/null +++ b/am-utils-6.2-dont-include-linux_mount_h.patch @@ -0,0 +1,35 @@ +am-utils-6.2 - dont include linux/mount.h + +From: Ian Kent + +Updates to glibc to add support for fsconfig() et. al. have introduced +conflicts between sys/mount.h and the corresponding kernel header +linux/mount.h. + +But sys/mount.h and linux/mount.h provide very close to the same +definitions except that sys/mount.h has some additional function +declarations. + +So add a macro define to the amd include file to stop its inclusion +of linux/mount.h when including linux/fs.h so that sys/mount.h is +used instead. + +Signed-off-by: Ian Kent +--- + include/mount_headers1.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/mount_headers1.h b/include/mount_headers1.h +index 7d518a06..af9a90ee 100644 +--- a/include/mount_headers1.h ++++ b/include/mount_headers1.h +@@ -160,6 +160,9 @@ + # endif /* HAVE_LINUX_LIST_H */ + # include + # else ++# ifdef HAVE_SYS_MOUNT_H ++# define _LINUX_MOUNT_H ++# endif /* HAVE_SYS_MOUNT_H */ + # include + # endif/* (!__GLIBC__ || __GLIBC__ < 2) */ + #endif /* HAVE_LINUX_FS_H */ diff --git a/am-utils-6.2-fix-linux-nfs-kernel-module-search.patch b/am-utils-6.2-fix-linux-nfs-kernel-module-search.patch new file mode 100644 index 0000000..41c539c --- /dev/null +++ b/am-utils-6.2-fix-linux-nfs-kernel-module-search.patch @@ -0,0 +1,134 @@ +am-utils-6.2 - fix linux nfs kernel module search + +From: Ian Kent + +The configure macros AMU_CHECK_FS_MNTENT() and AMU_CHECK_MOUNT_TYPE() +haven't been updated for a log time. In particular kernel modules that +are xz compressed aren't considered. + +Also the containing subdirectory name isn't always the the same as +the module name and needs to be special cased. + +The cases I found have been fixed, there are probably more but this +is enough to get us started. + +Signed-off-by: Ian Kent +--- + amd/amfs_host.c | 1 + + configure.ac | 6 +++--- + m4/macros/check_fs_mntent.m4 | 17 +++++++++++++++-- + m4/macros/check_mount_type.m4 | 29 +++++++++++++++++++++++++---- + 4 files changed, 44 insertions(+), 9 deletions(-) + +diff --git a/amd/amfs_host.c b/amd/amfs_host.c +index a363c5cc..deaf69fa 100644 +--- a/amd/amfs_host.c ++++ b/amd/amfs_host.c +@@ -50,6 +50,7 @@ + #endif /* HAVE_CONFIG_H */ + #include + #include ++#include + + static char *amfs_host_match(am_opts *fo); + static int amfs_host_init(mntfs *mf); +diff --git a/configure.ac b/configure.ac +index ef4dab0e..408964d8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -808,8 +808,8 @@ dnl NFS related tests need to happen earlier: many things depend on them + AMU_STRUCT_FIELD_NFS_FH + AMU_STRUCT_NFS_FH + AMU_STRUCT_NFS_FH3 +-AMU_CHECK_FS_MNTENT(nfs3) +-AMU_CHECK_FS_MNTENT(nfs4) ++AMU_CHECK_FS_MNTENT(nfsv3 nfs3, nfs3) ++AMU_CHECK_FS_MNTENT(nfsv4 nfs4, nfs4) + dnl ====================================================================== + + dnl ----------------------------------------------------------------------- +@@ -1117,7 +1117,7 @@ dnl check for mount(2) type/name for filesystem (MNTTYPE_*, MOUNT_*) + AC_MSG_NOTICE(*** MOUNTING TYPES ***) + AMU_CHECK_MOUNT_TYPE(nfs) + AMU_CHECK_MOUNT_TYPE(nfs3) +-AMU_CHECK_MOUNT_TYPE(nfs4) ++AMU_CHECK_MOUNT_TYPE(nfsv4 nfs4, nfs4) + AMU_CHECK_MOUNT_TYPE(lustre) + AMU_CHECK_MOUNT_TYPE(ext4 ext3 ext2 ffs ufs 4.2 4.3 4.4 efs xfs jfs ultrix, ufs) + AMU_CHECK_MOUNT_TYPE(xfs) +diff --git a/m4/macros/check_fs_mntent.m4 b/m4/macros/check_fs_mntent.m4 +index e612b4ec..45ac4974 100644 +--- a/m4/macros/check_fs_mntent.m4 ++++ b/m4/macros/check_fs_mntent.m4 +@@ -98,12 +98,25 @@ do + fi + + # look for a loadable filesystem module (linux 2.4+) +- if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_tmp/$ac_fs_tmp.ko ++ ac_fs_subdir=$ac_fs_tmp ++ if test -n "$2" ++ then ++ if test "$ac_fs_tmp" = "nfsv3" -o "$ac_fs_tmp" = "nfsv4" ++ then ++ ac_fs_subdir="nfs" ++ fi ++ fi ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.ko.xz ++ then ++ eval "ac_cv_fs_$ac_fs_name=yes" ++ break ++ fi ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.ko + then + eval "ac_cv_fs_$ac_fs_name=yes" + break + fi +- if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_tmp/$ac_fs_tmp.o ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.o + then + eval "ac_cv_fs_$ac_fs_name=yes" + break +diff --git a/m4/macros/check_mount_type.m4 b/m4/macros/check_mount_type.m4 +index c779e0bf..88f85323 100644 +--- a/m4/macros/check_mount_type.m4 ++++ b/m4/macros/check_mount_type.m4 +@@ -104,14 +104,35 @@ do + fi + + # look for a loadable filesystem module (linux 2.4+) +- if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_tmp/$ac_fs_tmp.ko ++ # special casing here assumes preferred option name will be ++ # first in the list. ++ ac_fs_option="$ac_fs_tmp" ++ ac_fs_subdir=$ac_fs_tmp ++ if test -n "$2" + then +- eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" ++ if test "$ac_fs_tmp" = "nfsv3" -o "$ac_fs_tmp" = "nfsv4" ++ then ++ ac_fs_subdir="nfs" ++ ac_fs_option="$ac_fs_name" ++ fi ++ if test "$ac_fs_tmp" = "vfat" -o "$ac_fs_tmp" = "msdos" ++ then ++ ac_fs_subdir="fat" ++ fi ++ fi ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.ko.xz ++ then ++ eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_option\\\"" + break + fi +- if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_tmp/$ac_fs_tmp.o ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.ko + then +- eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" ++ eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_option\\\"" ++ break ++ fi ++ if test -f /lib/modules/$host_os_version/kernel/fs/$ac_fs_subdir/$ac_fs_tmp.o ++ then ++ eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_option\\\"" + break + fi + diff --git a/am-utils.spec b/am-utils.spec index 51f260b..047b35c 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 48%{?dist} +Release: 49%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -98,6 +98,9 @@ Patch44: am-utils-6.2-fix-fsmount-naming-conflict.patch Patch45: am-utils-6.2-fix-SEGV-on-quick-reply-error.patch Patch46: am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch +Patch47: am-utils-6.2-fix-linux-nfs-kernel-module-search.patch +Patch48: am-utils-6.2-dont-include-linux_mount_h.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -173,6 +176,9 @@ mounting and unmounting filesystems. %patch45 -p1 %patch46 -p1 +%patch47 -p1 +%patch48 -p1 + ./bootstrap find_requires=%{old_find_requires} @@ -275,6 +281,10 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Aug 15 2022 Ian Kent - 5:6.2.0-49 +- fix linux nfs kernel module search. +- dont include linux/mount.h. + * Thu Aug 04 2022 Ian Kent - 5:6.2.0-48 - fix fsmount naming conflict. - fix SEGV on quick reply error. From 901c8bab008c2eacff1ed9bb978b61d28aecd7cd Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 15 Aug 2022 13:50:30 +0800 Subject: [PATCH 40/57] - add BuildRequires: kernel-modules for s390x. --- am-utils.spec | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 047b35c..9cee802 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 49%{?dist} +Release: 50%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -25,6 +25,12 @@ BuildRequires: texinfo BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel +%ifarch s390x +# configure can't find kernel modules on s390x without this package. +# dracut fails of course but the modules are present for configure +# to use. +BuildRequires: kernel-modules +%endif BuildRequires: kernel-headers BuildRequires: libnsl2-devel BuildRequires: rpcsvc-proto-devel @@ -281,6 +287,9 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Aug 15 2022 Ian Kent - 5:6.2.0-50 +- add BuildRequires: kernel-modules for s390x. + * Mon Aug 15 2022 Ian Kent - 5:6.2.0-49 - fix linux nfs kernel module search. - dont include linux/mount.h. From 34382e964f08b1ef3a879f9c6ba6c796d7c37ec0 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 15 Aug 2022 14:20:46 +0800 Subject: [PATCH 41/57] - don't use ifarch macro. --- am-utils.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 9cee802..c6acac0 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -25,12 +25,10 @@ BuildRequires: texinfo BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel -%ifarch s390x # configure can't find kernel modules on s390x without this package. # dracut fails of course but the modules are present for configure # to use. BuildRequires: kernel-modules -%endif BuildRequires: kernel-headers BuildRequires: libnsl2-devel BuildRequires: rpcsvc-proto-devel From e056269e13c5ccf779c0f109b66e898e440b938c Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mon, 15 Aug 2022 17:19:54 +0800 Subject: [PATCH 42/57] - ensure NFSv4 is seen as supported on s390x build. --- am-utils-6.2-fix-fedora-mock-build-fail.patch | 82 +++++++++++++++++++ am-utils.spec | 12 +-- 2 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 am-utils-6.2-fix-fedora-mock-build-fail.patch diff --git a/am-utils-6.2-fix-fedora-mock-build-fail.patch b/am-utils-6.2-fix-fedora-mock-build-fail.patch new file mode 100644 index 0000000..7fb2b0c --- /dev/null +++ b/am-utils-6.2-fix-fedora-mock-build-fail.patch @@ -0,0 +1,82 @@ +am-utils-6.2 - fix fedora mock build fail + +From: Ian Kent + +NFSv4 really needs to be used here but fedora mock builds don't seem +to be able to see the kernel modules. And when NFSv4 is a module, and +has not been used yet, the test fails. + +So use the existing hack to ensure NFSv4 is seen as supported for both +check_fs_mntent.m4 and check_mount_type.m4 in m4/macros. + +Signed-off-by: Ian Kent +--- + m4/macros/check_fs_mntent.m4 | 23 +++++++++++++---------- + m4/macros/check_mount_type.m4 | 18 ++++++++++++++++++ + 2 files changed, 31 insertions(+), 10 deletions(-) + +diff --git a/m4/macros/check_fs_mntent.m4 b/m4/macros/check_fs_mntent.m4 +index 45ac4974..de3d9a91 100644 +--- a/m4/macros/check_fs_mntent.m4 ++++ b/m4/macros/check_fs_mntent.m4 +@@ -141,18 +141,21 @@ do + break + fi + +- if test "$ac_fs_tmp" = "nfs3" -a "$ac_cv_header_linux_nfs_mount_h" = "yes" ++ if test $ac_fs_tmp = "nfs3" -o $ac_fs_tmp = "nfs4" + then +- # hack hack hack +- # in 6.1, which has fallback to v2/udp, we might want +- # to always use version 4. +- # in 6.0 we do not have much choice +- # +- let nfs_mount_version="`grep NFS_MOUNT_VERSION /usr/include/linux/nfs_mount.h | awk '{print $''3;}'`" +- if test $nfs_mount_version -ge 4 ++ if test "$ac_cv_header_linux_nfs_mount_h" = "yes" + then +- eval "ac_cv_fs_$ac_fs_name=yes" +- break ++ # hack hack hack ++ # in 6.1, which has fallback to v2/udp, we might want ++ # to always use version 4. ++ # in 6.0 we do not have much choice ++ # ++ let nfs_mount_version="`grep NFS_MOUNT_VERSION /usr/include/linux/nfs_mount.h | awk '{print $''3;}'`" ++ if test $nfs_mount_version -ge 4 ++ then ++ eval "ac_cv_fs_$ac_fs_name=yes" ++ break ++ fi + fi + fi + +diff --git a/m4/macros/check_mount_type.m4 b/m4/macros/check_mount_type.m4 +index 88f85323..69354221 100644 +--- a/m4/macros/check_mount_type.m4 ++++ b/m4/macros/check_mount_type.m4 +@@ -155,6 +155,24 @@ do + break + fi + ++ if test $ac_fs_tmp = "nfs4" ++ then ++ if test "$ac_cv_header_linux_nfs_mount_h" = "yes" ++ then ++ # hack hack hack ++ # in 6.1, which has fallback to v2/udp, we might want ++ # to always use version 4. ++ # in 6.0 we do not have much choice ++ # ++ let nfs_mount_version="`grep NFS_MOUNT_VERSION /usr/include/linux/nfs_mount.h | awk '{print $''3;}'`" ++ if test $nfs_mount_version -ge 4 ++ then ++ eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" ++ break ++ fi ++ fi ++ fi ++ + # run a test program for bsdi3 + AC_RUN_IFELSE( + [AC_LANG_SOURCE( diff --git a/am-utils.spec b/am-utils.spec index c6acac0..fc6bf4a 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 50%{?dist} +Release: 51%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -25,10 +25,6 @@ BuildRequires: texinfo BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel -# configure can't find kernel modules on s390x without this package. -# dracut fails of course but the modules are present for configure -# to use. -BuildRequires: kernel-modules BuildRequires: kernel-headers BuildRequires: libnsl2-devel BuildRequires: rpcsvc-proto-devel @@ -104,6 +100,7 @@ Patch46: am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch Patch47: am-utils-6.2-fix-linux-nfs-kernel-module-search.patch Patch48: am-utils-6.2-dont-include-linux_mount_h.patch +Patch49: am-utils-6.2-fix-fedora-mock-build-fail.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -182,6 +179,7 @@ mounting and unmounting filesystems. %patch47 -p1 %patch48 -p1 +%patch49 -p1 ./bootstrap @@ -285,6 +283,10 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Aug 15 2022 Ian Kent - 5:6.2.0-50 +- remove BuildRequires: kernel-modules for s390x. +- add hack to ensure NFSv4 is seen as supported on s390x. + * Mon Aug 15 2022 Ian Kent - 5:6.2.0-50 - add BuildRequires: kernel-modules for s390x. From bb122e50151f5b6ee71649b3d2c94ee33f199a90 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 18 Jan 2023 21:39:12 +0000 Subject: [PATCH 43/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index fc6bf4a..f3a87e9 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 51%{?dist} +Release: 52%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -283,6 +283,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jan 18 2023 Fedora Release Engineering - 5:6.2.0-52 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Mon Aug 15 2022 Ian Kent - 5:6.2.0-50 - remove BuildRequires: kernel-modules for s390x. - add hack to ensure NFSv4 is seen as supported on s390x. From 56ba80bf838e65d4912e358aa11ae2c44a2b6760 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 16 Feb 2023 11:15:41 +0100 Subject: [PATCH 44/57] Port configure script to C99 (#2170414) Related to: --- am-utils-configure-c99.patch | 214 +++++++++++++++++++++++++++++++++++ am-utils.spec | 7 +- 2 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 am-utils-configure-c99.patch diff --git a/am-utils-configure-c99.patch b/am-utils-configure-c99.patch new file mode 100644 index 0000000..f4f1a83 --- /dev/null +++ b/am-utils-configure-c99.patch @@ -0,0 +1,214 @@ +Fix various autoconf helper macros not to require support for implicit +ints and implicit function declarations in the compiler. These C +language features have been removed from C99, and future compilers +will not accept them by default. + +diff --git a/m4/macros/check_fs_mntent.m4 b/m4/macros/check_fs_mntent.m4 +index de3d9a918283bb1d..7800d3eff0f59e71 100644 +--- a/m4/macros/check_fs_mntent.m4 ++++ b/m4/macros/check_fs_mntent.m4 +@@ -165,15 +165,15 @@ do + [[ + #include + #include +-main() ++int main(void) + { + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) +- exit(1); ++ return 1; + else +- exit(0); ++ return 0; + } + ]])], [eval "ac_cv_fs_$ac_fs_name=yes" + break +diff --git a/m4/macros/check_gnu_getopt.m4 b/m4/macros/check_gnu_getopt.m4 +index 6ac6440c47e8edd8..daa61cbaef3b09e9 100644 +--- a/m4/macros/check_gnu_getopt.m4 ++++ b/m4/macros/check_gnu_getopt.m4 +@@ -17,7 +17,7 @@ int main() + int isGNU = 0; + + rf = fopen("conftestresult", "w"); +- if (rf == NULL) exit(1); ++ if (rf == NULL) return 1; + + while ( (c = getopt(argc, argv, "x")) != -1 ) { + switch ( c ) { +@@ -25,11 +25,11 @@ int main() + isGNU=1; + break; + default: +- exit(1); ++ return 1; + } + } + fprintf(rf, isGNU ? "yes" : "no"); +- exit(0); ++ return 0; + } + ]])],[ + ac_cv_sys_gnu_getopt="`cat conftestresult`" +diff --git a/m4/macros/check_mnttab_type.m4 b/m4/macros/check_mnttab_type.m4 +index a840991e95e3ba81..398314910d80337a 100644 +--- a/m4/macros/check_mnttab_type.m4 ++++ b/m4/macros/check_mnttab_type.m4 +@@ -121,15 +121,15 @@ do + [[ + #include + #include +-main() ++int main(void) + { + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) +- exit(1); ++ return 1; + else +- exit(0); ++ return 0; + } + ]])], [eval "ac_cv_mnttab_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break +diff --git a/m4/macros/check_mount_type.m4 b/m4/macros/check_mount_type.m4 +index 693542219f7aee90..1b0de6ccb0b7cafd 100644 +--- a/m4/macros/check_mount_type.m4 ++++ b/m4/macros/check_mount_type.m4 +@@ -179,15 +179,15 @@ do + [[ + #include + #include +-main() ++int main(void) + { + int i; + struct vfsconf vf; + i = getvfsbyname("$ac_fs_tmp", &vf); + if (i < 0) +- exit(1); ++ return 1; + else +- exit(0); ++ return 0; + } + ]])], [eval "ac_cv_mount_type_$ac_fs_name=\\\"$ac_fs_tmp\\\"" + break +diff --git a/m4/macros/check_varargs_macros.m4 b/m4/macros/check_varargs_macros.m4 +index 93c26ffced82fdcc..1dbd4fb59e3d1c88 100644 +--- a/m4/macros/check_varargs_macros.m4 ++++ b/m4/macros/check_varargs_macros.m4 +@@ -9,6 +9,7 @@ ac_cv_varargs_macros, + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ ++void bar(const char *, ...); + #define foo(str,size,fmt,...) bar(__FILE__,__LINE__,(str),(size),(fmt),__VA_ARGS__) + ]], + [[ +@@ -20,6 +21,7 @@ foo(a, sizeof(a), "%d,%d", 1, 2); + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ ++void bar(const char *, ...); + #define foo(str,size,args...) bar(__FILE__,__LINE__,(str),(size),(fmt),args) + ]], + [[ +diff --git a/m4/macros/expand_cpp_hex.m4 b/m4/macros/expand_cpp_hex.m4 +index 13c7c832b0d764fb..7b915d0431b8f688 100644 +--- a/m4/macros/expand_cpp_hex.m4 ++++ b/m4/macros/expand_cpp_hex.m4 +@@ -14,17 +14,16 @@ AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + [$1] +-main(argc) +-int argc; ++int main(int argc) + { + #ifdef $2 + if (argc > 1) + printf("0x%x", $2); +-exit(0); ++return 0; + #else + # error no such option $2 + #endif +-exit(1); ++return 1; + }]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" +diff --git a/m4/macros/expand_cpp_int.m4 b/m4/macros/expand_cpp_int.m4 +index e58649e83013265e..798e7fd7590f4ca7 100644 +--- a/m4/macros/expand_cpp_int.m4 ++++ b/m4/macros/expand_cpp_int.m4 +@@ -16,17 +16,16 @@ AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + [$1] +-main(argc) +-int argc; ++int main(int argc) + { + #ifdef $2 + if (argc > 1) + printf("%d", $2); +-exit(0); ++return 0; + #else + # error no such option $2 + #endif +-exit(1); ++return 1; + }]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" +diff --git a/m4/macros/expand_cpp_string.m4 b/m4/macros/expand_cpp_string.m4 +index e014b7e4fc9d8030..256ddee09303fde4 100644 +--- a/m4/macros/expand_cpp_string.m4 ++++ b/m4/macros/expand_cpp_string.m4 +@@ -14,17 +14,16 @@ AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + [$1] +-main(argc) +-int argc; ++int main(int argc) + { + #ifdef $2 + if (argc > 1) + printf("%s", $2); +-exit(0); ++return 0; + #else + # error no such option $2 + #endif +-exit(1); ++return 1; + }]])], value=`./conftest dummy 2>>config.log`, value="notfound", value="notfound") + , + value="notfound" +diff --git a/m4/macros/expand_run_string.m4 b/m4/macros/expand_run_string.m4 +index f9390020aa934c3e..c8c350f533f80a82 100644 +--- a/m4/macros/expand_run_string.m4 ++++ b/m4/macros/expand_run_string.m4 +@@ -8,11 +8,10 @@ AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ + $1 +-main(argc) +-int argc; ++int main(int argc) + { + $2 +-exit(0); ++return 0; + }]])], + [ + value=`./conftest dummy 2>>config.log` diff --git a/am-utils.spec b/am-utils.spec index f3a87e9..8ddcc99 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 52%{?dist} +Release: 53%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -101,6 +101,7 @@ Patch46: am-utils-6.2-fix-mountd-version-used-when-mount-is-nfs-v4.patch Patch47: am-utils-6.2-fix-linux-nfs-kernel-module-search.patch Patch48: am-utils-6.2-dont-include-linux_mount_h.patch Patch49: am-utils-6.2-fix-fedora-mock-build-fail.patch +Patch50: am-utils-configure-c99.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -180,6 +181,7 @@ mounting and unmounting filesystems. %patch47 -p1 %patch48 -p1 %patch49 -p1 +%patch50 -p1 ./bootstrap @@ -283,6 +285,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Feb 16 2023 Florian Weimer - 5:6.2.0-53 +- Port configure script to C99 (#2170414) + * Wed Jan 18 2023 Fedora Release Engineering - 5:6.2.0-52 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 3c402764ffa0dff54e5ef46a740a3902fdb244cb Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jul 2023 13:11:15 +0000 Subject: [PATCH 45/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 8ddcc99..f7f78c7 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 53%{?dist} +Release: 54%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -285,6 +285,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 19 2023 Fedora Release Engineering - 5:6.2.0-54 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Thu Feb 16 2023 Florian Weimer - 5:6.2.0-53 - Port configure script to C99 (#2170414) From 8518c2c5ccbdd558a958dbf1d9ce35737dcf962f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jan 2024 12:48:00 +0000 Subject: [PATCH 46/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index f7f78c7..4712f9a 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 54%{?dist} +Release: 55%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -285,6 +285,9 @@ fi %{_libdir}/libamu.so* %changelog +* Fri Jan 19 2024 Fedora Release Engineering - 5:6.2.0-55 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Wed Jul 19 2023 Fedora Release Engineering - 5:6.2.0-54 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From bb254c6afeae626f06c40c1fe27894d19f6303da Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 22 Jan 2024 22:57:49 +0000 Subject: [PATCH 47/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 4712f9a..69bc7f5 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 55%{?dist} +Release: 56%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -285,6 +285,9 @@ fi %{_libdir}/libamu.so* %changelog +* Mon Jan 22 2024 Fedora Release Engineering - 5:6.2.0-56 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Fri Jan 19 2024 Fedora Release Engineering - 5:6.2.0-55 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From a2a99550179ca2267e1dab02b040e076fe0b0f27 Mon Sep 17 00:00:00 2001 From: Software Management Team Date: Thu, 30 May 2024 12:46:46 +0200 Subject: [PATCH 48/57] Eliminate use of obsolete %patchN syntax (#2283636) --- am-utils.spec | 100 +++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 69bc7f5..220bda5 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -130,58 +130,58 @@ mounting and unmounting filesystems. %prep %setup -q -n %{name}-%{upstream_version} -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 -%patch34 -p1 -%patch35 -p1 -%patch36 -p1 -%patch37 -p1 -%patch38 -p1 -%patch39 -p1 -%patch40 -p1 -%patch41 -p1 -%patch42 -p1 -%patch43 -p1 +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P12 -p1 +%patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 +%patch -P16 -p1 +%patch -P17 -p1 +%patch -P18 -p1 +%patch -P19 -p1 +%patch -P20 -p1 +%patch -P21 -p1 +%patch -P22 -p1 +%patch -P23 -p1 +%patch -P24 -p1 +%patch -P25 -p1 +%patch -P26 -p1 +%patch -P27 -p1 +%patch -P28 -p1 +%patch -P29 -p1 +%patch -P30 -p1 +%patch -P31 -p1 +%patch -P32 -p1 +%patch -P33 -p1 +%patch -P34 -p1 +%patch -P35 -p1 +%patch -P36 -p1 +%patch -P37 -p1 +%patch -P38 -p1 +%patch -P39 -p1 +%patch -P40 -p1 +%patch -P41 -p1 +%patch -P42 -p1 +%patch -P43 -p1 -%patch44 -p1 -%patch45 -p1 -%patch46 -p1 +%patch -P44 -p1 +%patch -P45 -p1 +%patch -P46 -p1 -%patch47 -p1 -%patch48 -p1 -%patch49 -p1 -%patch50 -p1 +%patch -P47 -p1 +%patch -P48 -p1 +%patch -P49 -p1 +%patch -P50 -p1 ./bootstrap From e176b0ba741ae49f2a2a19ad4e76254933e3b0f6 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 17 Jul 2024 16:54:21 +0000 Subject: [PATCH 49/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 220bda5..8727d7e 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 56%{?dist} +Release: 57%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -285,6 +285,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 17 2024 Fedora Release Engineering - 5:6.2.0-57 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Mon Jan 22 2024 Fedora Release Engineering - 5:6.2.0-56 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From d69d00c1957bb3e72dfe43643c26d5065482aebb Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 30 Jul 2024 11:27:45 +0800 Subject: [PATCH 50/57] - fix Fedora 41 build. --- am-utils-6.2-allow-autoconf-2.72.patch | 28 ++++++ am-utils.spec | 114 +++++++++++++------------ 2 files changed, 89 insertions(+), 53 deletions(-) create mode 100644 am-utils-6.2-allow-autoconf-2.72.patch diff --git a/am-utils-6.2-allow-autoconf-2.72.patch b/am-utils-6.2-allow-autoconf-2.72.patch new file mode 100644 index 0000000..ff2d70d --- /dev/null +++ b/am-utils-6.2-allow-autoconf-2.72.patch @@ -0,0 +1,28 @@ +am-utils-6.2 - allow autoconf 2.72 + +From: Ian Kent + +am-utils creates configure at build time and requires versions of autoconf +that are known to work ok. + +Allow autoconf version 2.72 to get a build. + +Signed-off-by: Ian Kent +--- + bootstrap | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/bootstrap b/bootstrap +index d454c63..55b2084 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -10,7 +10,8 @@ validateversion() { + case "$v" in + *2.69) ;; + *2.71) ;; +- *) echo "am-utils requires autoconf 2.69 or 2.71, you have:" ++ *2.72) ;; ++ *) echo "am-utils requires autoconf 2.69, 2.71 or 2.72, you have:" + echo " $v" + exit 1;; + esac diff --git a/am-utils.spec b/am-utils.spec index 8727d7e..3d80a7b 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 57%{?dist} +Release: 58%{?dist} License: BSD Epoch: 5 URL: http://am-utils.org @@ -26,7 +26,7 @@ BuildRequires: gcc BuildRequires: m4 BuildRequires: libtirpc-devel BuildRequires: kernel-headers -BuildRequires: libnsl2-devel +#BuildRequires: libnsl2-devel BuildRequires: rpcsvc-proto-devel BuildRequires: make @@ -35,7 +35,7 @@ Requires: grep Requires: gawk Requires: findutils Requires: libtirpc -Requires: libnsl2 +#Requires: libnsl2 Requires(pre): /usr/bin/grep Requires(post): systemd-sysv @@ -103,6 +103,8 @@ Patch48: am-utils-6.2-dont-include-linux_mount_h.patch Patch49: am-utils-6.2-fix-fedora-mock-build-fail.patch Patch50: am-utils-configure-c99.patch +Patch51: am-utils-6.2-allow-autoconf-2.72.patch + # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in # case this changes. @@ -130,58 +132,60 @@ mounting and unmounting filesystems. %prep %setup -q -n %{name}-%{upstream_version} -%patch -P1 -p1 -%patch -P2 -p1 -%patch -P3 -p1 -%patch -P4 -p1 -%patch -P5 -p1 -%patch -P6 -p1 -%patch -P7 -p1 -%patch -P8 -p1 -%patch -P9 -p1 -%patch -P10 -p1 -%patch -P11 -p1 -%patch -P12 -p1 -%patch -P13 -p1 -%patch -P14 -p1 -%patch -P15 -p1 -%patch -P16 -p1 -%patch -P17 -p1 -%patch -P18 -p1 -%patch -P19 -p1 -%patch -P20 -p1 -%patch -P21 -p1 -%patch -P22 -p1 -%patch -P23 -p1 -%patch -P24 -p1 -%patch -P25 -p1 -%patch -P26 -p1 -%patch -P27 -p1 -%patch -P28 -p1 -%patch -P29 -p1 -%patch -P30 -p1 -%patch -P31 -p1 -%patch -P32 -p1 -%patch -P33 -p1 -%patch -P34 -p1 -%patch -P35 -p1 -%patch -P36 -p1 -%patch -P37 -p1 -%patch -P38 -p1 -%patch -P39 -p1 -%patch -P40 -p1 -%patch -P41 -p1 -%patch -P42 -p1 -%patch -P43 -p1 +%patch -P 1 -p1 +%patch -P 2 -p1 +%patch -P 3 -p1 +%patch -P 4 -p1 +%patch -P 5 -p1 +%patch -P 6 -p1 +%patch -P 7 -p1 +%patch -P 8 -p1 +%patch -P 9 -p1 +%patch -P 10 -p1 +%patch -P 11 -p1 +%patch -P 12 -p1 +%patch -P 13 -p1 +%patch -P 14 -p1 +%patch -P 15 -p1 +%patch -P 16 -p1 +%patch -P 17 -p1 +%patch -P 18 -p1 +%patch -P 19 -p1 +%patch -P 20 -p1 +%patch -P 21 -p1 +%patch -P 22 -p1 +%patch -P 23 -p1 +%patch -P 24 -p1 +%patch -P 25 -p1 +%patch -P 26 -p1 +%patch -P 27 -p1 +%patch -P 28 -p1 +%patch -P 29 -p1 +%patch -P 30 -p1 +%patch -P 31 -p1 +%patch -P 32 -p1 +%patch -P 33 -p1 +%patch -P 34 -p1 +%patch -P 35 -p1 +%patch -P 36 -p1 +%patch -P 37 -p1 +%patch -P 38 -p1 +%patch -P 39 -p1 +%patch -P 40 -p1 +%patch -P 41 -p1 +%patch -P 42 -p1 +%patch -P 43 -p1 -%patch -P44 -p1 -%patch -P45 -p1 -%patch -P46 -p1 +%patch -P 44 -p1 +%patch -P 45 -p1 +%patch -P 46 -p1 -%patch -P47 -p1 -%patch -P48 -p1 -%patch -P49 -p1 -%patch -P50 -p1 +%patch -P 47 -p1 +%patch -P 48 -p1 +%patch -P 49 -p1 +%patch -P 50 -p1 + +%patch -P 51 -p1 ./bootstrap @@ -285,6 +289,10 @@ fi %{_libdir}/libamu.so* %changelog +* Tue Jan 30 2024 Ian Kent - 5:6.2.0-58 +- allow autoconf 2.72. +- remove BuildRequires (and Requires) libnsl2. + * Wed Jul 17 2024 Fedora Release Engineering - 5:6.2.0-57 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From a8ea799173ad16039373f4d6a1decb65d05c3e80 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 30 Jul 2024 11:59:15 +0800 Subject: [PATCH 51/57] - fix changelog date. --- am-utils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 3d80a7b..96bc359 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -289,7 +289,7 @@ fi %{_libdir}/libamu.so* %changelog -* Tue Jan 30 2024 Ian Kent - 5:6.2.0-58 +* Tue Jul 30 2024 Ian Kent - 5:6.2.0-58 - allow autoconf 2.72. - remove BuildRequires (and Requires) libnsl2. From 7afaaebd8f3968ee33edd1126c1b66348929a57a Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 30 Jul 2024 12:37:23 +0800 Subject: [PATCH 52/57] - don't check kernel verion matches kernel-headers version at build. --- ...-6.2-dont-check-kernel-version-match.patch | 32 +++++++++++++++++++ am-utils.spec | 3 ++ 2 files changed, 35 insertions(+) create mode 100644 am-utils-6.2-dont-check-kernel-version-match.patch diff --git a/am-utils-6.2-dont-check-kernel-version-match.patch b/am-utils-6.2-dont-check-kernel-version-match.patch new file mode 100644 index 0000000..f778e55 --- /dev/null +++ b/am-utils-6.2-dont-check-kernel-version-match.patch @@ -0,0 +1,32 @@ +am-utils-6.2 - dont check kernel version match + +From: Ian Kent + +The configure script checks that the host kernel version matches the +installed headers version. To do this it uses a program that depends +on /usr/include/linux/version.h from the hernel headers. This program +is failing to run (or perhaps to compile) and the Fedora build system +doesn't provide the needed logs to find out why. + +For now comment out this check and assume the kernel-headers package +will be installed due to the BuildRequires and that the include file +/usr/include/linux/version.h will be available. + +Signed-off-by: Ian Kent +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 408964d..5c015b9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -173,7 +173,7 @@ dnl ###################################################################### + dnl Some of these macros must be called before any call to the C compiler + AC_MSG_NOTICE(*** UNIX VARIANTS ***) + dnl UNIX VARIANTS +-AMU_LINUX_HEADERS ++dnl AMU_LINUX_HEADERS + dnl ====================================================================== + + dnl ###################################################################### diff --git a/am-utils.spec b/am-utils.spec index 96bc359..040fd9f 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -104,6 +104,7 @@ Patch49: am-utils-6.2-fix-fedora-mock-build-fail.patch Patch50: am-utils-configure-c99.patch Patch51: am-utils-6.2-allow-autoconf-2.72.patch +Patch52: am-utils-6.2-dont-check-kernel-version-match.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -186,6 +187,7 @@ mounting and unmounting filesystems. %patch -P 50 -p1 %patch -P 51 -p1 +%patch -P 52 -p1 ./bootstrap @@ -292,6 +294,7 @@ fi * Tue Jul 30 2024 Ian Kent - 5:6.2.0-58 - allow autoconf 2.72. - remove BuildRequires (and Requires) libnsl2. +- don't check kernel version matches kernel-headers version at build. * Wed Jul 17 2024 Fedora Release Engineering - 5:6.2.0-57 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 30593ae3fd9bf809c78bca13164cbe8f22e1facf Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 30 Jul 2024 13:14:01 +0800 Subject: [PATCH 53/57] - reinstate the kernel version check and fix configure invocation. --- ...-6.2-dont-check-kernel-version-match.patch | 32 ------------------- am-utils.spec | 8 ++--- 2 files changed, 2 insertions(+), 38 deletions(-) delete mode 100644 am-utils-6.2-dont-check-kernel-version-match.patch diff --git a/am-utils-6.2-dont-check-kernel-version-match.patch b/am-utils-6.2-dont-check-kernel-version-match.patch deleted file mode 100644 index f778e55..0000000 --- a/am-utils-6.2-dont-check-kernel-version-match.patch +++ /dev/null @@ -1,32 +0,0 @@ -am-utils-6.2 - dont check kernel version match - -From: Ian Kent - -The configure script checks that the host kernel version matches the -installed headers version. To do this it uses a program that depends -on /usr/include/linux/version.h from the hernel headers. This program -is failing to run (or perhaps to compile) and the Fedora build system -doesn't provide the needed logs to find out why. - -For now comment out this check and assume the kernel-headers package -will be installed due to the BuildRequires and that the include file -/usr/include/linux/version.h will be available. - -Signed-off-by: Ian Kent ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 408964d..5c015b9 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -173,7 +173,7 @@ dnl ###################################################################### - dnl Some of these macros must be called before any call to the C compiler - AC_MSG_NOTICE(*** UNIX VARIANTS ***) - dnl UNIX VARIANTS --AMU_LINUX_HEADERS -+dnl AMU_LINUX_HEADERS - dnl ====================================================================== - - dnl ###################################################################### diff --git a/am-utils.spec b/am-utils.spec index 040fd9f..46f8c25 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -104,7 +104,6 @@ Patch49: am-utils-6.2-fix-fedora-mock-build-fail.patch Patch50: am-utils-configure-c99.patch Patch51: am-utils-6.2-allow-autoconf-2.72.patch -Patch52: am-utils-6.2-dont-check-kernel-version-match.patch # Not needed since autoreconf/libtool appear to do this automatically # Leaving it set doesn't appear to be a problem so leave it set in @@ -187,7 +186,6 @@ mounting and unmounting filesystems. %patch -P 50 -p1 %patch -P 51 -p1 -%patch -P 52 -p1 ./bootstrap @@ -199,9 +197,7 @@ chmod +x find-requires %configure \ --enable-shared \ --enable-am-cflags="-DHAVE_LINUX_NFS_MOUNT_H" \ - --enable-cppflags="-I%{_includedir}/nsl" \ - --enable-ldflags="-L%{_libdir}/nsl" \ - --enable-libs="-lnsl -lresolv" \ + --enable-libs="-lresolv" \ --without-hesiod \ --enable-debug @@ -294,7 +290,7 @@ fi * Tue Jul 30 2024 Ian Kent - 5:6.2.0-58 - allow autoconf 2.72. - remove BuildRequires (and Requires) libnsl2. -- don't check kernel version matches kernel-headers version at build. +- also remove references to libnsl in configure invocation. * Wed Jul 17 2024 Fedora Release Engineering - 5:6.2.0-57 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From e2bc00949973c50980c126ed452f1e4318456132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Wed, 28 Aug 2024 07:51:48 +0200 Subject: [PATCH 54/57] convert license to SPDX This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4 --- am-utils.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/am-utils.spec b/am-utils.spec index 46f8c25..4369ee1 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,8 +2,9 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 58%{?dist} -License: BSD +Release: 59%{?dist} +# Automatically converted from old format: BSD - review is highly recommended. +License: LicenseRef-Callaway-BSD Epoch: 5 URL: http://am-utils.org # Git repository git://git.fsl.cs.sunysb.edu/am-utils-6.2.git @@ -287,6 +288,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Aug 28 2024 Miroslav Suchý - 5:6.2.0-59 +- convert license to SPDX + * Tue Jul 30 2024 Ian Kent - 5:6.2.0-58 - allow autoconf 2.72. - remove BuildRequires (and Requires) libnsl2. From 979241094be65da81201c40ef532d0ed370a52da Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jan 2025 10:56:08 +0000 Subject: [PATCH 55/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 4369ee1..33c5f23 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 59%{?dist} +Release: 60%{?dist} # Automatically converted from old format: BSD - review is highly recommended. License: LicenseRef-Callaway-BSD Epoch: 5 @@ -288,6 +288,9 @@ fi %{_libdir}/libamu.so* %changelog +* Thu Jan 16 2025 Fedora Release Engineering - 5:6.2.0-60 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Wed Aug 28 2024 Miroslav Suchý - 5:6.2.0-59 - convert license to SPDX From a2bec4d0b4ec5d1a9c44fa166ef812297a92b03a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 23 Jul 2025 16:56:00 +0000 Subject: [PATCH 56/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 33c5f23..5cdf6dc 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 60%{?dist} +Release: 61%{?dist} # Automatically converted from old format: BSD - review is highly recommended. License: LicenseRef-Callaway-BSD Epoch: 5 @@ -288,6 +288,9 @@ fi %{_libdir}/libamu.so* %changelog +* Wed Jul 23 2025 Fedora Release Engineering - 5:6.2.0-61 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Thu Jan 16 2025 Fedora Release Engineering - 5:6.2.0-60 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 395ecc79e3026030a875fd050ad5c349d4e5abc5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 16 Jan 2026 03:37:30 +0000 Subject: [PATCH 57/57] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild --- am-utils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/am-utils.spec b/am-utils.spec index 5cdf6dc..7f08678 100644 --- a/am-utils.spec +++ b/am-utils.spec @@ -2,7 +2,7 @@ Summary: Automount utilities including an updated version of Amd Name: am-utils Version: 6.2.0 %define upstream_version 6.2 -Release: 61%{?dist} +Release: 62%{?dist} # Automatically converted from old format: BSD - review is highly recommended. License: LicenseRef-Callaway-BSD Epoch: 5 @@ -288,6 +288,9 @@ fi %{_libdir}/libamu.so* %changelog +* Fri Jan 16 2026 Fedora Release Engineering - 5:6.2.0-62 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + * Wed Jul 23 2025 Fedora Release Engineering - 5:6.2.0-61 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild