All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/20] Current patch queue
@ 2018-02-14  6:42 Ian Kent
  2018-02-14  6:42 ` [PATCH 01/20] autofs-5.1.4 - fix flag file permission Ian Kent
                   ` (19 more replies)
  0 siblings, 20 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:42 UTC (permalink / raw)
  To: autofs mailing list

Here are the patches I currently have in my queue.
I hope to commit them by the end of the week if possible.

Comments welcome.

---

Ian Kent (17):
      autofs-5.1.4 - fix flag file permission
      autofs-5.1.4 - fix directory create permission
      autofs-5.1.4 - fix use after free in do_master_list_reset()
      autofs-5.1.4 - fix deadlock in dumpmaps
      autofs-5.1.4 - dont use array for path when not necessary
      autofs-5.1.4 - fix prefix option handling in expand_entry()
      autofs-5.1.4 - fix sublink option not set from defaults
      autofs-5.1.4 - fix error return in do_nfs_mount()
      autofs-5.1.4 - add error handling for ext_mount_add()
      autofs-5.1.4 - account for recent libnsl changes
      autofs-5.1.4 - dont allow trailing slash in master map mount points
      autofs-5.1.4 - fix libresolv configure check
      autofs-5.1.4 - add fedfs-getsrvinfo.c
      autofs-5.1.4 - add mount.fedfs.c
      autofs-5.1.4 - add fedfs-map-nfs4.c
      autofs-5.1.4 - add conditional inclusion of fedfs binaries
      autofs-5.1.4 - add an example fedfs master map entry to the installed master map

NeilBrown (3):
      autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas
      autofs-5.1.4 - fix monotonic_elapsed
      autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS


 CHANGELOG                |   22 ++
 Makefile                 |    3 
 Makefile.conf.in         |    6 -
 Makefile.rules           |    8 -
 aclocal.m4               |   45 ++++
 autofs.spec              |   20 ++
 configure                |  345 +++++++++++++++++++++++++++++++--
 configure.in             |   40 ++--
 daemon/automount.c       |   10 +
 daemon/direct.c          |    4 
 daemon/flag.c            |    2 
 daemon/indirect.c        |    2 
 daemon/lookup.c          |    2 
 daemon/spawn.c           |    1 
 fedfs/Makefile           |   44 ++++
 fedfs/fedfs-getsrvinfo.c |  311 +++++++++++++++++++++++++++++
 fedfs/fedfs-getsrvinfo.h |   52 +++++
 fedfs/fedfs-gpl-boiler.h |   40 ++++
 fedfs/fedfs-map-nfs4.c   |  204 +++++++++++++++++++
 fedfs/fedfs-nls.h        |   38 ++++
 fedfs/fedfs-token.h      |   40 ++++
 fedfs/mount.fedfs.c      |  485 ++++++++++++++++++++++++++++++++++++++++++++++
 include/automount.h      |    1 
 include/config.h.in      |    3 
 include/replicated.h     |    3 
 lib/master_parse.y       |    5 
 lib/mounts.c             |    5 
 lib/rpc_subs.c           |    4 
 modules/Makefile         |   10 +
 modules/mount_bind.c     |    6 -
 modules/mount_changer.c  |    2 
 modules/mount_ext2.c     |    2 
 modules/mount_generic.c  |    2 
 modules/mount_nfs.c      |    4 
 modules/parse_amd.c      |   75 ++++++-
 modules/replicated.c     |   35 ++-
 samples/auto.master      |    6 +
 37 files changed, 1792 insertions(+), 95 deletions(-)
 create mode 100644 fedfs/Makefile
 create mode 100644 fedfs/fedfs-getsrvinfo.c
 create mode 100644 fedfs/fedfs-getsrvinfo.h
 create mode 100644 fedfs/fedfs-gpl-boiler.h
 create mode 100644 fedfs/fedfs-map-nfs4.c
 create mode 100644 fedfs/fedfs-nls.h
 create mode 100644 fedfs/fedfs-token.h
 create mode 100644 fedfs/mount.fedfs.c

--
Ian
--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 01/20] autofs-5.1.4 - fix flag file permission
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
@ 2018-02-14  6:42 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 02/20] autofs-5.1.4 - fix directory create permission Ian Kent
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:42 UTC (permalink / raw)
  To: autofs mailing list

The flag file used to check if automount(8) is running was being
created with mode 0 which caused unnecessary dac_override AVC
failures.

There's no reason to protect this file so just use 0644 as the
file permission.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG     |    3 +++
 daemon/flag.c |    2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index 246279ae..d07d88ce 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+xx/xx/2018 autofs-5.1.5
+- fix flag file permission.
+
 19/12/2017 autofs-5.1.4
 - fix spec file url.
 - fix unset tsd group name handling.
diff --git a/daemon/flag.c b/daemon/flag.c
index 99f26847..ff9858c8 100644
--- a/daemon/flag.c
+++ b/daemon/flag.c
@@ -164,7 +164,7 @@ int aquire_flag_file(void)
 	while (!we_created_flagfile) {
 		int errsv, i, j;
 
-		i = open_fd_mode(linkf, O_WRONLY|O_CREAT, 0);
+		i = open_fd_mode(linkf, O_WRONLY|O_CREAT, 0644);
 		if (i < 0) {
 			release_flag_file();
 			return 0;

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 02/20] autofs-5.1.4 - fix directory create permission
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
  2018-02-14  6:42 ` [PATCH 01/20] autofs-5.1.4 - fix flag file permission Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 03/20] autofs-5.1.4 - fix use after free in do_master_list_reset() Ian Kent
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

autofs mount point directory creation is done using a permission of
0555.

But it is necessary to create directories within autofs mount points
for some map entry types so write access should be set for the owner
on mount point directories.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG               |    1 +
 daemon/automount.c      |    2 ++
 daemon/direct.c         |    4 ++--
 daemon/indirect.c       |    2 +-
 daemon/lookup.c         |    2 +-
 include/automount.h     |    1 +
 modules/mount_bind.c    |    6 +++---
 modules/mount_changer.c |    2 +-
 modules/mount_ext2.c    |    2 +-
 modules/mount_generic.c |    2 +-
 modules/mount_nfs.c     |    2 +-
 modules/parse_amd.c     |    2 +-
 12 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d07d88ce..4faab510 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 xx/xx/2018 autofs-5.1.5
 - fix flag file permission.
+- fix directory create permission.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/daemon/automount.c b/daemon/automount.c
index 5c739617..dcdc19fb 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -51,6 +51,8 @@ const char *libdir = AUTOFS_LIB_DIR;	/* Location of library modules */
 const char *mapdir = AUTOFS_MAP_DIR;	/* Location of mount maps */
 const char *confdir = AUTOFS_CONF_DIR;	/* Location of autofs config file */
 
+unsigned int mp_mode = 0755;
+
 unsigned int nfs_mount_uses_string_options = 0;
 static struct nfs_mount_vers vers, check = {1, 1, 1};
 
diff --git a/daemon/direct.c b/daemon/direct.c
index 9a134351..3fdecdb8 100644
--- a/daemon/direct.c
+++ b/daemon/direct.c
@@ -424,7 +424,7 @@ int do_mount_autofs_direct(struct autofs_point *ap,
 	}
 
 	/* In case the directory doesn't exist, try to mkdir it */
-	if (mkdir_path(me->key, 0555) < 0) {
+	if (mkdir_path(me->key, mp_mode) < 0) {
 		if (errno != EEXIST && errno != EROFS) {
 			crit(ap->logopt,
 			     "failed to create mount directory %s", me->key);
@@ -739,7 +739,7 @@ int mount_autofs_offset(struct autofs_point *ap, struct mapent *me, const char *
 	strcat(mountpoint, offset);
 
 	/* In case the directory doesn't exist, try to mkdir it */
-	if (mkdir_path(mountpoint, 0555) < 0) {
+	if (mkdir_path(mountpoint, mp_mode) < 0) {
 		if (errno == EEXIST) {
 			/*
 			 * If the mount point directory is a real mount
diff --git a/daemon/indirect.c b/daemon/indirect.c
index ffb11b8c..03c081ed 100644
--- a/daemon/indirect.c
+++ b/daemon/indirect.c
@@ -133,7 +133,7 @@ static int do_mount_autofs_indirect(struct autofs_point *ap, const char *root)
 	}
 
 	/* In case the directory doesn't exist, try to mkdir it */
-	if (mkdir_path(root, 0555) < 0) {
+	if (mkdir_path(root, mp_mode) < 0) {
 		if (errno != EEXIST && errno != EROFS) {
 			crit(ap->logopt,
 			     "failed to create autofs directory %s",
diff --git a/daemon/lookup.c b/daemon/lookup.c
index cb67e7d9..6a722b3b 100644
--- a/daemon/lookup.c
+++ b/daemon/lookup.c
@@ -802,7 +802,7 @@ int lookup_ghost(struct autofs_point *ap, const char *root)
 				goto next;
 			}
 
-			ret = mkdir_path(fullpath, 0555);
+			ret = mkdir_path(fullpath, mp_mode);
 			if (ret < 0 && errno != EEXIST) {
 				char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 				warn(ap->logopt,
diff --git a/include/automount.h b/include/automount.h
index 2e2c2b02..e5c19d23 100644
--- a/include/automount.h
+++ b/include/automount.h
@@ -269,6 +269,7 @@ void reset_signals(void);
 int do_mount(struct autofs_point *ap, const char *root, const char *name,
 	     int name_len, const char *what, const char *fstype,
 	     const char *options);
+extern unsigned int mp_mode;
 int mkdir_path(const char *path, mode_t mode);
 int rmdir_path(struct autofs_point *ap, const char *path, dev_t dev);
 
diff --git a/modules/mount_bind.c b/modules/mount_bind.c
index 4864ea51..5effa880 100644
--- a/modules/mount_bind.c
+++ b/modules/mount_bind.c
@@ -151,7 +151,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 
 		debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
 
-		status = mkdir_path(fullpath, 0555);
+		status = mkdir_path(fullpath, mp_mode);
 		if (status && errno != EEXIST) {
 			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 			error(ap->logopt,
@@ -203,7 +203,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 		} else {
 			debug(ap->logopt,
 			      MODPREFIX "calling mkdir_path %s", basepath);
-			if (mkdir_path(basepath, 0555) && errno != EEXIST) {
+			if (mkdir_path(basepath, mp_mode) && errno != EEXIST) {
 				char *estr;
 				estr = strerror_r(errno, buf, MAX_ERR_BUF);
 				error(ap->logopt,
@@ -219,7 +219,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 			      "failed to create symlink %s -> %s",
 			      fullpath, what);
 			if ((ap->flags & MOUNT_FLAG_GHOST) && !status) {
-				if (mkdir_path(fullpath, 0555) && errno != EEXIST) {
+				if (mkdir_path(fullpath, mp_mode) && errno != EEXIST) {
 					char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 					error(ap->logopt,
 					      MODPREFIX "mkdir_path %s failed: %s",
diff --git a/modules/mount_changer.c b/modules/mount_changer.c
index 798f23b2..7d44a720 100644
--- a/modules/mount_changer.c
+++ b/modules/mount_changer.c
@@ -87,7 +87,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 
 	debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
 
-	status = mkdir_path(fullpath, 0555);
+	status = mkdir_path(fullpath, mp_mode);
 	if (status && errno != EEXIST) {
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 		error(ap->logopt,
diff --git a/modules/mount_ext2.c b/modules/mount_ext2.c
index 90fc0876..3bbea95a 100644
--- a/modules/mount_ext2.c
+++ b/modules/mount_ext2.c
@@ -69,7 +69,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 
 	debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
 
-	status = mkdir_path(fullpath, 0555);
+	status = mkdir_path(fullpath, mp_mode);
 	if (status && errno != EEXIST) {
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 		error(ap->logopt,
diff --git a/modules/mount_generic.c b/modules/mount_generic.c
index ae637875..b1a3adbf 100644
--- a/modules/mount_generic.c
+++ b/modules/mount_generic.c
@@ -68,7 +68,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 
 	debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
 
-	status = mkdir_path(fullpath, 0555);
+	status = mkdir_path(fullpath, mp_mode);
 	if (status && errno != EEXIST) {
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 		error(ap->logopt,
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
index bf712a93..77166544 100644
--- a/modules/mount_nfs.c
+++ b/modules/mount_nfs.c
@@ -277,7 +277,7 @@ dont_probe:
 
 	debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
 
-	status = mkdir_path(fullpath, 0555);
+	status = mkdir_path(fullpath, mp_mode);
 	if (status && errno != EEXIST) {
 		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
 		error(ap->logopt,
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index b40c1ad1..c4b3ef0b 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -1288,7 +1288,7 @@ static int do_program_mount(struct autofs_point *ap,
 		rv = 0;
 		ext_mount_add(&entry->ext_mount, entry->fs, 1);
 	} else {
-		rv = mkdir_path(entry->fs, 0555);
+		rv = mkdir_path(entry->fs, mp_mode);
 		if (rv && errno != EEXIST) {
 			char buf[MAX_ERR_BUF];
 			char *estr;

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 03/20] autofs-5.1.4 - fix use after free in do_master_list_reset()
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
  2018-02-14  6:42 ` [PATCH 01/20] autofs-5.1.4 - fix flag file permission Ian Kent
  2018-02-14  6:43 ` [PATCH 02/20] autofs-5.1.4 - fix directory create permission Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 04/20] autofs-5.1.4 - fix deadlock in dumpmaps Ian Kent
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

Umm ... list_for_each() can't be used in do_master_list_reset() because
the subject entry of the loop is removed for the list within the loop
body. Therefore it can't be used to calculate the next pointer within a
for (...) loop.

There is no list_for_each_safe() macro in the list.h of autofs so it
needs to be done manually.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG          |    1 +
 daemon/automount.c |    8 ++++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 4faab510..2747327b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 xx/xx/2018 autofs-5.1.5
 - fix flag file permission.
 - fix directory create permission.
+- fix use after free in do_master_list_reset().
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/daemon/automount.c b/daemon/automount.c
index dcdc19fb..28b3f2f5 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -2070,14 +2070,18 @@ static void remove_empty_args(char **argv, int *argc)
 
 static void do_master_list_reset(struct master *master)
 {
-	struct list_head *head, *p;
+	struct list_head *head, *p, *n;
 
 	master_mutex_lock();
 
 	head = &master->mounts;
-	list_for_each(p, head) {
+	n = head->next;
+	while (n != head) {
 		struct master_mapent *entry;
 
+		p = n;
+		n = p->next;
+
 		entry = list_entry(p, struct master_mapent, list);
 
 		if (!list_empty(&entry->list))

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 04/20] autofs-5.1.4 - fix deadlock in dumpmaps
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (2 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 03/20] autofs-5.1.4 - fix use after free in do_master_list_reset() Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 05/20] autofs-5.1.4 - dont use array for path when not necessary Ian Kent
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

Commit a223d11fa8e (autofs-5.1.3 - serialize calls to open_xxxx()
functions) introduces a deadlock when using the dumpmaps function.

In this case the open fd mutex needs to be unlocked in the forked
child process of the do_spawn() function.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG      |    1 +
 daemon/spawn.c |    1 +
 2 files changed, 2 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 2747327b..0f30596f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ xx/xx/2018 autofs-5.1.5
 - fix flag file permission.
 - fix directory create permission.
 - fix use after free in do_master_list_reset().
+- fix deadlock in dumpmaps.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/daemon/spawn.c b/daemon/spawn.c
index fabe577e..dbbca7fa 100644
--- a/daemon/spawn.c
+++ b/daemon/spawn.c
@@ -338,6 +338,7 @@ static int do_spawn(unsigned logopt, unsigned int wait,
 		dup2(pipefd[1], STDOUT_FILENO);
 		dup2(pipefd[1], STDERR_FILENO);
 		close(pipefd[1]);
+		open_mutex_unlock();
 
 		/* what to mount must always be second last */
 		while (*pargv++)

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 05/20] autofs-5.1.4 - dont use array for path when not necessary
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (3 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 04/20] autofs-5.1.4 - fix deadlock in dumpmaps Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 06/20] autofs-5.1.4 - fix prefix option handling in expand_entry() Ian Kent
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

In parse_amd.c:do_link_mount() a character array is used to construct
a path when a pointer to the relevant amd entry field is sufficient.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG           |    1 +
 modules/parse_amd.c |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 0f30596f..13f01397 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -3,6 +3,7 @@ xx/xx/2018 autofs-5.1.5
 - fix directory create permission.
 - fix use after free in do_master_list_reset().
 - fix deadlock in dumpmaps.
+- dont use array for path when not necessary.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index c4b3ef0b..2cce5417 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -967,8 +967,8 @@ static int do_auto_mount(struct autofs_point *ap, const char *name,
 static int do_link_mount(struct autofs_point *ap, const char *name,
 			 struct amd_entry *entry, unsigned int flags)
 {
-	char target[PATH_MAX + 1];
 	const char *opts = (entry->opts && *entry->opts) ? entry->opts : NULL;
+	char *target;
 	int ret;
 
 	if (entry->sublink) {
@@ -977,14 +977,14 @@ static int do_link_mount(struct autofs_point *ap, const char *name,
 			     "error: sublink option length is too long");
 			return 0;
 		}
-		strcpy(target, entry->sublink);
+		target = entry->sublink;
 	} else {
 		if (strlen(entry->fs) > PATH_MAX) {
 			error(ap->logopt, MODPREFIX
 			     "error: fs option length is too long");
 			return 0;
 		}
-		strcpy(target, entry->fs);
+		target = entry->fs;
 	}
 
 	if (!(flags & CONF_AUTOFS_USE_LOFS))

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 06/20] autofs-5.1.4 - fix prefix option handling in expand_entry()
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (4 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 05/20] autofs-5.1.4 - dont use array for path when not necessary Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 07/20] autofs-5.1.4 - fix sublink option not set from defaults Ian Kent
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

The changes to fix the defaults handling in the amd map parser caused
the prefix option to not be expanded and also to not be propagated to
submounts in some cases.

But the prefix should be expanded in modules/parse_amd.c:expand_entry()
along with the reset of the amd map entry fields.

Just adding this to modules/parse_amd.c:expand_entry() (where it should
be) fixes the amd map entry expansion and also fixes the propagation
of the prefix to submounts.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG           |    1 +
 modules/parse_amd.c |   11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 13f01397..19aec2ae 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@ xx/xx/2018 autofs-5.1.5
 - fix use after free in do_master_list_reset().
 - fix deadlock in dumpmaps.
 - dont use array for path when not necessary.
+- fix prefix option handling in expand_entry().
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index 2cce5417..1a5a2960 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -725,6 +725,17 @@ static struct substvar *expand_entry(struct autofs_point *ap,
 		entry->rhost = host;
 	}
 next:
+	if (entry->pref) {
+		if (expand_selectors(ap, entry->pref, &expand, sv)) {
+			debug(logopt, MODPREFIX
+			      "pref expand(\"%s\") -> %s",
+			      entry->pref, expand);
+			free(entry->pref);
+			entry->pref = expand;
+		}
+		sv = macro_addvar(sv, "pref", 4, entry->pref);
+	}
+
 	if (entry->sublink) {
 		if (expand_selectors(ap, entry->sublink, &expand, sv)) {
 			debug(logopt, MODPREFIX

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 07/20] autofs-5.1.4 - fix sublink option not set from defaults
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (5 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 06/20] autofs-5.1.4 - fix prefix option handling in expand_entry() Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 08/20] autofs-5.1.4 - fix error return in do_nfs_mount() Ian Kent
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

If the amd entry sublink option is given in a defaults entry
it isn't merged into the current entry during parsing.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG           |    1 +
 modules/parse_amd.c |   12 ++++++++++++
 2 files changed, 13 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 19aec2ae..756ef927 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ xx/xx/2018 autofs-5.1.5
 - fix deadlock in dumpmaps.
 - dont use array for path when not necessary.
 - fix prefix option handling in expand_entry().
+- fix sublink option not set from defaults.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index 1a5a2960..1c962fff 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -645,6 +645,18 @@ static void update_with_defaults(struct amd_entry *defaults,
 		}
 	}
 
+	if (!entry->sublink) {
+		if (defaults->sublink) {
+			tmp = strdup(defaults->sublink);
+			if (tmp)
+				entry->sublink = tmp;
+		} else {
+			v = macro_findvar(sv, "sublink", 2);
+			if (v)
+				entry->sublink = strdup(v->val);
+		}
+	}
+
 	return;
 }
 

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 08/20] autofs-5.1.4 - fix error return in do_nfs_mount()
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (6 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 07/20] autofs-5.1.4 - fix sublink option not set from defaults Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 09/20] autofs-5.1.4 - add error handling for ext_mount_add() Ian Kent
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

Fix incorrect error return in modules/parse_amd.c:do_nfs_mount().
---
 CHANGELOG           |    1 +
 modules/parse_amd.c |    2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index 756ef927..d0cfa19b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@ xx/xx/2018 autofs-5.1.5
 - dont use array for path when not necessary.
 - fix prefix option handling in expand_entry().
 - fix sublink option not set from defaults.
+- fix error return in do_nfs_mount().
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index 1c962fff..2a5d9a30 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -1099,7 +1099,7 @@ static int do_nfs_mount(struct autofs_point *ap, const char *name,
 	if (strlen(entry->rhost) + strlen(entry->rfs) + 1 > PATH_MAX) {
 		error(ap->logopt, MODPREFIX
 		     "error: rhost + rfs options length is too long");
-		return 0;
+		return 1;
 	}
 
 	strcpy(target, entry->rhost);

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 09/20] autofs-5.1.4 - add error handling for ext_mount_add()
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (7 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 08/20] autofs-5.1.4 - fix error return in do_nfs_mount() Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 10/20] autofs-5.1.4 - account for recent libnsl changes Ian Kent
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

Add error handling (memory allocation failures) for ext_mount_add().

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG           |    1 +
 lib/mounts.c        |    5 +----
 modules/parse_amd.c |   42 ++++++++++++++++++++++++++++++------------
 3 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d0cfa19b..9d19c0a7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,7 @@ xx/xx/2018 autofs-5.1.5
 - fix prefix option handling in expand_entry().
 - fix sublink option not set from defaults.
 - fix error return in do_nfs_mount().
+- add error handling for ext_mount_add().
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/lib/mounts.c b/lib/mounts.c
index 6fa304aa..f46fab2b 100644
--- a/lib/mounts.c
+++ b/lib/mounts.c
@@ -715,15 +715,12 @@ int ext_mount_add(struct list_head *entry, const char *path, unsigned int umount
 	}
 
 	em = malloc(sizeof(struct ext_mount));
-	if (!em) {
-		ret = -1;
+	if (!em)
 		goto done;
-	}
 
 	em->mountpoint = strdup(path);
 	if (!em->mountpoint) {
 		free(em);
-		ret = -1;
 		goto done;
 	}
 	em->umount = umount;
diff --git a/modules/parse_amd.c b/modules/parse_amd.c
index 2a5d9a30..e7debc56 100644
--- a/modules/parse_amd.c
+++ b/modules/parse_amd.c
@@ -1080,7 +1080,14 @@ static int do_generic_mount(struct autofs_point *ap, const char *name,
 			umount = 1;
 		}
 		/* We have an external mount */
-		ext_mount_add(&entry->ext_mount, entry->fs, umount);
+		if (!ext_mount_add(&entry->ext_mount, entry->fs, umount)) {
+			umount_ent(ap, entry->fs);
+			error(ap->logopt, MODPREFIX
+			      "error: could not add external mount %s",
+			      entry->fs);
+			ret = 1;
+			goto out;
+		}
 		ret = do_link_mount(ap, name, entry, flags);
 	}
 out:
@@ -1124,7 +1131,13 @@ static int do_nfs_mount(struct autofs_point *ap, const char *name,
 			umount = 1;
 		}
 		/* We might be using an external mount */
-		ext_mount_add(&entry->ext_mount, entry->fs, umount);
+		if (!ext_mount_add(&entry->ext_mount, entry->fs, umount)) {
+			umount_ent(ap, entry->fs);
+			error(ap->logopt, MODPREFIX
+			      "error: could not add external mount %s", entry->fs);
+			ret = 1;
+			goto out;
+		}
 		ret = do_link_mount(ap, name, entry, flags);
 	}
 out:
@@ -1309,6 +1322,9 @@ static int do_program_mount(struct autofs_point *ap,
 	 */
 	if (ext_mount_inuse(entry->fs)) {
 		rv = 0;
+		/* An external mount with path entry->fs exists
+		 * so ext_mount_add() won't fail.
+		 */
 		ext_mount_add(&entry->ext_mount, entry->fs, 1);
 	} else {
 		rv = mkdir_path(entry->fs, mp_mode);
@@ -1325,17 +1341,19 @@ static int do_program_mount(struct autofs_point *ap,
 
 		rv = spawnv(ap->logopt, prog, (const char * const *) argv);
 		if (WIFEXITED(rv) && !WEXITSTATUS(rv)) {
-			rv = 0;
-			ext_mount_add(&entry->ext_mount, entry->fs, 1);
-			debug(ap->logopt, MODPREFIX
-			      "%s: mounted %s", entry->type, entry->fs);
-		} else {
-			if (!ext_mount_inuse(entry->fs))
-				rmdir_path(ap, entry->fs, ap->dev);
-			error(ap->logopt, MODPREFIX
-			     "%s: failed to mount using: %s",
-			     entry->type, entry->mount);
+			if (ext_mount_add(&entry->ext_mount, entry->fs, 1)) {
+				rv = 0;
+				debug(ap->logopt, MODPREFIX
+				     "%s: mounted %s", entry->type, entry->fs);
+				goto do_free;
+			}
+			umount_ent(ap, entry->fs);
 		}
+
+		if (!ext_mount_inuse(entry->fs))
+			rmdir_path(ap, entry->fs, ap->dev);
+		error(ap->logopt, MODPREFIX
+		   "%s: failed to mount using %s", entry->type, entry->mount);
 	}
 do_free:
 	free_argv(argc, (const char **) argv);

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 10/20] autofs-5.1.4 - account for recent libnsl changes
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (8 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 09/20] autofs-5.1.4 - add error handling for ext_mount_add() Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 11/20] autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas Ian Kent
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

The glibc RPC code has been dropped.

The NIS functionality comes in the libnsl library but it installs
its files into sub directories of the system include and library
directories.

So configure needs to check for this and allow for it in the
compile and linking of the NIS and NIS+ lookup modules.
---
 CHANGELOG           |    1 
 Makefile.conf.in    |    4 -
 Makefile.rules      |    2 
 aclocal.m4          |   45 ++++++++
 configure           |  288 ++++++++++++++++++++++++++++++++++++++++++++++++---
 configure.in        |   27 ++---
 include/config.h.in |    3 +
 modules/Makefile    |   10 ++
 8 files changed, 343 insertions(+), 37 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 9d19c0a7..2d5d5b1f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,7 @@ xx/xx/2018 autofs-5.1.5
 - fix sublink option not set from defaults.
 - fix error return in do_nfs_mount().
 - add error handling for ext_mount_add().
+- account for recent libnsl changes.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/Makefile.conf.in b/Makefile.conf.in
index f879e262..85662654 100644
--- a/Makefile.conf.in
+++ b/Makefile.conf.in
@@ -14,8 +14,8 @@ DAEMON_LDFLAGS = @DAEMON_LDFLAGS@
 # Glibc < 2.17 requires librt for clock_gettime()
 LIBCLOCK_GETTIME = @LIBCLOCK_GETTIME@
 
-# Special parameters for glibc (libc 6)
-LIBNSL    = @LIBNSL@
+NSLLIB    = @NSL_LIBS@
+NSLCFLAGS = @NSL_CFLAGS@
 LIBRESOLV = @LIBRESOLV@
 
 # Hesiod support: yes (1) no (0)
diff --git a/Makefile.rules b/Makefile.rules
index 0edf9bfe..2bfa043c 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -54,8 +54,6 @@ ifdef DMALLOCLIB
 LIBS += $(DMALLOCLIB)
 endif
 
-LIBS += $(LIBNSL)
-
 LIBS += $(LIBCLOCK_GETTIME)
 
 # Standard rules
diff --git a/aclocal.m4 b/aclocal.m4
index 51772043..f1ed3870 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -417,3 +417,48 @@ fi
 LIBS="$af_check_ldap_parse_page_control_save_libs"
 ])
 
+dnl --------------------------------------------------------------------------
+dnl AF_CHECK_YPCLNT_HEADER
+dnl
+dnl Check for include file rpcsvc/ypclnt.h for YellowPages support.
+dnl --------------------------------------------------------------------------
+AC_DEFUN([AF_CHECK_YPCLNT_HEADER],
+[
+# save current CFLAGS
+af_check_ypclnt_header_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $NSL_CFLAGS $TIRPC_CFLAGS"
+
+HAVE_YPCLNT=0
+AC_CHECK_HEADER([rpcsvc/ypclnt.h], HAVE_YPCLNT=1)
+AC_SUBST(HAVE_YPCLNT)
+if test "$HAVE_YPCLNT" = "1"; then
+	AC_DEFINE(HAVE_YPCLNT, 1,
+		[Define if using YellowPages])
+fi
+
+# restore libs
+CFLAGS="$af_check_ypclnt_header_save_cflags"
+])
+
+dnl --------------------------------------------------------------------------
+dnl AF_CHECK_NIS_HEADER
+dnl
+dnl Check for include file rpcsvc/nis.h for NIS+ support.
+dnl --------------------------------------------------------------------------
+AC_DEFUN([AF_CHECK_NIS_HEADER],
+[
+# save current CFLAGS
+af_check_nis_header_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $NSL_CFLAGS $TIRPC_CFLAGS"
+
+HAVE_NISPLUS=0
+AC_CHECK_HEADER([rpcsvc/nis.h], HAVE_NISPLUS=1)
+AC_SUBST(HAVE_NISPLUS)
+if test "$HAVE_NISPLUS" = "1"; then
+	AC_DEFINE(HAVE_NISPLUS, 1,
+		[Define if using NIS+])
+fi
+
+# restore libs
+CFLAGS="$af_check_nis_header_save_cflags"
+])
diff --git a/configure b/configure
index 476cea4b..2d517aac 100755
--- a/configure
+++ b/configure
@@ -634,8 +634,8 @@ XML_FLAGS
 LIBLDAP
 HAVE_LDAP
 LDAP_FLAGS
-HAVE_YPCLNT
 HAVE_NISPLUS
+HAVE_YPCLNT
 EGREP
 GREP
 CPP
@@ -643,7 +643,8 @@ HESIOD_FLAGS
 LIBHESIOD
 HAVE_HESIOD
 LIBRESOLV
-LIBNSL
+NSL_LIBS
+NSL_CFLAGS
 LIBCLOCK_GETTIME
 KRB5_CONFIG
 XML_CONFIG
@@ -764,6 +765,8 @@ CFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
+NSL_CFLAGS
+NSL_LIBS
 CPP'
 
 
@@ -1417,6 +1420,8 @@ Some influential environment variables:
   LIBS        libraries to pass to the linker, e.g. -l<library>
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
+  NSL_CFLAGS  C compiler flags for NSL, overriding pkg-config
+  NSL_LIBS    linker flags for NSL, overriding pkg-config
   CPP         C preprocessor
 
 Use these variables to override the choices made by `configure' or to help
@@ -4500,9 +4505,186 @@ fi
 
 
 
-#
-# glibc/libc 6 new libraries
-#
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSL" >&5
+$as_echo_n "checking for NSL... " >&6; }
+
+if test -n "$NSL_CFLAGS"; then
+    pkg_cv_NSL_CFLAGS="$NSL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnsl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnsl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NSL_CFLAGS=`$PKG_CONFIG --cflags "libnsl" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$NSL_LIBS"; then
+    pkg_cv_NSL_LIBS="$NSL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnsl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnsl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NSL_LIBS=`$PKG_CONFIG --libs "libnsl" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        NSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnsl" 2>&1`
+        else
+	        NSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnsl" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$NSL_PKG_ERRORS" >&5
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yp_match in -lnsl" >&5
 $as_echo_n "checking for yp_match in -lnsl... " >&6; }
 if ${ac_cv_lib_nsl_yp_match+:} false; then :
@@ -4540,10 +4722,66 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_yp_match" >&5
 $as_echo "$ac_cv_lib_nsl_yp_match" >&6; }
 if test "x$ac_cv_lib_nsl_yp_match" = xyes; then :
-  LIBNSL="-lnsl"
+  NSL_LIBS="-lnsl"
 fi
 
 
+NSL_CFLAGS=""
+
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for yp_match in -lnsl" >&5
+$as_echo_n "checking for yp_match in -lnsl... " >&6; }
+if ${ac_cv_lib_nsl_yp_match+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char yp_match ();
+int
+main ()
+{
+return yp_match ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_yp_match=yes
+else
+  ac_cv_lib_nsl_yp_match=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_yp_match" >&5
+$as_echo "$ac_cv_lib_nsl_yp_match" >&6; }
+if test "x$ac_cv_lib_nsl_yp_match" = xyes; then :
+  NSL_LIBS="-lnsl"
+fi
+
+
+NSL_CFLAGS=""
+
+else
+	NSL_CFLAGS=$pkg_cv_NSL_CFLAGS
+	NSL_LIBS=$pkg_cv_NSL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_query in -lresolv" >&5
 $as_echo_n "checking for res_query in -lresolv... " >&6; }
@@ -4659,8 +4897,6 @@ fi
 
 LDFLAGS="${AF_tmp_ldflags}"
 
-# NIS+ support?
-HAVE_NISPLUS=0
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5058,15 +5294,11 @@ fi
 done
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "rpcsvc/nis.h" "ac_cv_header_rpcsvc_nis_h" "$ac_includes_default"
-if test "x$ac_cv_header_rpcsvc_nis_h" = xyes; then :
-  HAVE_NISPLUS=1
-fi
-
 
+# save current CFLAGS
+af_check_ypclnt_header_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $NSL_CFLAGS $TIRPC_CFLAGS"
 
-
-# YellowPages support?
 HAVE_YPCLNT=0
 ac_fn_c_check_header_mongrel "$LINENO" "rpcsvc/ypclnt.h" "ac_cv_header_rpcsvc_ypclnt_h" "$ac_includes_default"
 if test "x$ac_cv_header_rpcsvc_ypclnt_h" = xyes; then :
@@ -5081,6 +5313,32 @@ $as_echo "#define HAVE_YPCLNT 1" >>confdefs.h
 
 fi
 
+# restore libs
+CFLAGS="$af_check_ypclnt_header_save_cflags"
+
+
+# save current CFLAGS
+af_check_nis_header_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $NSL_CFLAGS $TIRPC_CFLAGS"
+
+HAVE_NISPLUS=0
+ac_fn_c_check_header_mongrel "$LINENO" "rpcsvc/nis.h" "ac_cv_header_rpcsvc_nis_h" "$ac_includes_default"
+if test "x$ac_cv_header_rpcsvc_nis_h" = xyes; then :
+  HAVE_NISPLUS=1
+fi
+
+
+
+if test "$HAVE_NISPLUS" = "1"; then
+
+$as_echo "#define HAVE_NISPLUS 1" >>confdefs.h
+
+fi
+
+# restore libs
+CFLAGS="$af_check_nis_header_save_cflags"
+
+
 #
 # OpenLDAP support?  Expect that this may have a special directory...
 #
diff --git a/configure.in b/configure.in
index d3660923..d74775cc 100644
--- a/configure.in
+++ b/configure.in
@@ -209,11 +209,13 @@ fi
 AC_CHECK_LIB(rt, clock_gettime, LIBCLOCK_GETTIME="-lrt")
 AC_SUBST(LIBCLOCK_GETTIME)
 
-#
-# glibc/libc 6 new libraries
-#
-AC_CHECK_LIB(nsl, yp_match, LIBNSL="-lnsl")
-AC_SUBST(LIBNSL)
+PKG_PROG_PKG_CONFIG()
+PKG_CHECK_MODULES([NSL],[libnsl],,
+[
+AC_CHECK_LIB(nsl, yp_match, NSL_LIBS="-lnsl")
+AC_SUBST(NSL_LIBS)
+NSL_CFLAGS=""
+])
 
 AC_CHECK_LIB(resolv, res_query, LIBRESOLV="-lresolv")
 AC_SUBST(LIBRESOLV)
@@ -254,19 +256,8 @@ AC_SUBST(LIBHESIOD)
 AC_SUBST(HESIOD_FLAGS)
 LDFLAGS="${AF_tmp_ldflags}"
 
-# NIS+ support?
-HAVE_NISPLUS=0
-AC_CHECK_HEADER(rpcsvc/nis.h, HAVE_NISPLUS=1)
-AC_SUBST(HAVE_NISPLUS)
-
-# YellowPages support?
-HAVE_YPCLNT=0
-AC_CHECK_HEADER([rpcsvc/ypclnt.h], HAVE_YPCLNT=1)
-AC_SUBST(HAVE_YPCLNT)
-if test "$HAVE_YPCLNT" = "1"; then
-	AC_DEFINE(HAVE_YPCLNT, 1,
-		[Define if using YellowPages])
-fi
+AF_CHECK_YPCLNT_HEADER()
+AF_CHECK_NIS_HEADER()
 
 #
 # OpenLDAP support?  Expect that this may have a special directory...
diff --git a/include/config.h.in b/include/config.h.in
index 04873e8f..991a2bda 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -57,6 +57,9 @@
 /* define if you have MOUNT_NFS */
 #undef HAVE_MOUNT_NFS
 
+/* Define if using NIS+ */
+#undef HAVE_NISPLUS
+
 /* define if the umount command supports the -c option */
 #undef HAVE_NO_CANON_UMOUNT
 
diff --git a/modules/Makefile b/modules/Makefile
index d9ab06c5..0447559a 100644
--- a/modules/Makefile
+++ b/modules/Makefile
@@ -116,6 +116,16 @@ parse_amd.so: parse_amd.c amd_parse.tab.o amd_tok.o
 #
 # Ad hoc compilation rules for modules which need auxilliary libraries
 #
+lookup_yp.so: lookup_yp.c
+	$(CC) $(SOLDFLAGS) $(CFLAGS) $(NSLCFLAGS) -o lookup_yp.so \
+		lookup_yp.c $(LDFLAGS) $(AUTOFS_LIB) $(LIBS) $(NSLLIB)
+	$(STRIP) lookup_yp.so
+
+lookup_nisplus.so: lookup_nisplus.c
+	$(CC) $(SOLDFLAGS) $(CFLAGS) $(NSLCFLAGS) -o lookup_nisplus.so \
+		lookup_nisplus.c $(LDFLAGS) $(AUTOFS_LIB) $(LIBS) $(NSLLIB)
+	$(STRIP) lookup_nisplus.so
+
 lookup_hesiod.so: lookup_hesiod.c
 	$(CC) $(SOLDFLAGS) $(CFLAGS) $(HESIOD_FLAGS) -o lookup_hesiod.so \
 		lookup_hesiod.c $(LDFLAGS) $(AUTOFS_LIB) $(LIBHESIOD) $(LIBRESOLV) $(LIBS)

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 11/20] autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (9 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 10/20] autofs-5.1.4 - account for recent libnsl changes Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:43 ` [PATCH 12/20] autofs-5.1.4 - fix monotonic_elapsed Ian Kent
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

From: NeilBrown <neilb@suse.com>

If several replicas have been specified for a mount point,
and use_hostname_for_mount is set to "yes", the selection
between these replicas is currently disabled and the last in
the list is always chosen.

There is little point selecting between different addresses
for the one host in this case, but it is still worth
selecting between different hosts, particularly if different
weights have been specified.

This patch restores the "prune_host_list()" functionality
when use_hostname_for_mount is set, and modifies it slightly
so that only on IP address for any host:/path entry in the
config file is willl be successfully probed.  After a
success, further addresses from the same entry are skipped.
This is achieved by tracking an entry number ("ent_num") for
each 'struct host'.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG            |    1 +
 include/replicated.h |    3 ++-
 modules/mount_nfs.c  |    2 +-
 modules/replicated.c |   35 ++++++++++++++++++++---------------
 4 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 2d5d5b1f..104fca90 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,7 @@ xx/xx/2018 autofs-5.1.5
 - fix error return in do_nfs_mount().
 - add error handling for ext_mount_add().
 - account for recent libnsl changes.
+- use_hostname_for_mounts shouldn't prevent selection among replicas.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/include/replicated.h b/include/replicated.h
index 69ab7800..0f482d21 100644
--- a/include/replicated.h
+++ b/include/replicated.h
@@ -57,6 +57,7 @@
 
 struct host {
 	char *name;
+	int ent_num;
 	struct sockaddr *addr;
 	size_t addr_len;
 	unsigned int rr;
@@ -70,7 +71,7 @@ struct host {
 };
 
 void seed_random(void);
-struct host *new_host(const char *, struct sockaddr *, size_t,
+struct host *new_host(const char *, int, struct sockaddr *, size_t,
 		      unsigned int, unsigned int, unsigned int);
 void free_host_list(struct host **);
 int parse_location(unsigned, struct host **, const char *, unsigned int);
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
index 77166544..4cf0cd27 100644
--- a/modules/mount_nfs.c
+++ b/modules/mount_nfs.c
@@ -236,7 +236,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 	    (vers & NFS4_VERS_MASK) != 0 &&
 	    !(vers & UDP6_REQUESTED)) {
 		unsigned int v4_probe_ok = 0;
-		struct host *tmp = new_host(hosts->name,
+		struct host *tmp = new_host(hosts->name, 0,
 					    hosts->addr, hosts->addr_len,
 					    hosts->proximity,
 					    hosts->weight, hosts->options);
diff --git a/modules/replicated.c b/modules/replicated.c
index 3ac4c70f..f7b83236 100644
--- a/modules/replicated.c
+++ b/modules/replicated.c
@@ -83,7 +83,7 @@ void seed_random(void)
 	return;
 }
 
-struct host *new_host(const char *name,
+struct host *new_host(const char *name, int ent_num,
 		      struct sockaddr *addr, size_t addr_len,
 		      unsigned int proximity, unsigned int weight,
 		      unsigned int options)
@@ -116,6 +116,7 @@ struct host *new_host(const char *name,
 	memset(new, 0, sizeof(struct host));
 
 	new->name = tmp1;
+	new->ent_num = ent_num;
 	new->addr_len = addr_len;
 	new->addr = tmp2;
 	new->proximity = proximity;
@@ -714,7 +715,7 @@ done:
 int prune_host_list(unsigned logopt, struct host **list,
 		    unsigned int vers, int port)
 {
-	struct host *this, *last, *first;
+	struct host *this, *last, *first, *prev;
 	struct host *new = NULL;
 	unsigned int proximity, selected_version = 0;
 	unsigned int v2_tcp_count, v3_tcp_count, v4_tcp_count;
@@ -726,12 +727,6 @@ int prune_host_list(unsigned logopt, struct host **list,
 	if (!*list)
 		return 0;
 
-	/* If we're using the host name then there's no point probing
-	 * avialability and respose time.
-	 */
-	if (defaults_use_hostname_for_mounts())
-		return 1;
-
 	/* Use closest hosts to choose NFS version */
 
 	first = *list;
@@ -877,11 +872,18 @@ int prune_host_list(unsigned logopt, struct host **list,
 
 	first = last;
 	this = first;
+	prev = NULL;
 	while (this) {
 		struct host *next = this->next;
 		if (!this->name) {
 			remove_host(list, this);
 			add_host(&new, this);
+		} else if (defaults_use_hostname_for_mounts() && prev &&
+			   prev->ent_num == this->ent_num) {
+			/* When we use the hostname to mount, there is no
+			 * point in probing every address it has, just one is
+			 * enough.  Skip the rest.
+			 */
 		} else {
 			status = get_supported_ver_and_cost(logopt, this,
 						selected_version, port);
@@ -889,6 +891,7 @@ int prune_host_list(unsigned logopt, struct host **list,
 				this->version = selected_version;
 				remove_host(list, this);
 				add_host(&new, this);
+				prev = this;
 			}
 		}
 		this = next;
@@ -901,7 +904,7 @@ int prune_host_list(unsigned logopt, struct host **list,
 }
 
 static int add_new_host(struct host **list,
-			const char *host, unsigned int weight,
+			const char *host, int ent_num, unsigned int weight,
 			struct addrinfo *host_addr,
 			unsigned int rr, unsigned int options)
 {
@@ -940,7 +943,7 @@ static int add_new_host(struct host **list,
 	else
 		return 0;
 
-	new = new_host(host, host_addr->ai_addr, addr_len, prx, weight, options);
+	new = new_host(host, ent_num, host_addr->ai_addr, addr_len, prx, weight, options);
 	if (!new)
 		return 0;
 
@@ -953,7 +956,7 @@ static int add_new_host(struct host **list,
 	return 1;
 }
 
-static int add_host_addrs(struct host **list, const char *host,
+static int add_host_addrs(struct host **list, const char *host, int ent_num,
 			  unsigned int weight, unsigned int options)
 {
 	struct addrinfo hints, *ni, *this;
@@ -988,7 +991,7 @@ static int add_host_addrs(struct host **list, const char *host,
 
 	this = ni;
 	while (this) {
-		ret = add_new_host(list, host, weight, this, 0, options);
+		ret = add_new_host(list, host, ent_num, weight, this, 0, options);
 		if (!ret)
 			break;
 		this = this->ai_next;
@@ -1027,7 +1030,7 @@ try_name:
 		rr++;
 	this = ni;
 	while (this) {
-		ret = add_new_host(list, host, weight, this, rr, options);
+		ret = add_new_host(list, host, ent_num, weight, this, rr, options);
 		if (!ret)
 			break;
 		this = this->ai_next;
@@ -1120,6 +1123,7 @@ int parse_location(unsigned logopt, struct host **hosts,
 {
 	char *str, *p, *delim;
 	unsigned int empty = 1;
+	int ent_num = 1;
 
 	if (!list)
 		return 0;
@@ -1177,7 +1181,7 @@ int parse_location(unsigned logopt, struct host **hosts,
 				}
 
 				if (p != delim) {
-					if (!add_host_addrs(hosts, p, weight, options)) {
+					if (!add_host_addrs(hosts, p, ent_num, weight, options)) {
 						if (empty) {
 							p = next;
 							continue;
@@ -1199,7 +1203,7 @@ int parse_location(unsigned logopt, struct host **hosts,
 				*delim = '\0';
 				next = delim + 1;
 
-				if (!add_host_addrs(hosts, p, weight, options)) {
+				if (!add_host_addrs(hosts, p, ent_num, weight, options)) {
 					p = next;
 					continue;
 				}
@@ -1213,6 +1217,7 @@ int parse_location(unsigned logopt, struct host **hosts,
 			return 0;
 		}
 
+		ent_num++;
 		p = next;
 	}
 

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 12/20] autofs-5.1.4 - fix monotonic_elapsed
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (10 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 11/20] autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas Ian Kent
@ 2018-02-14  6:43 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 13/20] autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS Ian Kent
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:43 UTC (permalink / raw)
  To: autofs mailing list

From: NeilBrown <neilb@suse.com>

When automount probes multiple hosts to find the one which
responds most quickly, it currently ignores the nanoseconds.
This often makes the cost "0", which makes weights ineffective.

The cause is that monotonic_elapsed() casts tv_nsec to a
double *after* dividing by 1 billion, rather than before.

With this change, weights become effective for choosing
between hosts which respond in under one second.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG      |    1 +
 lib/rpc_subs.c |    4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 104fca90..313730b1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,7 @@ xx/xx/2018 autofs-5.1.5
 - add error handling for ext_mount_add().
 - account for recent libnsl changes.
 - use_hostname_for_mounts shouldn't prevent selection among replicas.
+- fix monotonic_elapsed.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
index 73097c9d..60ede9f8 100644
--- a/lib/rpc_subs.c
+++ b/lib/rpc_subs.c
@@ -1093,9 +1093,9 @@ double monotonic_elapsed(struct timespec start, struct timespec end)
 	double t1, t2;
 
 	t1 =  (double) start.tv_sec +
-		(double) (start.tv_nsec/(1000*1000*1000));
+		((double) start.tv_nsec/(1000*1000*1000));
 	t2 =  (double) end.tv_sec +
-		(double) (end.tv_nsec/(1000*1000*1000));
+		((double) end.tv_nsec/(1000*1000*1000));
 	return t2 - t1;
 }
 

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 13/20] autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (11 preceding siblings ...)
  2018-02-14  6:43 ` [PATCH 12/20] autofs-5.1.4 - fix monotonic_elapsed Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 14/20] autofs-5.1.4 - dont allow trailing slash in master map mount points Ian Kent
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

From: NeilBrown <neilb@suse.com>

The rules in Makefile make it quite clear that
'samples' is not expected to be part of SUBDIRS.
e.g.
 - The rule for "clean" handles both $(SUBDIRS) *and* samples.
 - There are separate "install" and "install_samples" targets.

However SUBDIRS does contain 'samples'.  This means that
a simple "make; make install" will over-write your configuration files.

So remove 'samples' from SUBDIRS.  Note that it has been removed in
the past, but then got added back again.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG      |    1 +
 Makefile.rules |    2 +-
 autofs.spec    |    6 ++++++
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index 313730b1..1e5ec15b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -11,6 +11,7 @@ xx/xx/2018 autofs-5.1.5
 - account for recent libnsl changes.
 - use_hostname_for_mounts shouldn't prevent selection among replicas.
 - fix monotonic_elapsed.
+- Makefiles.rules: remove 'samples' from SUBDIRS.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/Makefile.rules b/Makefile.rules
index 2bfa043c..4deab3b9 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -3,7 +3,7 @@
 #
 
 # Root directory contents
-SUBDIRS = lib daemon modules man samples
+SUBDIRS = lib daemon modules man
 INCDIRS = include
 INCFILES = COPYING COPYRIGHT NEWS README* TODO Makefile Makefile.rules \
 	   Makefile.conf.in .version .autofs-* configure.in aclocal.m4 \
diff --git a/autofs.spec b/autofs.spec
index 6da0655d..2464e741 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -121,6 +121,12 @@ install -m 755 redhat/autofs.init $RPM_BUILD_ROOT/etc/rc.d/init.d/autofs
 install -m 644 redhat/autofs.conf $RPM_BUILD_ROOT/etc/autofs.conf
 install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
 
+install -m 644 samples/auto.master $RPM_BUILD_ROOT/etc/auto.master
+install -m 644 samples/auto.misc $RPM_BUILD_ROOT/etc/auto.misc
+install -m 644 samples/auto.net $RPM_BUILD_ROOT/etc/auto.net
+install -m 644 samples/auto.smb $RPM_BUILD_ROOT/etc/auto.smb
+install -m 600 samples/autofs_ldap_auth.conf $RPM_BUILD_ROOT/etc/autofs_ldap_auth.conf
+
 %clean
 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
 

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 14/20] autofs-5.1.4 - dont allow trailing slash in master map mount points
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (12 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 13/20] autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 15/20] autofs-5.1.4 - fix libresolv configure check Ian Kent
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

If a master map mount point path has a trailing '/' this can cause
problems so remove them at parse time.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG          |    1 +
 lib/master_parse.y |    5 +++++
 2 files changed, 6 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 1e5ec15b..a7bb89dc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -12,6 +12,7 @@ xx/xx/2018 autofs-5.1.5
 - use_hostname_for_mounts shouldn't prevent selection among replicas.
 - fix monotonic_elapsed.
 - Makefiles.rules: remove 'samples' from SUBDIRS.
+- dont allow trailing slash in master map mount points.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/lib/master_parse.y b/lib/master_parse.y
index 42e03c2d..761ade9b 100644
--- a/lib/master_parse.y
+++ b/lib/master_parse.y
@@ -749,6 +749,7 @@ int master_parse_entry(const char *buffer, unsigned int default_timeout, unsigne
 	struct map_source *source;
 	unsigned int logopt = logging;
 	unsigned int m_logopt = master->logopt;
+	size_t mp_len;
 	int ret;
 
 	local_init_vars();
@@ -763,6 +764,10 @@ int master_parse_entry(const char *buffer, unsigned int default_timeout, unsigne
 		return 0;
 	}
 
+	mp_len = strlen(path);
+	while (mp_len && path[--mp_len] == '/')
+		path[mp_len] = 0;
+
 	nc = master->nc;
 
 	/* Add null map entries to the null map cache */

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 15/20] autofs-5.1.4 - fix libresolv configure check
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (13 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 14/20] autofs-5.1.4 - dont allow trailing slash in master map mount points Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 16/20] autofs-5.1.4 - add fedfs-getsrvinfo.c Ian Kent
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

The libresolv functions are not found by AC_CHECK_LIB() unless
they are prefixed with "__".

So change the library check to also look for __<function> during
the check.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG    |    1 +
 configure    |   41 +++++++++++++++++++++++++++++++++++++++++
 configure.in |    2 +-
 3 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG b/CHANGELOG
index a7bb89dc..dbfb8389 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -13,6 +13,7 @@ xx/xx/2018 autofs-5.1.5
 - fix monotonic_elapsed.
 - Makefiles.rules: remove 'samples' from SUBDIRS.
 - dont allow trailing slash in master map mount points.
+- fix libresolv configure check.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/configure b/configure
index 2d517aac..5c8aae30 100755
--- a/configure
+++ b/configure
@@ -4821,6 +4821,47 @@ fi
 $as_echo "$ac_cv_lib_resolv_res_query" >&6; }
 if test "x$ac_cv_lib_resolv_res_query" = xyes; then :
   LIBRESOLV="-lresolv"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __res_query in -lresolv" >&5
+$as_echo_n "checking for __res_query in -lresolv... " >&6; }
+if ${ac_cv_lib_resolv___res_query+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolv  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char __res_query ();
+int
+main ()
+{
+return __res_query ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_resolv___res_query=yes
+else
+  ac_cv_lib_resolv___res_query=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv___res_query" >&5
+$as_echo "$ac_cv_lib_resolv___res_query" >&6; }
+if test "x$ac_cv_lib_resolv___res_query" = xyes; then :
+  LIBRESOLV="-lresolv"
+fi
+
 fi
 
 
diff --git a/configure.in b/configure.in
index d74775cc..4d1208f5 100644
--- a/configure.in
+++ b/configure.in
@@ -217,7 +217,7 @@ AC_SUBST(NSL_LIBS)
 NSL_CFLAGS=""
 ])
 
-AC_CHECK_LIB(resolv, res_query, LIBRESOLV="-lresolv")
+AC_CHECK_LIB(resolv, res_query, LIBRESOLV="-lresolv", AC_CHECK_LIB(resolv, __res_query, LIBRESOLV="-lresolv"))
 AC_SUBST(LIBRESOLV)
 
 #

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 16/20] autofs-5.1.4 - add fedfs-getsrvinfo.c
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (14 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 15/20] autofs-5.1.4 - fix libresolv configure check Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 17/20] autofs-5.1.4 - add mount.fedfs.c Ian Kent
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

Add the fedfs domain information discovery library functions.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG                |    1 
 fedfs/fedfs-getsrvinfo.c |  311 ++++++++++++++++++++++++++++++++++++++++++++++
 fedfs/fedfs-getsrvinfo.h |   52 ++++++++
 3 files changed, 364 insertions(+)
 create mode 100644 fedfs/fedfs-getsrvinfo.c
 create mode 100644 fedfs/fedfs-getsrvinfo.h

diff --git a/CHANGELOG b/CHANGELOG
index dbfb8389..8d6c737c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,7 @@ xx/xx/2018 autofs-5.1.5
 - Makefiles.rules: remove 'samples' from SUBDIRS.
 - dont allow trailing slash in master map mount points.
 - fix libresolv configure check.
+- add fedfs-getsrvinfo.c.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/fedfs/fedfs-getsrvinfo.c b/fedfs/fedfs-getsrvinfo.c
new file mode 100644
index 00000000..02ad16b5
--- /dev/null
+++ b/fedfs/fedfs-getsrvinfo.c
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2011 Oracle.  All rights reserved.
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <stdbool.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <arpa/nameser.h>
+#include <arpa/nameser_compat.h>
+#include <resolv.h>
+
+#include "fedfs-getsrvinfo.h"
+
+/**
+ * Parsing overlay for DNS query result record header.  Fields are
+ * in network byte order.
+ */
+struct rechdr {
+	uint16_t		 type;
+	uint16_t		 class;
+	uint32_t		 ttl;
+	uint16_t		 length;
+} __attribute__((__packed__));
+
+/**
+ * Parsing overlay for DNS query result SRV record data.  Fields
+ * are in network byte order.
+ */
+struct srv {
+	uint16_t		 priority;
+	uint16_t		 weight;
+	uint16_t		 port;
+	unsigned char		*target;
+} __attribute__((__packed__));
+
+/**
+ * Return C string matching error value of "status"
+ *
+ * @param status error status returned by getsrvinfo
+ * @return pointer to static NUL-terminated C string containing error message
+ */
+const char *
+gsi_strerror(int status)
+{
+	static char buf[256];
+
+	switch (status) {
+	case ESI_SUCCESS:
+		return "Success";
+	case ESI_NONAME:
+		return "Name not found";
+	case ESI_AGAIN:
+		return "Temporary failure in name resolution";
+	case ESI_FAIL:
+		return "Non-recoverable failure in name resolution";
+	case ESI_NODATA:
+		return "No SRV record returned";
+	case ESI_SERVICE:
+		return "Service is not available";
+	case ESI_MEMORY:
+		return "Memory allocation failure";
+	case ESI_SYSTEM:
+		snprintf(buf, sizeof(buf), "System error (%d): %s",
+				status, strerror(errno));
+		return buf;
+	case ESI_PARSE:
+		return "Failed to parse server response";
+	}
+
+	snprintf(buf, sizeof(buf), "Unknown error (%d)", status);
+	return buf;
+}
+
+/**
+ * Release a list of SRV records allocated by getsrvinfo()
+ *
+ * @param si pointer to first element of a list of struct srvinfo
+ *
+ */
+void freesrvinfo(struct srvinfo *si)
+{
+	struct srvinfo *tmp;
+
+	while (si != NULL) {
+		tmp = si;
+		si = si->si_next;
+		free(tmp->si_target);
+		free(tmp);
+	}
+}
+
+/**
+ * Ordering predicate for srvinfo lists
+ *
+ * @param a a srvinfo list element to compare
+ * @param b another srvinfo list element to compare
+ * @return true if "b" should fall later in the list than "a"
+ *
+ * See RFC 2782.   The list is ordered as follows:
+ *
+ *  o Lowest priority first.
+ *  o In each priority class, highest weight first.
+ */
+static _Bool
+srvinfo_is_after(const struct srvinfo *a, const struct srvinfo *b)
+{
+	if (a->si_priority > b->si_priority)
+		return true;
+	if (a->si_priority < b->si_priority)
+		return false;
+
+	if (a->si_weight < b->si_weight)
+		return true;
+	return false;
+}
+
+/**
+ * Insert a srvinfo element into a list
+ *
+ * @param head pointer to head of list of elements
+ * @param entry new list element to insert
+ *
+ */
+static void
+insert_srvinfo(struct srvinfo **head, struct srvinfo *entry)
+{
+	entry->si_next = *head;
+	*head = entry;
+}
+
+/**
+ * Insert a srvinfo element into a list, in order
+ *
+ * @param head pointer to head of list of elements
+ * @param entry new list element to insert
+ *
+ */
+static void
+insert_srvinfo_sorted(struct srvinfo **head, struct srvinfo *entry)
+{
+	struct srvinfo *spot, *back;
+
+	spot = *head;
+	back = NULL;
+	while (spot && srvinfo_is_after(spot, entry)) {
+		back = spot;
+		spot = spot->si_next;
+	}
+
+	if (spot == (*head))
+		insert_srvinfo(head, entry);
+	else {
+		insert_srvinfo(&spot, entry);
+		/* off the end of the list? */
+		if (spot == entry)
+			back->si_next = entry;
+	}
+}
+
+/**
+ * Retrieve list of SRV records from DNS service
+ *
+ * @param srvname NUL-terminated C string containing record type to look up
+ * @param domainname NUL-terminated C string containing domain name to look up
+ * @param si OUT: list of SRV record information retrieved
+ * @return zero on success, or an ESI_ status code describing the error
+ *
+ * Caller must free list of records using freesrvinfo().
+ */
+int
+getsrvinfo(const char *srvname, const char *domainname, struct srvinfo **si)
+{
+	unsigned char *msg, *eom, *comp_dn;
+	struct srvinfo *results;
+	unsigned short count, i;
+	int status, len;
+	char *exp_dn;
+	HEADER *hdr;
+
+	msg = calloc(1, NS_MAXMSG);
+	exp_dn = calloc(1, NS_MAXDNAME);
+	if (msg == NULL || exp_dn == NULL) {
+		status = ESI_MEMORY;
+		goto out;
+	}
+
+	_res.options |= RES_AAONLY;
+	len = res_querydomain(srvname, domainname, C_IN, T_SRV, msg, NS_MAXMSG);
+	if (len == -1) {
+		switch (h_errno) {
+		case HOST_NOT_FOUND:
+			status = ESI_NONAME;
+			break;
+		case TRY_AGAIN:
+			status = ESI_AGAIN;
+			break;
+		case NO_RECOVERY:
+			status = ESI_FAIL;
+			break;
+		case NO_DATA:
+			status = ESI_NODATA;
+			break;
+		default:
+			fprintf(stderr, "SRV query failed for %s.%s: %s\n",
+				srvname, domainname, hstrerror(h_errno));
+			status = ESI_FAIL;
+		}
+		goto out;
+	}
+
+	hdr = (HEADER *)msg;
+	count = ntohs(hdr->ancount);
+	if (count == 0) {
+		status = ESI_NODATA;
+		goto out;
+	}
+	eom = msg + len;
+
+	comp_dn = &msg[HFIXEDSZ];
+	comp_dn += dn_skipname(comp_dn, eom) + QFIXEDSZ;
+
+	results = NULL;
+	for (i = 0; i < count; i++) {
+		struct srvinfo *new;
+		struct srv *record;
+		int l;
+
+		l = dn_expand(msg, eom, comp_dn, exp_dn, NS_MAXDNAME);
+		if (l == -1) {
+			status = ESI_PARSE;
+			goto out_free;
+		}
+		comp_dn += l;
+
+		record = (struct srv *)&comp_dn[10];
+		comp_dn += 16;
+
+		l = dn_expand(msg, eom, comp_dn, exp_dn, NS_MAXDNAME);
+		if (l == -1) {
+			status = ESI_PARSE;
+			goto out_free;
+		}
+		comp_dn += l;
+
+		if (count == 1 && strcmp(exp_dn, ".") == 0) {
+			status = ESI_SERVICE;
+			goto out_free;
+		}
+
+		new = calloc(1, sizeof(*new));
+		if (new == NULL) {
+			status = ESI_MEMORY;
+			goto out;
+		}
+
+		new->si_target = strdup(exp_dn);
+		if (new->si_target == NULL) {
+			free(new);
+			status = ESI_MEMORY;
+			goto out;
+		}
+		new->si_priority = ntohs(record->priority);
+		new->si_weight = ntohs(record->weight);
+		new->si_port = ntohs(record->port);
+
+		insert_srvinfo_sorted(&results, new);
+	}
+
+	status = ESI_SUCCESS;
+	*si = results;
+
+out:
+	free(exp_dn);
+	free(msg);
+	return status;
+
+out_free:
+	freesrvinfo(results);
+	goto out;
+}
diff --git a/fedfs/fedfs-getsrvinfo.h b/fedfs/fedfs-getsrvinfo.h
new file mode 100644
index 00000000..13170359
--- /dev/null
+++ b/fedfs/fedfs-getsrvinfo.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2011 Oracle.  All rights reserved.
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#ifndef _FEDFS_GETSRVINFO_H_
+#define _FEDFS_GETSRVINFO_H_
+
+/**
+ * Single list element containing SRV record data
+ */
+struct srvinfo {
+	struct srvinfo		*si_next;
+	char			*si_target;
+	unsigned short		 si_priority;
+	unsigned short		 si_weight;
+	unsigned short		 si_port;
+};
+
+enum {
+	ESI_SUCCESS	= 0,
+	ESI_NONAME	= -2,
+	ESI_AGAIN	= -3,
+	ESI_FAIL	= -4,
+	ESI_NODATA	= -5,
+	ESI_SERVICE	= -8,
+	ESI_MEMORY	= -10,
+	ESI_SYSTEM	= -11,
+	ESI_PARSE	= -1000,
+};
+
+int		 getsrvinfo(const char *srvname, const char *domainname,
+				struct srvinfo **si);
+void		 freesrvinfo(struct srvinfo *si);
+const char	*gsi_strerror(int status);
+
+#endif	/* !_FEDFS_GETSRVINFO_H_ */

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 17/20] autofs-5.1.4 - add mount.fedfs.c
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (15 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 16/20] autofs-5.1.4 - add fedfs-getsrvinfo.c Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 18/20] autofs-5.1.4 - add fedfs-map-nfs4.c Ian Kent
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

Add build and install of the mount.fedfs binary.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG                |    1 
 Makefile                 |    3 
 Makefile.rules           |    2 
 autofs.spec              |    1 
 fedfs/Makefile           |   36 +++
 fedfs/fedfs-gpl-boiler.h |   40 ++++
 fedfs/fedfs-nls.h        |   38 ++++
 fedfs/mount.fedfs.c      |  485 ++++++++++++++++++++++++++++++++++++++++++++++
 8 files changed, 605 insertions(+), 1 deletion(-)
 create mode 100644 fedfs/Makefile
 create mode 100644 fedfs/fedfs-gpl-boiler.h
 create mode 100644 fedfs/fedfs-nls.h
 create mode 100644 fedfs/mount.fedfs.c

diff --git a/CHANGELOG b/CHANGELOG
index 8d6c737c..88992147 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -15,6 +15,7 @@ xx/xx/2018 autofs-5.1.5
 - dont allow trailing slash in master map mount points.
 - fix libresolv configure check.
 - add fedfs-getsrvinfo.c.
+- add mount.fedfs.c.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/Makefile b/Makefile
index e560a7cb..99db2c75 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,9 @@ kernel:
 samples:
 	set -e; if [ -d samples ]; then $(MAKE) -C samples all; fi
 
+fedfs:
+	set -e; if [ -d fedfs ]; then $(MAKE) -C fedfs all; fi
+
 clean:
 	for i in $(SUBDIRS) samples; do \
 		if [ -d $$i ]; then $(MAKE) -C $$i clean; fi; done 	
diff --git a/Makefile.rules b/Makefile.rules
index 4deab3b9..fc9f6019 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -3,7 +3,7 @@
 #
 
 # Root directory contents
-SUBDIRS = lib daemon modules man
+SUBDIRS = lib daemon fedfs modules man
 INCDIRS = include
 INCFILES = COPYING COPYRIGHT NEWS README* TODO Makefile Makefile.rules \
 	   Makefile.conf.in .version .autofs-* configure.in aclocal.m4 \
diff --git a/autofs.spec b/autofs.spec
index 2464e741..2cc0e38f 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -191,6 +191,7 @@ fi
 %config(noreplace) /etc/sysconfig/autofs
 %config(noreplace) /etc/autofs_ldap_auth.conf
 %{_sbindir}/automount
+%{_sbindir}/mount.fedfs
 %dir %{_libdir}/autofs
 %{_libdir}/autofs/*
 %{_mandir}/*/*
diff --git a/fedfs/Makefile b/fedfs/Makefile
new file mode 100644
index 00000000..cb325bed
--- /dev/null
+++ b/fedfs/Makefile
@@ -0,0 +1,36 @@
+#
+# Makefile for mount.fedfs
+#
+
+-include ../Makefile.conf
+include ../Makefile.rules
+
+SRCS = mount.fedfs.c
+HDRS = fedfs-getsrvinfo.h fedfs-gpl-boiler.h fedfs-nls.h
+
+fedfs-getsrvinfo_OBJ = fedfs-getsrvinfo.o
+
+mount_fedfs_OBJ = mount.fedfs.o
+
+version := $(shell cat ../.version)
+
+CFLAGS += -rdynamic $(DAEMON_CFLAGS) -D_GNU_SOURCE -I../include
+CFLAGS += -DVERSION_STRING=\"$(version)\"
+LDFLAGS += -rdynamic
+
+all: mount.fedfs
+
+mount.fedfs: $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) $(HDRS)
+	$(CC) -o mount.fedfs \
+	       $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) \
+	       $(LDFLAGS) $(LIBRESOLV) $(LIBS)
+
+clean:
+	rm -f *.o *.s *~ mount.fedfs
+
+install: all
+	install -d -m 755 $(INSTALLROOT)$(sbindir)
+	if ! test -x $(INSTALLROOT)$(sbindir)/mount.fedfs; \
+	then \
+		install -c mount.fedfs -m 755 $(INSTALLROOT)$(sbindir); \
+	fi
diff --git a/fedfs/fedfs-gpl-boiler.h b/fedfs/fedfs-gpl-boiler.h
new file mode 100644
index 00000000..1353e736
--- /dev/null
+++ b/fedfs/fedfs-gpl-boiler.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2011 Oracle.  All rights reserved.
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#ifndef _GPL_BOILER_H_
+#define _GPL_BOILER_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/**
+ * GPLv2 boilerplate for usage messages
+ */
+static const char *fedfs_gpl_boilerplate =
+		"\nCopyright 2010, 2011, 2012, 2013 Oracle.  "
+		"All rights reserved.\n\n"
+		"License GPLv2: "
+		"<http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>\n"
+		"This is free software.  "
+			"You are free to change and redistribute it.\n"
+		"There is NO WARRANTY, to the extent permitted by law.\n";
+
+#endif	/* !_GPL_BOILER_H_ */
diff --git a/fedfs/fedfs-nls.h b/fedfs/fedfs-nls.h
new file mode 100644
index 00000000..92f968d3
--- /dev/null
+++ b/fedfs/fedfs-nls.h
@@ -0,0 +1,38 @@
+/*
+ * From util-linux/include/nls.h (GPLv2)
+ */
+
+#ifndef UTIL_LINUX_NLS_H
+#define UTIL_LINUX_NLS_H
+
+int main(int argc, char *argv[]);
+
+#ifndef LOCALEDIR
+#define LOCALEDIR "/usr/share/locale"
+#endif
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#else
+# undef setlocale
+# define setlocale(Category, Locale) ({}) /* empty */
+#endif
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(Text) gettext (Text)
+# ifdef gettext_noop
+#  define N_(String) gettext_noop (String)
+# else
+#  define N_(String) (String)
+# endif
+#else
+# undef bindtextdomain
+# define bindtextdomain(Domain, Directory) /* empty */
+# undef textdomain
+# define textdomain(Domain) /* empty */
+# define _(Text) (Text)
+# define N_(Text) (Text)
+#endif
+
+#endif /* UTIL_LINUX_NLS_H */
diff --git a/fedfs/mount.fedfs.c b/fedfs/mount.fedfs.c
new file mode 100644
index 00000000..bd434395
--- /dev/null
+++ b/fedfs/mount.fedfs.c
@@ -0,0 +1,485 @@
+/*
+ * Copyright 2011 Oracle.  All rights reserved.
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/mount.h>
+#include <sys/wait.h>
+
+#include <stdbool.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <libgen.h>
+#include <errno.h>
+#include <getopt.h>
+#include <locale.h>
+#include <netdb.h>
+#include <langinfo.h>
+
+#include "fedfs-nls.h"
+#include "fedfs-getsrvinfo.h"
+#include "fedfs-gpl-boiler.h"
+
+/**
+ * Top-level directory on client under which we mount NFSv4 domain roots
+ */
+#define FEDFS_NFS4_TLDIR		"nfs4"
+
+/**
+ * Name of SRV record containing NFSv4 FedFS root
+ */
+#define FEDFS_NFS_DOMAINROOT	"_nfs-domainroot._tcp"
+
+/**
+ * Export path of NFSv4 FedFS root
+ */
+#define FEDFS_NFS_EXPORTPATH	"/.domainroot"
+
+/**
+ * Pathname to mount.nfs
+ */
+#define MOUNT_NFS_EXECUTABLE		"/sbin/mount.nfs"
+
+/**
+ * Mount status values, lifted from util-linux
+ */
+enum {
+	EX_SUCCESS	= 0,
+	EX_USAGE	= 1,
+	EX_FAIL		= 32,
+};
+
+static char *progname;
+static int nomtab;
+static int verbose;
+static _Bool readonly;
+static _Bool sloppy;
+static _Bool fake;
+
+/**
+ * Short form command line options
+ */
+static const char fedfs_opts[] = "fhno:rsvVw";
+
+/**
+ * Long form command line options
+ */
+static const struct option fedfs_longopts[] =
+{
+	{ "fake", 0, NULL, 'f' },
+	{ "help", 0, NULL, 'h' },
+	{ "no-mtab", 0, NULL, 'n' },
+	{ "options", 1, NULL, 'o' },
+	{ "read-only", 0, NULL, 'r' },
+	{ "read-write", 0, NULL, 'w' },
+	{ "ro", 0, NULL, 'r' },
+	{ "rw", 0, NULL, 'w' },
+	{ "sloppy", 0, NULL, 's' },
+	{ "verbose", 0, NULL, 'v' },
+	{ "version", 0, NULL, 'V' },
+	{ NULL, 0, NULL, 0 }
+};
+
+/**
+ * Display mount.fedfs usage message
+ */
+static void
+mount_usage(void)
+{
+	printf(_("\nUsage: %s remotedir localdir [-fhnrsvVw]\n\n"), progname);
+	printf(_("options:\n"));
+	printf(_("\t-f\t\tFake mount, do not actually mount\n"));
+	printf(_("\t-h\t\tPrint this help\n"));
+	printf(_("\t-n\t\tDo not update /etc/mtab\n"));
+	printf(_("\t-r\t\tMount file system readonly\n"));
+	printf(_("\t-s\t\tTolerate sloppy mount options\n"));
+	printf(_("\t-v\t\tVerbose\n"));
+	printf(_("\t-V\t\tPrint version\n"));
+	printf(_("\t-w\t\tMount file system read-write\n"));
+
+	printf("%s", fedfs_gpl_boilerplate);
+}
+
+/**
+ * Concatenate three strings
+ *
+ * @param s NUL-terminated C string
+ * @param t NUL-terminated C string
+ * @param u NUL-terminated C string
+ * @return pointer to NUL-terminated C string or NULL
+ *
+ * Caller must free the returned string with free(3).  Always frees
+ * its first arg - typical use: s = xstrconcat3(s,t,u);
+ *
+ * Lifted from util-linux.
+ */
+static char *
+xstrconcat3(char *s, const char *t, const char *u)
+{
+	_Bool free_s = true;
+	char *result;
+
+	if (s == NULL) {
+		s = "";
+		free_s = false;
+	}
+	if (t == NULL)
+		t = "";
+	if (u == NULL)
+		u = "";
+	result = malloc(strlen(s) + strlen(t) + strlen(u) + 1);
+	if (result == NULL)
+		goto out;
+
+	strcpy(result, s);
+	strcat(result, t);
+	strcat(result, u);
+
+out:
+	if (free_s)
+		free(s);
+	return result;
+}
+
+/**
+ * Exec mount.nfs
+ *
+ * @param server NUL-terminated C string containing name of NFS server
+ * @param port server port to use when mounting
+ * @param domainname NUL-terminated C string containing FedFS domain name
+ * @param export_path NUL-terminated C string containing server export path
+ * @param mounted_on_dir NUL-terminated C string containing local mounted-on directory
+ * @param text_options NUL-terminated C string containing user's mount options
+ *
+ */
+static void
+exec_mount_nfs4(const char *server, unsigned short port,
+		const char *domainname, const char *export_path,
+		const char *mounted_on_dir, const char *text_options)
+{
+	static char special[2048];
+	static char options[2048];
+	char *args[16];
+	int count = 0;
+
+	snprintf(special, sizeof(special), "%s:%s/%s%s", server,
+			FEDFS_NFS_EXPORTPATH, domainname, export_path);
+
+	if (text_options != NULL && strcmp(text_options, "") != 0)
+		snprintf(options, sizeof(options), "%s,vers=4,fg,port=%u",
+				text_options, port);
+	else
+		snprintf(options, sizeof(options), "vers=4,fg,port=%u", port);
+
+	if (verbose) {
+		printf(_("%s: Special device:       %s\n"),
+			progname, special);
+		printf(_("%s: Mounted-on directory: %s\n"),
+			progname, mounted_on_dir);
+		printf(_("%s: Mount options:        %s\n"),
+			progname, options);
+	}
+
+	args[count++] = MOUNT_NFS_EXECUTABLE;
+	args[count++] = special;
+	args[count++] = (char *)mounted_on_dir;
+	if (verbose)
+		args[count++] = "-v";
+	if (fake)
+		args[count++] = "-f";
+	if (nomtab)
+		args[count++] = "-n";
+	if (readonly)
+		args[count++] = "-r";
+	if (sloppy)
+		args[count++] = "-s";
+	args[count++] = "-o";
+	args[count++] = options;
+
+	args[count] = NULL;
+	execv(args[0], args);
+}
+
+/**
+ * Mount a FedFS domain root via NFSv4
+ *
+ * @param domainname NUL-terminated C string containing FedFS domain name
+ * @param export_path NUL-terminated C string containing server export path
+ * @param mounted_on_dir NUL-terminated C string containing local mounted-on directory
+ * @param text_options NUL-terminated C string containing user's mount options
+ * @return exit status code from the mount.nfs command
+ *
+ * Construct the server:/export string and the mounted-on directory string
+ * based on the DNS SRV query results, then fork and exec mount.nfs to do
+ * the actual mount request.
+ */
+static int
+nfs4_mount(const char *domainname, const char *export_path,
+		const char *mounted_on_dir, const char *text_options)
+{
+	struct srvinfo *tmp, *si = NULL;
+	int error, status;
+
+	status = EX_FAIL;
+
+	error = getsrvinfo(FEDFS_NFS_DOMAINROOT, domainname, &si);
+	switch (error) {
+	case ESI_SUCCESS:
+		break;
+	case ESI_NONAME:
+		fprintf(stderr, _("%s: Domain name %s not found\n"),
+			progname, domainname);
+		goto out;
+	case ESI_SERVICE:
+		fprintf(stderr, _("%s: No FedFS domain root available for %s\n"),
+			progname, domainname);
+		goto out;
+	default:
+		fprintf(stderr, _("%s: Failed to resolve %s: %s\n"),
+			progname, domainname, gsi_strerror(error));
+		goto out;
+	}
+
+	/*
+	 * The srvinfo list is already in RFC 2782 sorted order.  Try each
+	 * SRV record once, in the foreground.  Go with the first one that
+	 * works.
+	 */
+	for (tmp = si; tmp != NULL; tmp = tmp->si_next) {
+		pid_t pid;
+
+		pid = fork();
+		switch (pid) {
+		case 0:
+			exec_mount_nfs4(tmp->si_target, tmp->si_port,
+					domainname, export_path, mounted_on_dir,
+					text_options);
+			/*NOTREACHED*/
+			fprintf(stderr, _("%s: Failed to exec: %s\n"),
+				progname, strerror(errno));
+			exit(EX_FAIL);
+		case -1:
+			fprintf(stderr, _("%s: Failed to fork: %s\n"),
+				progname, strerror(errno));
+			goto out;
+		default:
+			waitpid(pid, &status, 0);
+			if (status == EX_SUCCESS)
+				goto out;
+		}
+	}
+
+out:
+	freesrvinfo(si);
+	return status;
+}
+
+/**
+ * Try one mount request
+ *
+ * @param source NUL-terminated C string containing name of "special device"
+ * @param target NUL-terminated C string containing local mounted-on directory
+ * @param text_options NUL-terminated C string containing user's mount options
+ * @return an exit status code
+ *
+ * Parse the pathname in "source."  It contains the file system protocol
+ * and FedFS domain name.  Then pass these arguments to the appropriate
+ * mount helper subcommand.
+ */
+static int
+try_mount(const char *source, const char *target, const char *text_options)
+{
+	char *global_name, *topdir, *domainname, *remaining;
+	int result;
+
+	remaining = NULL;
+	result = EX_FAIL;
+
+	global_name = strdup(source);
+	if (global_name == NULL) {
+		fprintf(stderr, _("%s: Unable to parse globally useful name\n"),
+				progname);
+		goto out;
+	}
+
+	topdir = strtok(global_name, "/");
+	if (topdir == NULL) {
+		fprintf(stderr, _("%s: Invalid globally useful name: %s\n"),
+			progname, source);
+		goto out;
+	}
+	if (verbose)
+		printf(_("%s: Top-level directory:  %s\n"),
+			progname, topdir);
+
+	domainname = strtok(NULL, "/");
+	if (domainname == NULL) {
+		fprintf(stderr, _("%s: Missing domain name in globally "
+				"useful name: %s\n"), progname, source);
+		goto out;
+	}
+	if (verbose)
+		printf(_("%s: Domain name:          %s\n"),
+			progname, domainname);
+
+	remaining = strtok(NULL, "/");
+	if (remaining == NULL) {
+		remaining = strdup("/");
+		if (remaining == NULL) {
+			fprintf(stderr, _("%s: No memory\n"), progname);
+			goto out;
+		}
+	} else {
+		char *tmp;
+
+		tmp = malloc(strlen(remaining) + 1);
+		if (tmp == NULL) {
+			fprintf(stderr, _("%s: No memory\n"), progname);
+			remaining = NULL;
+			goto out;
+		}
+		strcpy(tmp, "/");
+		strcat(tmp, remaining);
+		remaining = tmp;
+	}
+	if (verbose)
+		printf(_("%s: Export path:          %s\n"),
+			progname, remaining);
+
+	if (strcmp(topdir, FEDFS_NFS4_TLDIR) == 0)
+		result = nfs4_mount(domainname, remaining, target, text_options);
+#if 0
+	/* example: SMB support plugs in here */
+	else if (strcmp(topdir, FEDFS_SMB_TLDIR) == 0)
+		result = smb_mount(domainname, remaining, target, text_options);
+#endif
+	else
+		fprintf(stderr, _("%s: Unrecognized file system protocol\n"), progname);
+
+out:
+	free(global_name);
+	free(remaining);
+
+	return result;
+}
+
+/**
+ * Program entry point
+ *
+ * @param argc count of command line arguments
+ * @param argv array of NUL-terminated C strings containing command line arguments
+ * @return program exit status
+ */
+int main(int argc, char *argv[])
+{
+	char *source, *target, *text_options;
+	int c, mnt_err;
+
+	(void)setlocale(LC_ALL, "");
+
+	progname = basename(argv[0]);
+
+	if (argv[1] && argv[1][0] == '-') {
+		if(argv[1][1] == 'V')
+			printf("%s (VERSION_STRING)\n", progname);
+		else
+			mount_usage();
+		exit(EX_SUCCESS);
+	}
+
+	if (argc < 3) {
+		mount_usage();
+		exit(EX_USAGE);
+	}
+
+	source = argv[1];
+	target = argv[2];
+
+	mnt_err = EX_USAGE;
+	text_options = NULL;
+	readonly = false;
+	sloppy = false;
+	fake = false;
+	argv[2] = argv[0]; /* so that getopt error messages are correct */
+	while ((c = getopt_long(argc - 2, argv + 2, fedfs_opts,
+				fedfs_longopts, NULL)) != -1) {
+		switch (c) {
+		case 'f':
+			fake = true;
+			break;
+		case 'n':
+			++nomtab;
+			break;
+		case 'o':
+			/* Ugh. */
+			if (text_options != NULL)
+				text_options = xstrconcat3(text_options, ",", optarg);
+			else
+				text_options = strdup(optarg);
+			if (text_options == NULL) {
+				fprintf(stderr, _("%s: No memory\n"), progname);
+				goto out;
+			}
+			break;
+		case 'r':
+			readonly = true;
+			break;
+		case 's':
+			sloppy = true;
+			break;
+		case 'v':
+			++verbose;
+			break;
+		case 'V':
+			printf("%s: (VERSION_STRING)\n", progname);
+			mnt_err = EX_SUCCESS;
+			goto out;
+		case 'w':
+			readonly = false;
+			break;
+		case 'h':
+		default:
+			mount_usage();
+			goto out;
+		}
+	}
+
+	/* Extra non-option words at the end are bogus...  */
+	if (optind != argc - 2) {
+		mount_usage();
+		goto out;
+	}
+
+	if (getuid() != 0 && geteuid() != 0) {
+		fprintf(stderr, _("%s: Not installed setuid - "
+			    "\"user\" FedFS mounts are not supported\n"), progname);
+		mnt_err = EX_FAIL;
+		goto out;
+	}
+
+	mnt_err = try_mount(source, target, text_options);
+
+out:
+	free(text_options);
+	exit(mnt_err);
+}

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 18/20] autofs-5.1.4 - add fedfs-map-nfs4.c
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (16 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 17/20] autofs-5.1.4 - add mount.fedfs.c Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 19/20] autofs-5.1.4 - add conditional inclusion of fedfs binaries Ian Kent
  2018-02-14  6:44 ` [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map Ian Kent
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

Add build (and install) of the fedfs program map, fedfs-map-nfs4.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG              |    1 
 autofs.spec            |    1 
 fedfs/Makefile         |   12 ++-
 fedfs/fedfs-map-nfs4.c |  204 ++++++++++++++++++++++++++++++++++++++++++++++++
 fedfs/fedfs-token.h    |   40 +++++++++
 5 files changed, 256 insertions(+), 2 deletions(-)
 create mode 100644 fedfs/fedfs-map-nfs4.c
 create mode 100644 fedfs/fedfs-token.h

diff --git a/CHANGELOG b/CHANGELOG
index 88992147..412e3382 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -16,6 +16,7 @@ xx/xx/2018 autofs-5.1.5
 - fix libresolv configure check.
 - add fedfs-getsrvinfo.c.
 - add mount.fedfs.c.
+- add fedfs-map-nfs4.c.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/autofs.spec b/autofs.spec
index 2cc0e38f..157c09b4 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -192,6 +192,7 @@ fi
 %config(noreplace) /etc/autofs_ldap_auth.conf
 %{_sbindir}/automount
 %{_sbindir}/mount.fedfs
+%{_sbindir}/fedfs-map-nfs4
 %dir %{_libdir}/autofs
 %{_libdir}/autofs/*
 %{_mandir}/*/*
diff --git a/fedfs/Makefile b/fedfs/Makefile
index cb325bed..dff749e4 100644
--- a/fedfs/Makefile
+++ b/fedfs/Makefile
@@ -6,11 +6,13 @@
 include ../Makefile.rules
 
 SRCS = mount.fedfs.c
-HDRS = fedfs-getsrvinfo.h fedfs-gpl-boiler.h fedfs-nls.h
+HDRS = fedfs-getsrvinfo.h fedfs-gpl-boiler.h fedfs-nls.h \
+       fedfs-token.h
 
 fedfs-getsrvinfo_OBJ = fedfs-getsrvinfo.o
 
 mount_fedfs_OBJ = mount.fedfs.o
+fedfs-map-nfs4_OBJ = fedfs-map-nfs4.o
 
 version := $(shell cat ../.version)
 
@@ -18,18 +20,24 @@ CFLAGS += -rdynamic $(DAEMON_CFLAGS) -D_GNU_SOURCE -I../include
 CFLAGS += -DVERSION_STRING=\"$(version)\"
 LDFLAGS += -rdynamic
 
-all: mount.fedfs
+all: mount.fedfs fedfs-map-nfs4
 
 mount.fedfs: $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) $(HDRS)
 	$(CC) -o mount.fedfs \
 	       $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) \
 	       $(LDFLAGS) $(LIBRESOLV) $(LIBS)
 
+fedfs-map-nfs4: $(fedfs-map-nfs4_OBJ) $(fedfs-getsrvinfo_OBJ) $(HDRS)
+	$(CC) -o fedfs-map-nfs4 \
+	       $(fedfs-map-nfs4_OBJ) $(fedfs-getsrvinfo_OBJ) \
+	       $(LDFLAGS) $(LIBRESOLV) $(LIBS)
+
 clean:
 	rm -f *.o *.s *~ mount.fedfs
 
 install: all
 	install -d -m 755 $(INSTALLROOT)$(sbindir)
+	install -c fedfs-map-nfs4 -m 755 $(INSTALLROOT)$(sbindir); \
 	if ! test -x $(INSTALLROOT)$(sbindir)/mount.fedfs; \
 	then \
 		install -c mount.fedfs -m 755 $(INSTALLROOT)$(sbindir); \
diff --git a/fedfs/fedfs-map-nfs4.c b/fedfs/fedfs-map-nfs4.c
new file mode 100644
index 00000000..9f831cd7
--- /dev/null
+++ b/fedfs/fedfs-map-nfs4.c
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2011 Oracle.  All rights reserved.
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/mount.h>
+#include <sys/wait.h>
+
+#include <stdbool.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <libgen.h>
+#include <errno.h>
+#include <getopt.h>
+#include <locale.h>
+#include <netdb.h>
+#include <langinfo.h>
+
+#include "fedfs-nls.h"
+#include "fedfs-token.h"
+#include "fedfs-getsrvinfo.h"
+#include "fedfs-gpl-boiler.h"
+
+/**
+ * Name of SRV record containing NFSv4 FedFS root
+ */
+#define FEDFS_NFS_DOMAINROOT	"_nfs-domainroot._tcp"
+
+/**
+ * Export pathname of NFSv4 FedFS root
+ */
+#define FEDFS_NFS_EXPORTPATH	"/.domainroot"
+
+static char *progname;
+
+/**
+ * Display usage message
+ */
+static void
+fedfs_map_usage(void)
+{
+	printf(_("\nUsage: %s [domain]\n\n"), progname);
+
+	printf("%s", fedfs_gpl_boilerplate);
+}
+
+/**
+ * Construct an NFSv4 map entry for "domainname" with one server
+ *
+ * @param si single-entry list of SRV records
+ * @param domainname NUL-terminated UTF-8 string containing name of FedFS domain
+ * @return command exit status
+ */
+static int fedfs_map_nfs4_oneserver(struct srvinfo *si, const char *domainname)
+{
+	printf("-fstype=nfs,vers=4,fg");
+	if (si->si_port != 2049)
+		printf(",port=%u", si->si_port);
+	printf(" %s:%s/%s\n", si->si_target, FEDFS_NFS_EXPORTPATH, domainname);
+	return 0;
+}
+
+/**
+ * Construct an NFSv4 map entry for "domainname" with multiple servers
+ *
+ * @param si list of SRV records for requested FedFS domain
+ * @param domainname NUL-terminated UTF-8 string containing name of FedFS domain
+ * @return command exit status
+ */
+static int fedfs_map_nfs4_replicas(struct srvinfo *si, const char *domainname)
+{
+	struct srvinfo *cur;
+	unsigned short port;
+	_Bool comma;
+
+	/*
+	 * Unfortunately our automounter can't handle a list of
+	 * replicas where the various servers live on different
+	 * ports from one another.
+	 */
+	port = si->si_port;
+	for (cur = si; cur != NULL; cur = cur->si_next)
+		if (cur->si_port != port) {
+			fprintf(stderr, _("%s: Replicas on different ports not supported\n"),
+				progname);
+			return 1;
+		}
+
+	if (port != 2049)
+		printf("-fstype=nfs,vers=4,fg,port=%u ", port);
+	else
+		printf("-fstype=nfs,vers=4,fg ");
+
+	/*
+	 * Note that the export path is required to be indentical
+	 * for all domain root servers for this domain.
+	 */
+	for (comma = false, cur = si; cur != NULL; cur = cur->si_next) {
+		if (comma)
+			printf(",");
+		printf("%s(%u)", cur->si_target, cur->si_weight);
+		comma = true;
+	}
+	printf(":%s/%s\n", FEDFS_NFS_EXPORTPATH, domainname);
+
+	return 0;
+}
+
+/**
+ * Construct an NFSv4 map entry for "domainname"
+ *
+ * @param domainname NUL-terminated UTF-8 string containing name of FedFS domain
+ * @return command exit status
+ */
+static int fedfs_map_nfs4(const char *domainname)
+{
+	struct srvinfo *cur, *si = NULL;
+	unsigned int count;
+	int error, result;
+
+	result = 1;
+	error = getsrvinfo(FEDFS_NFS_DOMAINROOT, domainname, &si);
+	switch (error) {
+	case ESI_SUCCESS:
+		break;
+	case ESI_NONAME:
+		fprintf(stderr, _("%s: Domain name %s not found\n"),
+			progname, domainname);
+		goto out;
+	case ESI_SERVICE:
+		fprintf(stderr, _("%s: No FedFS domain root available for %s\n"),
+			progname, domainname);
+		goto out;
+	default:
+		fprintf(stderr, _("%s: Failed to resolve %s: %s\n"),
+			progname, domainname, gsi_strerror(error));
+		goto out;
+	}
+
+	for (count = 0, cur = si; cur != NULL; cur = cur->si_next)
+		count++;
+	if (count == 1)
+		result = fedfs_map_nfs4_oneserver(si, domainname);
+	else
+		result = fedfs_map_nfs4_replicas(si, domainname);
+
+out:
+	freesrvinfo(si);
+	return result;
+}
+
+/**
+ * Program entry point
+ *
+ * @param argc count of command line arguments
+ * @param argv array of NUL-terminated C strings containing command line arguments
+ * @return program exit status
+ */
+int main(int argc, char *argv[])
+{
+	(void)setlocale(LC_ALL, "");
+
+	progname = basename(argv[0]);
+
+	if (argc != 2) {
+		fedfs_map_usage();
+		return 1;
+	}
+
+	if (strcmp(progname, "fedfs-map-nfs4") == 0)
+		return fedfs_map_nfs4(argv[1]);
+#ifdef EXAMPLE
+	/* CIFS support might plug in here */
+	else if (strcmp(progname, "fedfs-map-cifs") == 0)
+		return fedfs_map_cifs(argv[1]);
+#endif
+
+	fprintf(stderr, _("%s: Unsupported file system type\n"), progname);
+	return 1;
+}
diff --git a/fedfs/fedfs-token.h b/fedfs/fedfs-token.h
new file mode 100644
index 00000000..5651409d
--- /dev/null
+++ b/fedfs/fedfs-token.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 Oracle.  All rights reserved.
+ * Copyright (C) 2007 Chuck Lever <chuck.lever@oracle.com>
+ *
+ * This file is part of fedfs-utils.
+ *
+ * fedfs-utils is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0 as
+ * published by the Free Software Foundation.
+ *
+ * fedfs-utils is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2.0 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2.0 along with fedfs-utils.  If not, see:
+ *
+ *	http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+ */
+
+#ifndef _FEDFS_UTILS_TOKEN_H
+#define _FEDFS_UTILS_TOKEN_H
+
+#include <sys/cdefs.h>
+
+/**
+ * Private tokenizer state object
+ */
+struct tokenizer;
+
+__attribute_malloc__
+struct tokenizer	*tk_new_tokenizer(const char *string,
+						const char delimiter);
+__attribute_malloc__
+char				*tk_next_token(struct tokenizer *state);
+void				 tk_free_tokenizer(struct tokenizer *state);
+int				 tk_tokenizer_error(const struct tokenizer *state);
+
+#endif	/* !_FEDFS_UTILS_TOKEN_H */

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 19/20] autofs-5.1.4 - add conditional inclusion of fedfs binaries
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (17 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 18/20] autofs-5.1.4 - add fedfs-map-nfs4.c Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14  6:44 ` [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map Ian Kent
  19 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

Add conditional inclusion of the fedfs binaries.

Using configure a --with-fedfs is needed to build and install
the fedfs binaries.

Using rpmbuild -tb <autofs tar> it's necessary to add the option
--without fedfs to exclude the fedfs binaries from the resulting
rpm package.

Signed-off-by: Ian Kent <raven@themaw.net>
---
 CHANGELOG        |    1 +
 Makefile.conf.in |    2 ++
 Makefile.rules   |    6 +++++-
 autofs.spec      |   12 +++++++++++-
 configure        |   16 ++++++++++++++++
 configure.in     |    9 +++++++++
 6 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 412e3382..bbe8019e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -17,6 +17,7 @@ xx/xx/2018 autofs-5.1.5
 - add fedfs-getsrvinfo.c.
 - add mount.fedfs.c.
 - add fedfs-map-nfs4.c.
+- add conditional inclusion of fedfs binaries.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/Makefile.conf.in b/Makefile.conf.in
index 85662654..3fe1a0a0 100644
--- a/Makefile.conf.in
+++ b/Makefile.conf.in
@@ -58,6 +58,8 @@ EXT3FS = @HAVE_E3FSCK@
 # Support for calling e4fsck when mounting ext4 filesystems
 EXT4FS = @HAVE_E4FSCK@
 
+FEDFS = @ENABLE_FEDFS@
+
 LEX = @PATH_LEX@
 YACC = @PATH_YACC@
 RPCGEN = @PATH_RPCGEN@
diff --git a/Makefile.rules b/Makefile.rules
index fc9f6019..2ccb1f6e 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -3,12 +3,16 @@
 #
 
 # Root directory contents
-SUBDIRS = lib daemon fedfs modules man
+SUBDIRS = lib daemon modules man
 INCDIRS = include
 INCFILES = COPYING COPYRIGHT NEWS README* TODO Makefile Makefile.rules \
 	   Makefile.conf.in .version .autofs-* configure.in aclocal.m4 \
 	   configure *.patch autofs.spec
 
+ifeq ($(FEDFS), 1)
+	SUBDIRS += fedfs
+endif
+
 # Attempt to be friends with autotools
 INSTALLROOT = $(DESTDIR)
 
diff --git a/autofs.spec b/autofs.spec
index 157c09b4..2cb09ef0 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -16,6 +16,10 @@
 # disable them.
 %define with_libtirpc        %{?_without_libtirpc:        0} %{?!_without_libtirpc:        1}
 
+# Use --without fedfs in your rpmbuild command or force values to 0 to
+# disable them.
+%define with_fedfs           %{?_without_fedfs:         0} %{?!_without_fedfs: 1}
+
 Summary: A tool from automatically mounting and umounting filesystems.
 Name: autofs
 %define version 5.1.4
@@ -82,6 +86,9 @@ echo %{version}-%{release} > .version
 %if %{with_libtirpc}
   %define libtirpc_configure_arg --with-libtirpc
 %endif
+%if %{with_fedfs}
+  %define fedfs_configure_arg --enable-fedfs
+%endif
 
 %build
 CFLAGS="$RPM_OPT_FLAGS -Wall" \
@@ -90,7 +97,8 @@ LDFLAGS="-Wl,-z,now" \
 	--disable-mount-locking \
 	--enable-ignore-busy \
 	%{?systemd_configure_arg:} \
-	%{?libtirpc_configure_arg:}
+	%{?libtirpc_configure_arg:} \
+	%{?fedfs_configure_arg:}
 CFLAGS="$RPM_OPT_FLAGS -Wall" LDFLAGS="-Wl,-z,now" make initdir=/etc/rc.d/init.d DONTSTRIP=1
 
 %install
@@ -191,8 +199,10 @@ fi
 %config(noreplace) /etc/sysconfig/autofs
 %config(noreplace) /etc/autofs_ldap_auth.conf
 %{_sbindir}/automount
+%if %{with_fedfs}
 %{_sbindir}/mount.fedfs
 %{_sbindir}/fedfs-map-nfs4
+%endif
 %dir %{_libdir}/autofs
 %{_libdir}/autofs/*
 %{_mandir}/*/*
diff --git a/configure b/configure
index 5c8aae30..9682b36f 100755
--- a/configure
+++ b/configure
@@ -648,6 +648,7 @@ NSL_CFLAGS
 LIBCLOCK_GETTIME
 KRB5_CONFIG
 XML_CONFIG
+ENABLE_FEDFS
 sssldir
 HAVE_SSS_AUTOFS
 PATH_RPCGEN
@@ -743,6 +744,7 @@ with_libtirpc
 with_dmalloc
 enable_sloppy_mount
 enable_no_canon_umount
+enable_fedfs
 with_hesiod
 with_openldap
 with_sasl
@@ -1377,6 +1379,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-sloppy-mount         enable the use of the -s option to mount
   --enable-no-canon-umount         enable the use of the -c option to umount
+  --enable-fedfs                enable inclusion of fedfs binaries mount.fedfs and fedfs-map-nfs4
   --disable-ext-env	        disable search in environment for substitution variable
   --disable-mount-locking       disable use of locking when spawning mount command
   --enable-force-shutdown       enable USR1 signal to force unlink umount of any
@@ -4246,6 +4249,19 @@ $as_echo "#define HAVE_NO_CANON_UMOUNT 1" >>confdefs.h
 
 fi
 
+ENABLE_FEDFS=""
+# Check whether --enable-fedfs was given.
+if test "${enable_fedfs+set}" = set; then :
+  enableval=$enable_fedfs;
+else
+  enable_fedfs=no
+fi
+
+if test x$enable_fedfs = xyes; then
+	ENABLE_FEDFS="1"
+fi
+
+
 # LDAP SASL auth needs libxml and Kerberos
 for ac_prog in xml2-config
 do
diff --git a/configure.in b/configure.in
index 4d1208f5..de06a96d 100644
--- a/configure.in
+++ b/configure.in
@@ -195,6 +195,15 @@ if test x$enable_no_canon_umount = xyes; then
 	AC_DEFINE(HAVE_NO_CANON_UMOUNT, 1, [define if the umount command supports the -c option])
 fi
 
+ENABLE_FEDFS=""
+AC_ARG_ENABLE(fedfs,
+[  --enable-fedfs                enable inclusion of fedfs binaries mount.fedfs and fedfs-map-nfs4],,
+	enable_fedfs=no)
+if test x$enable_fedfs = xyes; then
+	ENABLE_FEDFS="1"
+fi
+AC_SUBST(ENABLE_FEDFS)
+
 # LDAP SASL auth needs libxml and Kerberos
 AF_CHECK_LIBXML()
 AF_CHECK_KRB5()

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map
  2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
                   ` (18 preceding siblings ...)
  2018-02-14  6:44 ` [PATCH 19/20] autofs-5.1.4 - add conditional inclusion of fedfs binaries Ian Kent
@ 2018-02-14  6:44 ` Ian Kent
  2018-02-14 23:47   ` Vincent McIntyre
  19 siblings, 1 reply; 23+ messages in thread
From: Ian Kent @ 2018-02-14  6:44 UTC (permalink / raw)
  To: autofs mailing list

Add an example of using the fedfs program map (to facilitate access
to fedfs domain mounts) to the installed master map.
---
 CHANGELOG           |    1 +
 samples/auto.master |    6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index bbe8019e..f771a433 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -18,6 +18,7 @@ xx/xx/2018 autofs-5.1.5
 - add mount.fedfs.c.
 - add fedfs-map-nfs4.c.
 - add conditional inclusion of fedfs binaries.
+- add an example fedfs master map entry to the installed master map.
 
 19/12/2017 autofs-5.1.4
 - fix spec file url.
diff --git a/samples/auto.master b/samples/auto.master
index 0f2c8ab0..6c95fadf 100644
--- a/samples/auto.master
+++ b/samples/auto.master
@@ -17,6 +17,12 @@
 #
 +dir:/etc/auto.master.d
 #
+# If you have fedfs setup and the realted binaries, either
+# built as part of autofs or installed from another package,
+# uncomment this line to use the fedfs program map to access
+# your fedfs mounts.
+#/nfs4  /usr/sbin/fedfs-map-nfs4 nobind
+#
 # Include central master map if it can be found using
 # nsswitch sources.
 #

--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map
  2018-02-14  6:44 ` [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map Ian Kent
@ 2018-02-14 23:47   ` Vincent McIntyre
  2018-02-14 23:57     ` Ian Kent
  0 siblings, 1 reply; 23+ messages in thread
From: Vincent McIntyre @ 2018-02-14 23:47 UTC (permalink / raw)
  To: Ian Kent; +Cc: autofs mailing list

On Wed, Feb 14, 2018 at 02:44:44PM +0800, Ian Kent wrote:
> Add an example of using the fedfs program map (to facilitate access
> to fedfs domain mounts) to the installed master map.
> ---
>  CHANGELOG           |    1 +
>  samples/auto.master |    6 ++++++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/CHANGELOG b/CHANGELOG
> index bbe8019e..f771a433 100644
> --- a/CHANGELOG
> +++ b/CHANGELOG
> @@ -18,6 +18,7 @@ xx/xx/2018 autofs-5.1.5
>  - add mount.fedfs.c.
>  - add fedfs-map-nfs4.c.
>  - add conditional inclusion of fedfs binaries.
> +- add an example fedfs master map entry to the installed master map.
>  
>  19/12/2017 autofs-5.1.4
>  - fix spec file url.
> diff --git a/samples/auto.master b/samples/auto.master
> index 0f2c8ab0..6c95fadf 100644
> --- a/samples/auto.master
> +++ b/samples/auto.master
> @@ -17,6 +17,12 @@
>  #
>  +dir:/etc/auto.master.d
>  #
> +# If you have fedfs setup and the realted binaries, either

s/setup/set up/     (?)
s/realted/related/

Regards
Vince
--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map
  2018-02-14 23:47   ` Vincent McIntyre
@ 2018-02-14 23:57     ` Ian Kent
  0 siblings, 0 replies; 23+ messages in thread
From: Ian Kent @ 2018-02-14 23:57 UTC (permalink / raw)
  To: Vincent McIntyre; +Cc: autofs mailing list

On 15/02/18 07:47, Vincent McIntyre wrote:
> On Wed, Feb 14, 2018 at 02:44:44PM +0800, Ian Kent wrote:
>> Add an example of using the fedfs program map (to facilitate access
>> to fedfs domain mounts) to the installed master map.
>> ---
>>  CHANGELOG           |    1 +
>>  samples/auto.master |    6 ++++++
>>  2 files changed, 7 insertions(+)
>>
>> diff --git a/CHANGELOG b/CHANGELOG
>> index bbe8019e..f771a433 100644
>> --- a/CHANGELOG
>> +++ b/CHANGELOG
>> @@ -18,6 +18,7 @@ xx/xx/2018 autofs-5.1.5
>>  - add mount.fedfs.c.
>>  - add fedfs-map-nfs4.c.
>>  - add conditional inclusion of fedfs binaries.
>> +- add an example fedfs master map entry to the installed master map.
>>  
>>  19/12/2017 autofs-5.1.4
>>  - fix spec file url.
>> diff --git a/samples/auto.master b/samples/auto.master
>> index 0f2c8ab0..6c95fadf 100644
>> --- a/samples/auto.master
>> +++ b/samples/auto.master
>> @@ -17,6 +17,12 @@
>>  #
>>  +dir:/etc/auto.master.d
>>  #
>> +# If you have fedfs setup and the realted binaries, either
> 
> s/setup/set up/     (?)
> s/realted/related/

Ha, thanks Vince.

Ian
--
To unsubscribe from this list: send the line "unsubscribe autofs" in

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2018-02-14 23:57 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-14  6:42 [PATCH 00/20] Current patch queue Ian Kent
2018-02-14  6:42 ` [PATCH 01/20] autofs-5.1.4 - fix flag file permission Ian Kent
2018-02-14  6:43 ` [PATCH 02/20] autofs-5.1.4 - fix directory create permission Ian Kent
2018-02-14  6:43 ` [PATCH 03/20] autofs-5.1.4 - fix use after free in do_master_list_reset() Ian Kent
2018-02-14  6:43 ` [PATCH 04/20] autofs-5.1.4 - fix deadlock in dumpmaps Ian Kent
2018-02-14  6:43 ` [PATCH 05/20] autofs-5.1.4 - dont use array for path when not necessary Ian Kent
2018-02-14  6:43 ` [PATCH 06/20] autofs-5.1.4 - fix prefix option handling in expand_entry() Ian Kent
2018-02-14  6:43 ` [PATCH 07/20] autofs-5.1.4 - fix sublink option not set from defaults Ian Kent
2018-02-14  6:43 ` [PATCH 08/20] autofs-5.1.4 - fix error return in do_nfs_mount() Ian Kent
2018-02-14  6:43 ` [PATCH 09/20] autofs-5.1.4 - add error handling for ext_mount_add() Ian Kent
2018-02-14  6:43 ` [PATCH 10/20] autofs-5.1.4 - account for recent libnsl changes Ian Kent
2018-02-14  6:43 ` [PATCH 11/20] autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas Ian Kent
2018-02-14  6:43 ` [PATCH 12/20] autofs-5.1.4 - fix monotonic_elapsed Ian Kent
2018-02-14  6:44 ` [PATCH 13/20] autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS Ian Kent
2018-02-14  6:44 ` [PATCH 14/20] autofs-5.1.4 - dont allow trailing slash in master map mount points Ian Kent
2018-02-14  6:44 ` [PATCH 15/20] autofs-5.1.4 - fix libresolv configure check Ian Kent
2018-02-14  6:44 ` [PATCH 16/20] autofs-5.1.4 - add fedfs-getsrvinfo.c Ian Kent
2018-02-14  6:44 ` [PATCH 17/20] autofs-5.1.4 - add mount.fedfs.c Ian Kent
2018-02-14  6:44 ` [PATCH 18/20] autofs-5.1.4 - add fedfs-map-nfs4.c Ian Kent
2018-02-14  6:44 ` [PATCH 19/20] autofs-5.1.4 - add conditional inclusion of fedfs binaries Ian Kent
2018-02-14  6:44 ` [PATCH 20/20] autofs-5.1.4 - add an example fedfs master map entry to the installed master map Ian Kent
2018-02-14 23:47   ` Vincent McIntyre
2018-02-14 23:57     ` Ian Kent

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.