From 92f44e815c58bf5b00b8321b02461df8a8c354e5 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Tue, 12 Mar 2013 09:20:33 +0800 Subject: [PATCH] - update with upstream fixes. --- autofs-5.0.7-add-symlink-pseudo-option.patch | 217 +++++++++++++++++ ....7-depricate-nosymlink-pseudo-option.patch | 40 ++++ ...7-document-browse-option-in-man-page.patch | 46 ++++ ...dont-fail-on-master-map-self-include.patch | 59 +++++ ....7-fix-automounter-support-on-parisc.patch | 24 ++ ...iptor-leak-when-reloading-the-daemon.patch | 179 ++++++++++++++ autofs-5.0.7-fix-libtirpc-build-option.patch | 66 +++++ autofs-5.0.7-fix-requires-in-spec-file.patch | 37 +++ ....0.7-fix-systemd-unidir-in-spec-file.patch | 72 ++++++ ....7-fix-wildcard-multi-map-regression.patch | 225 ++++++++++++++++++ ...fs-5.0.7-update-kernel-include-files.patch | 92 +++++++ autofs.spec | 57 ++++- 12 files changed, 1103 insertions(+), 11 deletions(-) create mode 100644 autofs-5.0.7-add-symlink-pseudo-option.patch create mode 100644 autofs-5.0.7-depricate-nosymlink-pseudo-option.patch create mode 100644 autofs-5.0.7-document-browse-option-in-man-page.patch create mode 100644 autofs-5.0.7-dont-fail-on-master-map-self-include.patch create mode 100644 autofs-5.0.7-fix-automounter-support-on-parisc.patch create mode 100644 autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch create mode 100644 autofs-5.0.7-fix-libtirpc-build-option.patch create mode 100644 autofs-5.0.7-fix-requires-in-spec-file.patch create mode 100644 autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch create mode 100644 autofs-5.0.7-fix-wildcard-multi-map-regression.patch create mode 100644 autofs-5.0.7-update-kernel-include-files.patch diff --git a/autofs-5.0.7-add-symlink-pseudo-option.patch b/autofs-5.0.7-add-symlink-pseudo-option.patch new file mode 100644 index 0000000..b0440f4 --- /dev/null +++ b/autofs-5.0.7-add-symlink-pseudo-option.patch @@ -0,0 +1,217 @@ +autofs-5.0.7 - add symlink pseudo option + +From: Ian Kent + +Add a "symlink" pseudo option to tell the bind mount module to symlink +instead of bind when mounting mounts other than direct mounts and +non-root indirect mount offset mounts (aka. non-root multi-mount +entries). +--- + CHANGELOG | 1 + + include/automount.h | 3 +++ + lib/master_parse.y | 8 +++++++- + lib/master_tok.l | 1 + + man/auto.master.5.in | 8 ++++++++ + modules/mount_autofs.c | 5 +++++ + modules/mount_bind.c | 36 +++++++++++++++++++++++++++++++++++- + 7 files changed, 60 insertions(+), 2 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index c189483..247d334 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -32,6 +32,7 @@ + - fix wildcard multi map regression. + - fix file descriptor leak when reloading the daemon. + - depricate nosymlink pseudo option. ++- add symlink pseudo option. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/include/automount.h b/include/automount.h +index 37541f5..e72fa0d 100644 +--- a/include/automount.h ++++ b/include/automount.h +@@ -455,6 +455,9 @@ struct kernel_mod_version { + /* Don't use bind mounts even when system supports them */ + #define MOUNT_FLAG_NOBIND 0x0020 + ++/* Use symlinks instead of bind mounting local mounts */ ++#define MOUNT_FLAG_SYMLINK 0x0040 ++ + struct autofs_point { + pthread_t thid; + char *path; /* Mount point name */ +diff --git a/lib/master_parse.y b/lib/master_parse.y +index f925b5a..11caf5b 100644 +--- a/lib/master_parse.y ++++ b/lib/master_parse.y +@@ -57,6 +57,7 @@ static char *type; + static char *format; + static long timeout; + static long negative_timeout; ++static unsigned symlnk; + static unsigned nobind; + static unsigned ghost; + extern unsigned global_selection_options; +@@ -100,7 +101,7 @@ static int master_fprintf(FILE *, char *, ...); + %token COMMENT + %token MAP + %token OPT_TIMEOUT OPT_NTIMEOUT OPT_NOBIND OPT_NOGHOST OPT_GHOST OPT_VERBOSE +-%token OPT_DEBUG OPT_RANDOM OPT_USE_WEIGHT ++%token OPT_DEBUG OPT_RANDOM OPT_USE_WEIGHT OPT_SYMLINK + %token COLON COMMA NL DDASH + %type map + %type options +@@ -186,6 +187,7 @@ line: + | PATH OPT_USE_WEIGHT { master_notify($1); YYABORT; } + | PATH OPT_DEBUG { master_notify($1); YYABORT; } + | PATH OPT_TIMEOUT { master_notify($1); YYABORT; } ++ | PATH OPT_SYMLINK { master_notify($1); YYABORT; } + | PATH OPT_NOBIND { master_notify($1); YYABORT; } + | PATH OPT_GHOST { master_notify($1); YYABORT; } + | PATH OPT_NOGHOST { master_notify($1); YYABORT; } +@@ -557,6 +559,7 @@ option: daemon_option + + daemon_option: OPT_TIMEOUT NUMBER { timeout = $2; } + | OPT_NTIMEOUT NUMBER { negative_timeout = $2; } ++ | OPT_SYMLINK { symlnk = 1; } + | OPT_NOBIND { nobind = 1; } + | OPT_NOGHOST { ghost = 0; } + | OPT_GHOST { ghost = 1; } +@@ -627,6 +630,7 @@ static void local_init_vars(void) + debug = 0; + timeout = -1; + negative_timeout = 0; ++ symlnk = 0; + nobind = 0; + ghost = defaults_get_browse_mode(); + random_selection = global_selection_options & MOUNT_FLAG_RANDOM_SELECT; +@@ -811,6 +815,8 @@ int master_parse_entry(const char *buffer, unsigned int default_timeout, unsigne + entry->ap->flags |= MOUNT_FLAG_RANDOM_SELECT; + if (use_weight) + entry->ap->flags |= MOUNT_FLAG_USE_WEIGHT_ONLY; ++ if (symlnk) ++ entry->ap->flags |= MOUNT_FLAG_SYMLINK; + if (negative_timeout) + entry->ap->negative_timeout = negative_timeout; + +diff --git a/lib/master_tok.l b/lib/master_tok.l +index 30abb15..f9b4e55 100644 +--- a/lib/master_tok.l ++++ b/lib/master_tok.l +@@ -361,6 +361,7 @@ OPTNTOUT (-n{OPTWS}|-n{OPTWS}={OPTWS}|--negative-timeout{OPTWS}|--negative-timeo + return(NUMBER); + } + ++ -?symlink { return(OPT_SYMLINK); } + -?nobind { return(OPT_NOBIND); } + -?nobrowse { return(OPT_NOGHOST); } + -g|--ghost|-?browse { return(OPT_GHOST); } +diff --git a/man/auto.master.5.in b/man/auto.master.5.in +index 8007542..bbea43a 100644 +--- a/man/auto.master.5.in ++++ b/man/auto.master.5.in +@@ -159,6 +159,14 @@ on individual map entries of both types. Bind mounting of NFS file + systems can also be prevented for specific map entrys by adding the + "port=" mount option to the entries. + .TP ++.I "symlink" ++This option makes bind mounting use a symlink instead of an actual bind ++mount. It is an autofs specific option that is a pseudo mount option and ++so is given without a leading dash. It may be used with indirect map ++entries only, either in the master map (so it effects all map entries) ++or with individual map entries. The option is ignored for direct mounts ++and non-root offest mount entries. ++.TP + .I "\-r, \-\-random-multimount-selection" + Enables the use of ramdom selection when choosing a host from a + list of replicated servers. This option is applied to this mount +diff --git a/modules/mount_autofs.c b/modules/mount_autofs.c +index ef16020..8c1e600 100644 +--- a/modules/mount_autofs.c ++++ b/modules/mount_autofs.c +@@ -51,6 +51,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, + int argc, status; + int nobind = ap->flags & MOUNT_FLAG_NOBIND; + int ghost = ap->flags & MOUNT_FLAG_GHOST; ++ int symlnk = ap->flags & MOUNT_FLAG_SYMLINK; + time_t timeout = ap->entry->maps->exp_timeout; + unsigned logopt = ap->logopt; + struct map_type_info *info; +@@ -120,6 +121,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, + nobind = 1; + else if (strncmp(cp, "browse", 6) == 0) + ghost = 1; ++ else if (strncmp(cp, "symlink", 7) == 0) ++ symlnk = 1; + else if (strncmp(cp, "timeout=", 8) == 0) { + char *val = strchr(cp, '='); + unsigned tout; +@@ -158,6 +161,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, + } + nap = entry->ap; + nap->parent = ap; ++ if (symlnk) ++ nap->flags |= MOUNT_FLAG_SYMLINK; + + argc = 1; + +diff --git a/modules/mount_bind.c b/modules/mount_bind.c +index 9bce686..4975294 100644 +--- a/modules/mount_bind.c ++++ b/modules/mount_bind.c +@@ -73,10 +73,44 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + char buf[MAX_ERR_BUF]; + int err; + int i, len; ++ int symlnk = (*name != '/' && (ap->flags & MOUNT_FLAG_SYMLINK)); + + if (ap->flags & MOUNT_FLAG_REMOUNT) + return 0; + ++ /* Extract "symlink" pseudo-option which forces local filesystems ++ * to be symlinked instead of bound. ++ */ ++ if (*name != '/' && !symlnk && options) { ++ const char *comma; ++ int o_len = strlen(options) + 1; ++ ++ for (comma = options; *comma != '\0';) { ++ const char *cp; ++ const char *end; ++ ++ while (*comma == ',') ++ comma++; ++ ++ /* Skip leading white space */ ++ while (*comma == ' ' || *comma == '\t') ++ comma++; ++ ++ cp = comma; ++ while (*comma != '\0' && *comma != ',') ++ comma++; ++ ++ /* Skip trailing white space */ ++ end = comma - 1; ++ while (*comma == ' ' || *comma == '\t') ++ end--; ++ ++ o_len = end - cp + 1; ++ if (strncmp("symlink", cp, o_len) == 0) ++ symlnk = 1; ++ } ++ } ++ + /* Root offset of multi-mount */ + len = strlen(root); + if (root[len - 1] == '/') { +@@ -100,7 +134,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + if (options == NULL || *options == '\0') + options = "defaults"; + +- if (bind_works) { ++ if (!symlnk && bind_works) { + int status, existed = 1; + + debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath); diff --git a/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch new file mode 100644 index 0000000..c784de7 --- /dev/null +++ b/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch @@ -0,0 +1,40 @@ +autofs-5.0.7 - depricate nosymlink pseudo option + +From: Ian Kent + +The undocumented "nosymlink" option was the only way to force local +NFS mounting until the more descriptive "nobind" option was added. + +So depricate the "nosymlink" option in favour of the "nobind" option. +--- + CHANGELOG | 1 + + modules/mount_nfs.c | 4 ++++ + 2 files changed, 5 insertions(+) + +diff --git a/CHANGELOG b/CHANGELOG +index a7ed212..c189483 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -31,6 +31,7 @@ + - dont fail on master map self include. + - fix wildcard multi map regression. + - fix file descriptor leak when reloading the daemon. ++- depricate nosymlink pseudo option. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c +index bbbb1de..e61320b 100644 +--- a/modules/mount_nfs.c ++++ b/modules/mount_nfs.c +@@ -125,6 +125,10 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int + + o_len = end - cp + 1; + if (strncmp("nosymlink", cp, o_len) == 0) { ++ warn(ap->logopt, MODPREFIX ++ "the \"nosymlink\" option is depricated " ++ "and will soon be removed, " ++ "use the \"nobind\" option instead"); + nosymlink = 1; + } else if (strncmp("nobind", cp, o_len) == 0) { + nobind = 1; diff --git a/autofs-5.0.7-document-browse-option-in-man-page.patch b/autofs-5.0.7-document-browse-option-in-man-page.patch new file mode 100644 index 0000000..4641342 --- /dev/null +++ b/autofs-5.0.7-document-browse-option-in-man-page.patch @@ -0,0 +1,46 @@ +autofs-5.0.7 - document browse option in man page + +From: Ian Kent + +The "browse" option has remained undocumented for a long time. +Finally add a section for it to auto.master(5) making special +note of the potential performance implications. +--- + CHANGELOG | 1 + + man/auto.master.5.in | 11 +++++++++++ + 2 files changed, 12 insertions(+) + +diff --git a/CHANGELOG b/CHANGELOG +index ecdea0b..d8e4049 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -36,6 +36,7 @@ + - fix requires in spec file. + - fix libtirpc build option to require libtirpc-devel if needed. + - fix systemd unidir in spec file. ++- document browse option in man page. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/man/auto.master.5.in b/man/auto.master.5.in +index bbea43a..c552e56 100644 +--- a/man/auto.master.5.in ++++ b/man/auto.master.5.in +@@ -147,6 +147,17 @@ multiple file systems should be mounted (`multimounts'). If this option + is given, no file system is mounted at all if at least one file system + can't be mounted. + .TP ++.I "[no]browse" ++This is an autofs specific option that is a pseudo mount option and ++so is given without a leading dash. Use of the browse option pre-creates ++mount point directories for indirect mount maps so the map keys can be ++seen in a directory listing without being mounted. Use of this option ++can cause performance problem if the indirect map is large so it should ++be used with caution. The internal program default is to enable browse ++mode for indirect mounts but the default installed configuration overrides ++this by setting BROWSE_MODE to "no" because of the potential performance ++problem. ++.TP + .I "nobind" + This is an autofs specific option that is a pseudo mount option and + so is given without a leading dash. It may be used either in the master diff --git a/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/autofs-5.0.7-dont-fail-on-master-map-self-include.patch new file mode 100644 index 0000000..afb908b --- /dev/null +++ b/autofs-5.0.7-dont-fail-on-master-map-self-include.patch @@ -0,0 +1,59 @@ +autofs-5.0.7 - dont fail on master map self include + +From: Ian Kent + +When reading the master map a self included file map should skip the source +and proceed to the next so, in this case, return an nss status that will +allow the map read to continue. In particular not NSS_STATUS_UNAVAIL which +causes the lookup to record a failure or NSS_STATUS_SUCCESS which indicates +a successful lookup and termintes the reading of sources. +--- + CHANGELOG | 1 + + modules/lookup_file.c | 7 ++++--- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index 39388a5..97d6f48 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -28,6 +28,7 @@ + - make yellow pages support optional. + - modules/replicated.c: use sin6_addr.s6_addr32. + - workaround missing GNU versionsort extension. ++- dont fail on master map self include. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/modules/lookup_file.c b/modules/lookup_file.c +index facb305..f37bed9 100644 +--- a/modules/lookup_file.c ++++ b/modules/lookup_file.c +@@ -397,8 +397,9 @@ int lookup_read_master(struct master *master, time_t age, void *context) + unsigned int path_len, ent_len; + int entry, cur_state; + ++ /* Don't return fail on self include, skip source */ + if (master->recurse) +- return NSS_STATUS_UNAVAIL; ++ return NSS_STATUS_TRYAGAIN; + + if (master->depth > MAX_INCLUDE_DEPTH) { + error(logopt, MODPREFIX +@@ -443,7 +444,7 @@ int lookup_read_master(struct master *master, time_t age, void *context) + + inc = check_master_self_include(master, ctxt); + if (inc) +- master->recurse = 1;; ++ master->recurse = 1; + master->depth++; + status = lookup_nss_read_master(master, age); + if (!status) { +@@ -645,7 +646,7 @@ int lookup_read_map(struct autofs_point *ap, time_t age, void *context) + mc = source->mc; + + if (source->recurse) +- return NSS_STATUS_UNAVAIL; ++ return NSS_STATUS_TRYAGAIN; + + if (source->depth > MAX_INCLUDE_DEPTH) { + error(ap->logopt, diff --git a/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/autofs-5.0.7-fix-automounter-support-on-parisc.patch new file mode 100644 index 0000000..e00fdc1 --- /dev/null +++ b/autofs-5.0.7-fix-automounter-support-on-parisc.patch @@ -0,0 +1,24 @@ +autofs-5.0.7 - fix automounter support on parisc + +From: Helge Deller + +This patch fixes automounter support on the parisc architecture with +64-bit kernel and 32-bit userspace. + +Signed-off-by: Helge Deller +--- + daemon/automount.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/daemon/automount.c b/daemon/automount.c +index 4a3eb3d..4c651cf 100644 +--- a/daemon/automount.c ++++ b/daemon/automount.c +@@ -610,6 +610,7 @@ static size_t get_kpkt_len(void) + if (strcmp(un.machine, "alpha") == 0 || + strcmp(un.machine, "ia64") == 0 || + strcmp(un.machine, "x86_64") == 0 || ++ strcmp(un.machine, "parisc64") == 0 || + strcmp(un.machine, "ppc64") == 0) + pkt_len += 4; + diff --git a/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch new file mode 100644 index 0000000..8ce6c0f --- /dev/null +++ b/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch @@ -0,0 +1,179 @@ +autofs-5.0.7 - fix file descriptor leak when reloading the daemon + +From: Leonardo Chiquitto + +A customer reported that AutoFS may leak file descriptors when some +maps are modified and the daemon reloaded. I'm able to reproduce the +problem on 5.0.7 by following these steps: + +1. Configure a simple direct mount: + +# cat /etc/auto.master +/- /etc/auto.direct + +# cat /etc/auto.direct +/nfs server:/nfs + +2. Start the automounter and do NOT trigger the mount + +3. Replace /etc/auto.direct with: + +# cat /etc/auto.direct +/nfs/1 server:/nfs +/nfs/2 server:/nfs + +4. Reload: + +# kill -HUP $(pidof automount) + +>From now on, every reload will leak a file descriptor: + +# ls -la /proc/$(pidof automount)/fd | grep /nfs +lr-x------ 1 root root 64 Aug 14 22:08 11 -> /nfs +lr-x------ 1 root root 64 Aug 14 22:08 12 -> /nfs +lr-x------ 1 root root 64 Aug 14 22:08 13 -> /nfs +lr-x------ 1 root root 64 Aug 14 22:08 14 -> /nfs +lr-x------ 1 root root 64 Aug 14 22:08 5 -> /nfs + +I've investigated the problem and discovered that the leak happens in +do_umount_autofs_direct(): + +- edit imk +The same leak is present in umount_autofs_offset() also. +Updated patch to cover that too. +- end edit + +int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list +*mnts, struct mapent *me) +{ +(...) + if (me->ioctlfd != -1) { + if (tree_is_mounted(mnts, me->key, MNTS_REAL)) { + error(ap->logopt, + "attempt to umount busy direct mount %s", + me->key); + return 1; + } + ioctlfd = me->ioctlfd; + } else // ioctlfd == -1 + ops->open(ap->logopt, &ioctlfd, me->dev, me->key); <= we open it here + + if (ioctlfd >= 0) { + unsigned int status = 1; + + rv = ops->askumount(ap->logopt, ioctlfd, &status); + /// at this point, rv == 0 and status == 0 + if (rv) { + char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + error(ap->logopt, "ioctl failed: %s", estr); + return 1; + } else if (!status) { + /// at this point, ap->state == ST_READMAP + if (ap->state != ST_SHUTDOWN_FORCE) { + error(ap->logopt, + "ask umount returned busy for %s", + me->key); + return 1; <= we return here, without closing the fd + } else { + me->ioctlfd = -1; + ops->catatonic(ap->logopt, ioctlfd); + ops->close(ap->logopt, ioctlfd); + goto force_umount; + } +(...) +--- + CHANGELOG | 1 + + daemon/direct.c | 19 ++++++++++++++++--- + 2 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index 46ef335..a7ed212 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -30,6 +30,7 @@ + - workaround missing GNU versionsort extension. + - dont fail on master map self include. + - fix wildcard multi map regression. ++- fix file descriptor leak when reloading the daemon. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/daemon/direct.c b/daemon/direct.c +index 3e09c5d..228a666 100644 +--- a/daemon/direct.c ++++ b/daemon/direct.c +@@ -86,7 +86,8 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru + { + struct ioctl_ops *ops = get_ioctl_ops(); + char buf[MAX_ERR_BUF]; +- int ioctlfd, rv, left, retries; ++ int ioctlfd = -1, rv, left, retries; ++ int opened = 0; + + left = umount_multi(ap, me->key, 0); + if (left) { +@@ -103,8 +104,10 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru + return 1; + } + ioctlfd = me->ioctlfd; +- } else ++ } else { + ops->open(ap->logopt, &ioctlfd, me->dev, me->key); ++ opened = 1; ++ } + + if (ioctlfd >= 0) { + unsigned int status = 1; +@@ -113,12 +116,16 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru + if (rv) { + char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + error(ap->logopt, "ioctl failed: %s", estr); ++ if (opened && ioctlfd != -1) ++ ops->close(ap->logopt, ioctlfd); + return 1; + } else if (!status) { + if (ap->state != ST_SHUTDOWN_FORCE) { + error(ap->logopt, + "ask umount returned busy for %s", + me->key); ++ if (opened && ioctlfd != -1) ++ ops->close(ap->logopt, ioctlfd); + return 1; + } else { + me->ioctlfd = -1; +@@ -536,7 +543,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me) + { + struct ioctl_ops *ops = get_ioctl_ops(); + char buf[MAX_ERR_BUF]; +- int ioctlfd, rv = 1, retries; ++ int ioctlfd = -1, rv = 1, retries; ++ int opened = 0; + + if (me->ioctlfd != -1) { + if (is_mounted(_PATH_MOUNTED, me->key, MNTS_REAL)) { +@@ -554,6 +562,7 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me) + return 0; + } + ops->open(ap->logopt, &ioctlfd, me->dev, me->key); ++ opened = 1; + } + + if (ioctlfd >= 0) { +@@ -563,6 +572,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me) + if (rv) { + char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + logerr("ioctl failed: %s", estr); ++ if (opened && ioctlfd != -1) ++ ops->close(ap->logopt, ioctlfd); + return 1; + } else if (!status) { + if (ap->state != ST_SHUTDOWN_FORCE) { +@@ -570,6 +581,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me) + error(ap->logopt, + "ask umount returned busy for %s", + me->key); ++ if (opened && ioctlfd != -1) ++ ops->close(ap->logopt, ioctlfd); + return 1; + } else { + me->ioctlfd = -1; diff --git a/autofs-5.0.7-fix-libtirpc-build-option.patch b/autofs-5.0.7-fix-libtirpc-build-option.patch new file mode 100644 index 0000000..8ad2afa --- /dev/null +++ b/autofs-5.0.7-fix-libtirpc-build-option.patch @@ -0,0 +1,66 @@ +autofs-5.0.7 - fix libtirpc build option + +From: Ian Kent + + +--- + CHANGELOG | 1 + + autofs.spec | 17 ++++++++++++++++- + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/CHANGELOG b/CHANGELOG +index e848bcd..b6b2679 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -34,6 +34,7 @@ + - depricate nosymlink pseudo option. + - add symlink pseudo option. + - fix requires in spec file. ++- fix libtirpc build option to require libtirpc-devel if needed. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/autofs.spec b/autofs.spec +index 703f7a9..f77acc1 100644 +--- a/autofs.spec ++++ b/autofs.spec +@@ -12,6 +12,10 @@ + # disable them. + %define with_systemd %{?_without_systemd: 0} %{?!_without_systemd: 1} + ++# Use --without libtirpc in your rpmbuild command or force values to 0 to ++# disable them. ++%define with_libtirpc %{?_without_libtirpc: 0} %{?!_without_libtirpc: 1} ++ + Summary: A tool from automatically mounting and umounting filesystems. + Name: autofs + %define version 5.0.7 +@@ -25,6 +29,9 @@ Buildroot: %{_tmppath}/%{name}-tmp + %if %{with_systemd} + BuildRequires: systemd-units + %endif ++%if %{with_libtirpc} ++BuildRequires: libtirpc-devel ++%endif + BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel + Requires: chkconfig + Requires: /bin/bash mktemp sed textutils sh-utils grep /bin/ps +@@ -72,9 +79,17 @@ echo %{version}-%{release} > .version + %define _unitdir %{?_unitdir:/lib/systemd/system} + %define systemd_configure_arg --with-systemd + %endif ++%if %{with_libtirpc} ++ %define libtirpc_configure_arg --with-libtirpc ++%endif + + %build +-CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc %{?systemd_configure_arg:} ++CFLAGS="$RPM_OPT_FLAGS -Wall" \ ++./configure --libdir=%{_libdir} \ ++ --disable-mount-locking \ ++ --enable-ignore-busy \ ++ %{?systemd_configure_arg:} \ ++ %{?libtirpc_configure_arg:} + CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1 + + %install diff --git a/autofs-5.0.7-fix-requires-in-spec-file.patch b/autofs-5.0.7-fix-requires-in-spec-file.patch new file mode 100644 index 0000000..404c848 --- /dev/null +++ b/autofs-5.0.7-fix-requires-in-spec-file.patch @@ -0,0 +1,37 @@ +autofs-5.0.7 - fix requires in spec file + +From: Ian Kent + +Fix the use of depricated reqires in tar spec file. +--- + CHANGELOG | 1 + + autofs.spec | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index 247d334..e848bcd 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -33,6 +33,7 @@ + - fix file descriptor leak when reloading the daemon. + - depricate nosymlink pseudo option. + - add symlink pseudo option. ++- fix requires in spec file. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/autofs.spec b/autofs.spec +index b8a3b7a..703f7a9 100644 +--- a/autofs.spec ++++ b/autofs.spec +@@ -25,8 +25,8 @@ Buildroot: %{_tmppath}/%{name}-tmp + %if %{with_systemd} + BuildRequires: systemd-units + %endif +-BuildPrereq: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel +-Prereq: chkconfig ++BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel ++Requires: chkconfig + Requires: /bin/bash mktemp sed textutils sh-utils grep /bin/ps + %if %{with_systemd} + Requires(post): systemd-sysv diff --git a/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch new file mode 100644 index 0000000..d856faf --- /dev/null +++ b/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch @@ -0,0 +1,72 @@ +autofs-5.0.7 - fix systemd unidir in spec file + +From: Ian Kent + + +--- + CHANGELOG | 1 + + autofs.spec | 16 ++++++++-------- + 2 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index b6b2679..ecdea0b 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -35,6 +35,7 @@ + - add symlink pseudo option. + - fix requires in spec file. + - fix libtirpc build option to require libtirpc-devel if needed. ++- fix systemd unidir in spec file. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/autofs.spec b/autofs.spec +index f77acc1..a768e44 100644 +--- a/autofs.spec ++++ b/autofs.spec +@@ -76,7 +76,7 @@ inkludera n + %setup -q + echo %{version}-%{release} > .version + %if %{with_systemd} +- %define _unitdir %{?_unitdir:/lib/systemd/system} ++ %define unitdir %{?_unitdir:/lib/systemd/system} + %define systemd_configure_arg --with-systemd + %endif + %if %{with_libtirpc} +@@ -95,7 +95,7 @@ CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1 + %install + rm -rf $RPM_BUILD_ROOT + %if %{with_systemd} +-install -d -m 755 $RPM_BUILD_ROOT%{_unitdir} ++install -d -m 755 $RPM_BUILD_ROOT%{unitdir} + %else + mkdir -p -m755 $RPM_BUILD_ROOT/etc/rc.d/init.d + %endif +@@ -109,9 +109,13 @@ make install mandir=%{_mandir} initdir=/etc/rc.d/init.d INSTALLROOT=$RPM_BUILD_R + echo make -C redhat + make -C redhat + %if %{with_systemd} +-install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service ++# Configure can get this wrong when the unit files appear under /lib and /usr/lib ++find $RPM_BUILD_ROOT -type f -name autofs.service -exec rm -f {} \; ++install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{unitdir}/autofs.service ++%define init_file_name %{unitdir}/autofs.service + %else + install -m 755 redhat/autofs.init $RPM_BUILD_ROOT/etc/rc.d/init.d/autofs ++%define init_file_name /etc/rc.d/init.d/autofs + %endif + install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs + +@@ -170,11 +174,7 @@ fi + %files + %defattr(-,root,root) + %doc CREDITS CHANGELOG INSTALL COPY* README* samples/ldap* samples/autofs.schema samples/autofs_ldap_auth.conf +-%if %{with_systemd} +-%{_unitdir}/autofs.service +-%else +-%config /etc/rc.d/init.d/autofs +-%endif ++%config %{init_file_name} + %config(noreplace) /etc/auto.master + %config(noreplace,missingok) /etc/auto.misc + %config(noreplace,missingok) /etc/auto.net diff --git a/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/autofs-5.0.7-fix-wildcard-multi-map-regression.patch new file mode 100644 index 0000000..44e4a18 --- /dev/null +++ b/autofs-5.0.7-fix-wildcard-multi-map-regression.patch @@ -0,0 +1,225 @@ +autofs-5.0.7 - fix wildcard multi map regression + +From: Ian Kent + +A recent patch that removed code to add the current map entry when +being parsed if it didn't already exist cause wildcard indirect +multi-mount map entries to fail to mount. + +Indirect multi-mount map entries need the entry matched by a wildcard +lookup to be added to the map entry cache because subsequent operations +expect a distinct map entry to be present or they will fail. This is +what the code that was removed did but it did so in the wrong place +which caused a deadlock situation. +--- + CHANGELOG | 1 + + modules/lookup_file.c | 23 ++++++++++++++++------- + modules/lookup_ldap.c | 19 +++++++++++++++---- + modules/lookup_nisplus.c | 21 ++++++++++++++++----- + modules/lookup_sss.c | 17 ++++++++++++++--- + modules/lookup_yp.c | 21 ++++++++++++++++----- + 6 files changed, 78 insertions(+), 24 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index 97d6f48..46ef335 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -29,6 +29,7 @@ + - modules/replicated.c: use sin6_addr.s6_addr32. + - workaround missing GNU versionsort extension. + - dont fail on master map self include. ++- fix wildcard multi map regression. + + 25/07/2012 autofs-5.0.7 + ======================= +diff --git a/modules/lookup_file.c b/modules/lookup_file.c +index f37bed9..65e5ee6 100644 +--- a/modules/lookup_file.c ++++ b/modules/lookup_file.c +@@ -1040,7 +1040,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + return NSS_STATUS_UNAVAIL; + } + +- cache_readlock(mc); ++ cache_writelock(mc); + me = cache_lookup_first(mc); + if (me && st.st_mtime <= me->age) { + /* +@@ -1082,7 +1082,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + } + } + +- cache_readlock(mc); ++ cache_writelock(mc); + do_cache_lookup: + me = cache_lookup(mc, key); + /* +@@ -1098,11 +1098,20 @@ do_cache_lookup: + if (!me) + me = cache_lookup_distinct(mc, "*"); + } +- if (me && me->mapent && (me->source == source || *me->key == '/')) { +- pthread_cleanup_push(cache_lock_cleanup, mc); +- strcpy(mapent_buf, me->mapent); +- mapent = mapent_buf; +- pthread_cleanup_pop(0); ++ if (me && me->mapent) { ++ /* ++ * Add wildcard match for later validation checks and ++ * negative cache lookups. ++ */ ++ if (ap->type == LKP_INDIRECT && *me->key == '*') { ++ ret = cache_update(mc, source, key, me->mapent, me->age); ++ if (!(ret & (CHE_OK | CHE_UPDATED))) ++ me = NULL; ++ } ++ if (me && (me->source == source || *me->key == '/')) { ++ strcpy(mapent_buf, me->mapent); ++ mapent = mapent_buf; ++ } + } + cache_unlock(mc); + +diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c +index 431e50d..83e3215 100644 +--- a/modules/lookup_ldap.c ++++ b/modules/lookup_ldap.c +@@ -2969,7 +2969,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + return status; + } + +- cache_readlock(mc); ++ cache_writelock(mc); + me = cache_lookup(mc, key); + /* Stale mapent => check for entry in alternate source or wildcard */ + if (me && !me->mapent) { +@@ -2979,9 +2979,20 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + if (!me) + me = cache_lookup_distinct(mc, "*"); + } +- if (me && me->mapent && (me->source == source || *me->key == '/')) { +- strcpy(mapent_buf, me->mapent); +- mapent = mapent_buf; ++ if (me && me->mapent) { ++ /* ++ * Add wildcard match for later validation checks and ++ * negative cache lookups. ++ */ ++ if (ap->type == LKP_INDIRECT && *me->key == '*') { ++ ret = cache_update(mc, source, key, me->mapent, me->age); ++ if (!(ret & (CHE_OK | CHE_UPDATED))) ++ me = NULL; ++ } ++ if (me && (me->source == source || *me->key == '/')) { ++ strcpy(mapent_buf, me->mapent); ++ mapent = mapent_buf; ++ } + } + cache_unlock(mc); + +diff --git a/modules/lookup_nisplus.c b/modules/lookup_nisplus.c +index 9fced96..8237a1e 100644 +--- a/modules/lookup_nisplus.c ++++ b/modules/lookup_nisplus.c +@@ -561,7 +561,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + return status; + } + +- cache_readlock(mc); ++ cache_writelock(mc); + me = cache_lookup(mc, key); + /* Stale mapent => check for entry in alternate source or wildcard */ + if (me && !me->mapent) { +@@ -571,10 +571,21 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + if (!me) + me = cache_lookup_distinct(mc, "*"); + } +- if (me && me->mapent && (me->source == source || *me->key == '/')) { +- mapent_len = strlen(me->mapent); +- mapent = malloc(mapent_len + 1); +- strcpy(mapent, me->mapent); ++ if (me && me->mapent) { ++ /* ++ * Add wildcard match for later validation checks and ++ * negative cache lookups. ++ */ ++ if (ap->type == LKP_INDIRECT && *me->key == '*') { ++ ret = cache_update(mc, source, key, me->mapent, me->age); ++ if (!(ret & (CHE_OK | CHE_UPDATED))) ++ me = NULL; ++ } ++ if (me && (me->source == source || *me->key == '/')) { ++ mapent_len = strlen(me->mapent); ++ mapent = malloc(mapent_len + 1); ++ strcpy(mapent, me->mapent); ++ } + } + cache_unlock(mc); + +diff --git a/modules/lookup_sss.c b/modules/lookup_sss.c +index e0b84cc..5c2ed0a 100644 +--- a/modules/lookup_sss.c ++++ b/modules/lookup_sss.c +@@ -645,9 +645,20 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + if (!me) + me = cache_lookup_distinct(mc, "*"); + } +- if (me && me->mapent && (me->source == source || *me->key == '/')) { +- strcpy(mapent_buf, me->mapent); +- mapent = mapent_buf; ++ if (me && me->mapent) { ++ /* ++ * Add wildcard match for later validation checks and ++ * negative cache lookups. ++ */ ++ if (ap->type == LKP_INDIRECT && *me->key == '*') { ++ ret = cache_update(mc, source, key, me->mapent, me->age); ++ if (!(ret & (CHE_OK | CHE_UPDATED))) ++ me = NULL; ++ } ++ if (me && (me->source == source || *me->key == '/')) { ++ strcpy(mapent_buf, me->mapent); ++ mapent = mapent_buf; ++ } + } + cache_unlock(mc); + +diff --git a/modules/lookup_yp.c b/modules/lookup_yp.c +index 720df2e..a716e1f 100644 +--- a/modules/lookup_yp.c ++++ b/modules/lookup_yp.c +@@ -662,7 +662,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + return status; + } + +- cache_readlock(mc); ++ cache_writelock(mc); + me = cache_lookup(mc, key); + /* Stale mapent => check for entry in alternate source or wildcard */ + if (me && !me->mapent) { +@@ -672,10 +672,21 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void * + if (!me) + me = cache_lookup_distinct(mc, "*"); + } +- if (me && me->mapent && (me->source == source || *me->key == '/')) { +- mapent_len = strlen(me->mapent); +- mapent = alloca(mapent_len + 1); +- strcpy(mapent, me->mapent); ++ if (me && me->mapent) { ++ /* ++ * Add wildcard match for later validation checks and ++ * negative cache lookups. ++ */ ++ if (ap->type == LKP_INDIRECT && *me->key == '*') { ++ ret = cache_update(mc, source, key, me->mapent, me->age); ++ if (!(ret & (CHE_OK | CHE_UPDATED))) ++ me = NULL; ++ } ++ if (me && (me->source == source || *me->key == '/')) { ++ mapent_len = strlen(me->mapent); ++ mapent = alloca(mapent_len + 1); ++ strcpy(mapent, me->mapent); ++ } + } + cache_unlock(mc); + diff --git a/autofs-5.0.7-update-kernel-include-files.patch b/autofs-5.0.7-update-kernel-include-files.patch new file mode 100644 index 0000000..3b6bb92 --- /dev/null +++ b/autofs-5.0.7-update-kernel-include-files.patch @@ -0,0 +1,92 @@ +autofs-5.0.7 - update kernel include files + +From: Ian Kent + +Update autofs include files to include the latest changes. +--- + include/linux/auto_fs.h | 33 ++++++++++----------------------- + include/linux/auto_fs4.h | 3 ++- + 2 files changed, 12 insertions(+), 24 deletions(-) + +diff --git a/include/linux/auto_fs.h b/include/linux/auto_fs.h +index 91d414f..64df1a6 100644 +--- a/include/linux/auto_fs.h ++++ b/include/linux/auto_fs.h +@@ -14,13 +14,8 @@ + #ifndef _LINUX_AUTO_FS_H + #define _LINUX_AUTO_FS_H + +-#ifdef __KERNEL__ +-#include +-#include + #include +-#include +-#else +-#include ++#ifndef __KERNEL__ + #include + #endif /* __KERNEL__ */ + +@@ -32,25 +27,16 @@ + #define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION + + /* +- * Architectures where both 32- and 64-bit binaries can be executed +- * on 64-bit kernels need this. This keeps the structure format +- * uniform, and makes sure the wait_queue_token isn't too big to be +- * passed back down to the kernel. +- * +- * This assumes that on these architectures: +- * mode 32 bit 64 bit +- * ------------------------- +- * int 32 bit 32 bit +- * long 32 bit 64 bit +- * +- * If so, 32-bit user-space code should be backwards compatible. ++ * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed ++ * back to the kernel via ioctl from userspace. On architectures where 32- and ++ * 64-bit userspace binaries can be executed it's important that the size of ++ * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we ++ * do not break the binary ABI interface by changing the structure size. + */ +- +-#if defined(__sparc__) || defined(__mips__) || defined(__x86_64__) \ +- || defined(__powerpc__) || defined(__s390__) +-typedef unsigned int autofs_wqt_t; +-#else ++#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */ + typedef unsigned long autofs_wqt_t; ++#else ++typedef unsigned int autofs_wqt_t; + #endif + + /* Packet types */ +@@ -81,6 +67,7 @@ struct autofs_packet_expire { + #define AUTOFS_IOC_FAIL _IO(0x93,0x61) + #define AUTOFS_IOC_CATATONIC _IO(0x93,0x62) + #define AUTOFS_IOC_PROTOVER _IOR(0x93,0x63,int) ++#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,compat_ulong_t) + #define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long) + #define AUTOFS_IOC_EXPIRE _IOR(0x93,0x65,struct autofs_packet_expire) + +diff --git a/include/linux/auto_fs4.h b/include/linux/auto_fs4.h +index 55fa478..e02982f 100644 +--- a/include/linux/auto_fs4.h ++++ b/include/linux/auto_fs4.h +@@ -12,6 +12,7 @@ + #define _LINUX_AUTO_FS4_H + + /* Include common v3 definitions */ ++#include + #include + + /* autofs v4 definitions */ +@@ -23,7 +24,7 @@ + #define AUTOFS_MIN_PROTO_VERSION 3 + #define AUTOFS_MAX_PROTO_VERSION 5 + +-#define AUTOFS_PROTO_SUBVERSION 1 ++#define AUTOFS_PROTO_SUBVERSION 2 + + /* Mask for expire behaviour */ + #define AUTOFS_EXP_IMMEDIATE 1 diff --git a/autofs.spec b/autofs.spec index 53bbf29..7d3eb8e 100644 --- a/autofs.spec +++ b/autofs.spec @@ -8,7 +8,7 @@ Summary: A tool for automatically mounting and unmounting filesystems Name: autofs Version: 5.0.7 -Release: 11%{?dist} +Release: 12%{?dist} Epoch: 1 License: GPLv2+ Group: System Environment/Daemons @@ -43,6 +43,17 @@ Patch27: autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.p Patch28: autofs-5.0.7-make-yellow-pages-support-optional.patch Patch29: autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch Patch30: autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch +Patch31: autofs-5.0.7-dont-fail-on-master-map-self-include.patch +Patch32: autofs-5.0.7-fix-wildcard-multi-map-regression.patch +Patch33: autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch +Patch34: autofs-5.0.7-depricate-nosymlink-pseudo-option.patch +Patch35: autofs-5.0.7-add-symlink-pseudo-option.patch +Patch36: autofs-5.0.7-update-kernel-include-files.patch +Patch37: autofs-5.0.7-fix-requires-in-spec-file.patch +Patch38: autofs-5.0.7-fix-libtirpc-build-option.patch +Patch39: autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch +Patch40: autofs-5.0.7-document-browse-option-in-man-page.patch +Patch41: autofs-5.0.7-fix-automounter-support-on-parisc.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %if %{with_systemd} BuildRequires: systemd-units @@ -96,7 +107,7 @@ inkludera nÀtfilsystem, CD-ROM, floppydiskar, och sÄ vidare. %setup -q echo %{version}-%{release} > .version %if %{with_systemd} - %define _unitdir %{?_unitdir:/lib/systemd/system} + %define unitdir %{?_unitdir:/lib/systemd/system} %define systemd_configure_arg --with-systemd %endif %patch1 -p1 @@ -129,16 +140,27 @@ echo %{version}-%{release} > .version %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 %build #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir} -%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move %{?systemd_configure_arg:} +%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc %{?systemd_configure_arg:} make initdir=%{_initrddir} DONTSTRIP=1 %install rm -rf $RPM_BUILD_ROOT %if %{with_systemd} -install -d -m 755 $RPM_BUILD_ROOT%{_unitdir} +install -d -m 755 $RPM_BUILD_ROOT%{unitdir} %else mkdir -p -m755 $RPM_BUILD_ROOT%{_initrddir} %endif @@ -148,14 +170,18 @@ mkdir -p -m755 $RPM_BUILD_ROOT%{_mandir}/{man5,man8} mkdir -p -m755 $RPM_BUILD_ROOT/etc/sysconfig mkdir -p -m755 $RPM_BUILD_ROOT/etc/auto.master.d -make install mandir=%{_mandir} initdir=%{_initrddir} systemddir=%{_unitdir} INSTALLROOT=$RPM_BUILD_ROOT +make install mandir=%{_mandir} initdir=%{_initrddir} systemddir=%{unitdir} INSTALLROOT=$RPM_BUILD_ROOT echo make -C redhat make -C redhat install -m 755 -d $RPM_BUILD_ROOT/misc %if %{with_systemd} -install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service +# Configure can get this wrong when the unit files appear under /lib and /usr/lib +find $RPM_BUILD_ROOT -type f -name autofs.service -exec rm -f {} \; +install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{unitdir}/autofs.service +%define init_file_name %{unitdir}/autofs.service %else install -m 755 redhat/autofs.init $RPM_BUILD_ROOT%{_initrddir}/autofs +%define init_file_name /etc/rc.d/init.d/autofs %endif install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs @@ -203,11 +229,7 @@ fi %files %defattr(-,root,root,-) %doc CREDITS INSTALL COPY* README* patches/* samples/ldap* samples/autofs.schema -%if %{with_systemd} -%{_unitdir}/autofs.service -%else -%{_initrddir}/autofs -%endif +%config %{init_file_name} %config(noreplace,missingok) /etc/auto.master %config(noreplace,missingok) /etc/auto.misc %config(noreplace,missingok) /etc/auto.net @@ -220,6 +242,19 @@ fi %dir /etc/auto.master.d %changelog +* Tue Mar 12 2013 Ian Kent - 1:5.0.7-12 +- dont fail on master map self include. +- fix wildcard multi map regression. +- fix file descriptor leak when reloading the daemon. +- depricate nosymlink pseudo option. +- add symlink pseudo option. +- update kernel include files. +- fix requires in spec file. +- fix libtirpc build option. +- fix systemd unidir in spec file. +- document browse option in man page. +- fix automounter support on parisc. + * Wed Feb 13 2013 Fedora Release Engineering - 1:5.0.7-11 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild