|
Ian Kent |
62ad96 |
autofs-5.0.3 - check for mtab pointing to /proc/mounts
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
From: Ian Kent <raven@themaw.net>
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
autofs has problems if /etc/mtab points to /proc/mounts.
|
|
Ian Kent |
62ad96 |
This patchs adds a check to see if this is the case. If it is then
|
|
Ian Kent |
62ad96 |
autofs uses the mount(8) "-n" option which disables the normal mtab
|
|
Ian Kent |
62ad96 |
update error checking.
|
|
Ian Kent |
62ad96 |
---
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
CHANGELOG | 1
|
|
Ian Kent |
62ad96 |
daemon/spawn.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++------
|
|
Ian Kent |
62ad96 |
2 files changed, 61 insertions(+), 6 deletions(-)
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
--- autofs-5.0.3.orig/CHANGELOG
|
|
Ian Kent |
62ad96 |
+++ autofs-5.0.3/CHANGELOG
|
|
Ian Kent |
62ad96 |
@@ -31,6 +31,7 @@
|
|
Ian Kent |
62ad96 |
- add replicated server selection debug logging.
|
|
Ian Kent |
62ad96 |
- update replicated server selection documentation.
|
|
Ian Kent |
62ad96 |
- use /dev/urandom instead of /dev/random.
|
|
Ian Kent |
62ad96 |
+- check for mtab pointing to /proc/mounts.
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
14/01/2008 autofs-5.0.3
|
|
Ian Kent |
62ad96 |
-----------------------
|
|
Ian Kent |
62ad96 |
--- autofs-5.0.3.orig/daemon/spawn.c
|
|
Ian Kent |
62ad96 |
+++ autofs-5.0.3/daemon/spawn.c
|
|
Ian Kent |
62ad96 |
@@ -305,11 +305,13 @@ int spawn_mount(unsigned logopt, ...)
|
|
Ian Kent |
62ad96 |
char **argv, **p;
|
|
Ian Kent |
62ad96 |
char prog[] = PATH_MOUNT;
|
|
Ian Kent |
62ad96 |
char arg0[] = PATH_MOUNT;
|
|
Ian Kent |
62ad96 |
+ char argn[] = "-n";
|
|
Ian Kent |
62ad96 |
/* In case we need to use the fake option to mount */
|
|
Ian Kent |
62ad96 |
char arg_fake[] = "-f";
|
|
Ian Kent |
62ad96 |
unsigned int options;
|
|
Ian Kent |
62ad96 |
unsigned int retries = MTAB_LOCK_RETRIES;
|
|
Ian Kent |
62ad96 |
- int ret, printed = 0;
|
|
Ian Kent |
62ad96 |
+ int update_mtab = 1, ret, printed = 0;
|
|
Ian Kent |
62ad96 |
+ char buf[PATH_MAX];
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
/* If we use mount locking we can't validate the location */
|
|
Ian Kent |
62ad96 |
#ifdef ENABLE_MOUNT_LOCKING
|
|
Ian Kent |
62ad96 |
@@ -322,6 +324,17 @@ int spawn_mount(unsigned logopt, ...)
|
|
Ian Kent |
62ad96 |
for (argc = 1; va_arg(arg, char *); argc++);
|
|
Ian Kent |
62ad96 |
va_end(arg);
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
+ ret = readlink(_PATH_MOUNTED, buf, PATH_MAX);
|
|
Ian Kent |
62ad96 |
+ if (ret != -1) {
|
|
Ian Kent |
62ad96 |
+ buf[ret] = '\0';
|
|
Ian Kent |
62ad96 |
+ if (!strcmp(buf, _PROC_MOUNTS)) {
|
|
Ian Kent |
62ad96 |
+ debug(logopt,
|
|
Ian Kent |
62ad96 |
+ "mtab link detected, passing -n to mount");
|
|
Ian Kent |
62ad96 |
+ argc++;
|
|
Ian Kent |
62ad96 |
+ update_mtab = 0;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+
|
|
Ian Kent |
62ad96 |
/* Alloc 1 extra slot in case we need to use the "-f" option */
|
|
Ian Kent |
62ad96 |
if (!(argv = alloca(sizeof(char *) * argc + 2)))
|
|
Ian Kent |
62ad96 |
return -1;
|
|
Ian Kent |
62ad96 |
@@ -329,7 +342,12 @@ int spawn_mount(unsigned logopt, ...)
|
|
Ian Kent |
62ad96 |
argv[0] = arg0;
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
va_start(arg, logopt);
|
|
Ian Kent |
62ad96 |
- p = argv + 1;
|
|
Ian Kent |
62ad96 |
+ if (update_mtab)
|
|
Ian Kent |
62ad96 |
+ p = argv + 1;
|
|
Ian Kent |
62ad96 |
+ else {
|
|
Ian Kent |
62ad96 |
+ argv[1] = argn;
|
|
Ian Kent |
62ad96 |
+ p = argv + 2;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
while ((*p = va_arg(arg, char *))) {
|
|
Ian Kent |
62ad96 |
if (options == SPAWN_OPT_NONE && !strcmp(*p, "-o")) {
|
|
Ian Kent |
62ad96 |
*(++p) = va_arg(arg, char *);
|
|
Ian Kent |
62ad96 |
@@ -409,11 +427,13 @@ int spawn_bind_mount(unsigned logopt, ..
|
|
Ian Kent |
62ad96 |
char prog[] = PATH_MOUNT;
|
|
Ian Kent |
62ad96 |
char arg0[] = PATH_MOUNT;
|
|
Ian Kent |
62ad96 |
char bind[] = "--bind";
|
|
Ian Kent |
62ad96 |
+ char argn[] = "-n";
|
|
Ian Kent |
62ad96 |
/* In case we need to use the fake option to mount */
|
|
Ian Kent |
62ad96 |
char arg_fake[] = "-f";
|
|
Ian Kent |
62ad96 |
unsigned int options;
|
|
Ian Kent |
62ad96 |
unsigned int retries = MTAB_LOCK_RETRIES;
|
|
Ian Kent |
62ad96 |
- int ret, printed = 0;
|
|
Ian Kent |
62ad96 |
+ int update_mtab = 0, ret, printed = 0;
|
|
Ian Kent |
62ad96 |
+ char buf[PATH_MAX];
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
/* If we use mount locking we can't validate the location */
|
|
Ian Kent |
62ad96 |
#ifdef ENABLE_MOUNT_LOCKING
|
|
Ian Kent |
62ad96 |
@@ -430,6 +450,17 @@ int spawn_bind_mount(unsigned logopt, ..
|
|
Ian Kent |
62ad96 |
for (argc = 2; va_arg(arg, char *); argc++);
|
|
Ian Kent |
62ad96 |
va_end(arg);
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
+ ret = readlink(_PATH_MOUNTED, buf, PATH_MAX);
|
|
Ian Kent |
62ad96 |
+ if (ret != -1) {
|
|
Ian Kent |
62ad96 |
+ buf[ret] = '\0';
|
|
Ian Kent |
62ad96 |
+ if (!strcmp(buf, _PROC_MOUNTS)) {
|
|
Ian Kent |
62ad96 |
+ debug(logopt,
|
|
Ian Kent |
62ad96 |
+ "mtab link detected, passing -n to mount");
|
|
Ian Kent |
62ad96 |
+ argc++;
|
|
Ian Kent |
62ad96 |
+ update_mtab = 0;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+
|
|
Ian Kent |
62ad96 |
if (!(argv = alloca(sizeof(char *) * argc + 2)))
|
|
Ian Kent |
62ad96 |
return -1;
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
@@ -437,7 +468,12 @@ int spawn_bind_mount(unsigned logopt, ..
|
|
Ian Kent |
62ad96 |
argv[1] = bind;
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
va_start(arg, logopt);
|
|
Ian Kent |
62ad96 |
- p = argv + 2;
|
|
Ian Kent |
62ad96 |
+ if (update_mtab)
|
|
Ian Kent |
62ad96 |
+ p = argv + 2;
|
|
Ian Kent |
62ad96 |
+ else {
|
|
Ian Kent |
62ad96 |
+ argv[2] = argn;
|
|
Ian Kent |
62ad96 |
+ p = argv + 3;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
while ((*p++ = va_arg(arg, char *)));
|
|
Ian Kent |
62ad96 |
va_end(arg);
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
@@ -499,10 +535,12 @@ int spawn_umount(unsigned logopt, ...)
|
|
Ian Kent |
62ad96 |
char **argv, **p;
|
|
Ian Kent |
62ad96 |
char prog[] = PATH_UMOUNT;
|
|
Ian Kent |
62ad96 |
char arg0[] = PATH_UMOUNT;
|
|
Ian Kent |
62ad96 |
+ char argn[] = "-n";
|
|
Ian Kent |
62ad96 |
unsigned int options;
|
|
Ian Kent |
62ad96 |
unsigned int retries = MTAB_LOCK_RETRIES;
|
|
Ian Kent |
62ad96 |
- int ret, printed = 0;
|
|
Ian Kent |
62ad96 |
+ int update_mtab = 1, ret, printed = 0;
|
|
Ian Kent |
62ad96 |
unsigned int wait = defaults_get_umount_wait();
|
|
Ian Kent |
62ad96 |
+ char buf[PATH_MAX];
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
#ifdef ENABLE_MOUNT_LOCKING
|
|
Ian Kent |
62ad96 |
options = SPAWN_OPT_LOCK;
|
|
Ian Kent |
62ad96 |
@@ -514,13 +552,29 @@ int spawn_umount(unsigned logopt, ...)
|
|
Ian Kent |
62ad96 |
for (argc = 1; va_arg(arg, char *); argc++);
|
|
Ian Kent |
62ad96 |
va_end(arg);
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
+ ret = readlink(_PATH_MOUNTED, buf, PATH_MAX);
|
|
Ian Kent |
62ad96 |
+ if (ret != -1) {
|
|
Ian Kent |
62ad96 |
+ buf[ret] = '\0';
|
|
Ian Kent |
62ad96 |
+ if (!strcmp(buf, _PROC_MOUNTS)) {
|
|
Ian Kent |
62ad96 |
+ debug(logopt,
|
|
Ian Kent |
62ad96 |
+ "mtab link detected, passing -n to mount");
|
|
Ian Kent |
62ad96 |
+ argc++;
|
|
Ian Kent |
62ad96 |
+ update_mtab = 0;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
+
|
|
Ian Kent |
62ad96 |
if (!(argv = alloca(sizeof(char *) * argc + 1)))
|
|
Ian Kent |
62ad96 |
return -1;
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
argv[0] = arg0;
|
|
Ian Kent |
62ad96 |
|
|
Ian Kent |
62ad96 |
va_start(arg, logopt);
|
|
Ian Kent |
62ad96 |
- p = argv + 1;
|
|
Ian Kent |
62ad96 |
+ if (update_mtab)
|
|
Ian Kent |
62ad96 |
+ p = argv + 1;
|
|
Ian Kent |
62ad96 |
+ else {
|
|
Ian Kent |
62ad96 |
+ argv[1] = argn;
|
|
Ian Kent |
62ad96 |
+ p = argv + 2;
|
|
Ian Kent |
62ad96 |
+ }
|
|
Ian Kent |
62ad96 |
while ((*p++ = va_arg(arg, char *)));
|
|
Ian Kent |
62ad96 |
va_end(arg);
|
|
Ian Kent |
62ad96 |
|