208 lines
7.5 KiB
Diff
208 lines
7.5 KiB
Diff
|
autofs-5.1.4 - fix directory create permission
|
||
|
|
||
|
From: Ian Kent <raven@themaw.net>
|
||
|
|
||
|
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;
|