- multi-map doesn't pickup NIS updates automatically. - eliminate redundant DNS name lookups. - mount thread create condition handling fix. - allow directory create on NFS root. - check direct mount path length. - fix incorrect in check in get user info. - fix a couple of memory leaks.
82 lines
2.6 KiB
Diff
82 lines
2.6 KiB
Diff
autofs-5.0.3 - don't abuse the ap->ghost field on NFS mount
|
|
|
|
From: Ian Kent <raven@themaw.net>
|
|
|
|
Using the ap->ghost field in the autofs mount point struct, to prevent
|
|
the mount point directory from being removed, when attempting a bind
|
|
mount when an NFS mount is local may lead to incorrectly reading and
|
|
ghosting the map. This can happen if a mount request comes in during
|
|
a map re-read when the autofs map doesn't have the browse option set.
|
|
This patch corrects that by using the existence check in the bind mount
|
|
module instead of the hack of changing the struct field.
|
|
---
|
|
|
|
modules/mount_bind.c | 2 +-
|
|
modules/mount_nfs.c | 11 -----------
|
|
2 files changed, 1 insertions(+), 12 deletions(-)
|
|
|
|
|
|
diff --git a/modules/mount_bind.c b/modules/mount_bind.c
|
|
index ef973e1..e4a04d0 100644
|
|
--- a/modules/mount_bind.c
|
|
+++ b/modules/mount_bind.c
|
|
@@ -144,7 +144,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
if (ap->type != LKP_INDIRECT)
|
|
return 1;
|
|
|
|
- if ((!ap->ghost && name_len) || !existed)
|
|
+ if ((!ap->ghost && name_len) && !existed)
|
|
rmdir_path(ap, fullpath, ap->dev);
|
|
|
|
return err;
|
|
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
|
|
index 1855ea9..d7f42a7 100644
|
|
--- a/modules/mount_nfs.c
|
|
+++ b/modules/mount_nfs.c
|
|
@@ -62,7 +62,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
{
|
|
char *fullpath, buf[MAX_ERR_BUF];
|
|
struct host *this, *hosts = NULL;
|
|
- unsigned int save_ghost = ap->ghost;
|
|
unsigned int vers;
|
|
char *nfsoptions = NULL;
|
|
int len, rlen, status, err, existed = 1;
|
|
@@ -186,13 +185,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
if (!status)
|
|
existed = 0;
|
|
|
|
- /*
|
|
- * We need to stop the bind mount module from removing the
|
|
- * mount point directory if a bind attempt fails so abuse
|
|
- * the ap->ghost field for this.
|
|
- */
|
|
- ap->ghost = 1;
|
|
-
|
|
this = hosts;
|
|
while (this) {
|
|
char *loc, *port_opt = NULL;
|
|
@@ -229,7 +221,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
/* Success - we're done */
|
|
if (!err) {
|
|
free_host_list(&hosts);
|
|
- ap->ghost = save_ghost;
|
|
return 0;
|
|
}
|
|
|
|
@@ -271,7 +262,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
info(ap->logopt, MODPREFIX "mounted %s on %s", loc, fullpath);
|
|
free(loc);
|
|
free_host_list(&hosts);
|
|
- ap->ghost = save_ghost;
|
|
return 0;
|
|
}
|
|
|
|
@@ -281,7 +271,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
|
|
|
forced_fail:
|
|
free_host_list(&hosts);
|
|
- ap->ghost = save_ghost;
|
|
|
|
/* If we get here we've failed to complete the mount */
|
|
|