diff options
Diffstat (limited to 'contrib/fuse-lib/mount-common.c')
| -rw-r--r-- | contrib/fuse-lib/mount-common.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/contrib/fuse-lib/mount-common.c b/contrib/fuse-lib/mount-common.c index fd6cce44e3d..cffd4c01ed5 100644 --- a/contrib/fuse-lib/mount-common.c +++ b/contrib/fuse-lib/mount-common.c @@ -23,7 +23,7 @@ * see the commit log and per-function comments. */ -#ifndef __NetBSD__ +#ifdef GF_LINUX_HOST_OS /* FUSE: cherry-picked bd99f9cf */ static int mtab_needs_update (const char *mnt) @@ -32,7 +32,7 @@ mtab_needs_update (const char *mnt) struct stat stbuf; /* If mtab is within new mount, don't touch it */ - if (strncmp (mnt, _PATH_MOUNTED, strlen (mnt)) == 0 && + if (strncmp (mnt, _PATH_MOUNTED, sizeof (_PATH_MOUNTED) - 1) == 0 && _PATH_MOUNTED[strlen (mnt)] == '/') return 0; @@ -69,9 +69,9 @@ mtab_needs_update (const char *mnt) return 1; } -#else /* __NetBSD__ */ +#else /* GF_LINUX_HOST_OS */ #define mtab_needs_update(x) 1 -#endif /* __NetBSD__ */ +#endif /* GF_LINUX_HOST_OS */ /* FUSE: called add_mount_legacy(); R.I.P. as of cbd3a2a8 */ int @@ -105,7 +105,11 @@ fuse_mnt_add_mount (const char *progname, const char *fsname, char *tmp; sigprocmask (SIG_SETMASK, &oldmask, NULL); - setuid (geteuid ()); + res = setuid (geteuid ()); + if (res != 0) { + GFFUSE_LOGERR ("%s: setuid: %s", progname, strerror (errno)); + exit (1); + } /* * hide in a directory, where mount isn't able to resolve @@ -245,11 +249,24 @@ fuse_mnt_umount (const char *progname, const char *abs_mnt, } if (res == 0) { sigprocmask (SIG_SETMASK, &oldmask, NULL); - setuid (geteuid ()); - execl ("/bin/umount", "/bin/umount", "-i", rel_mnt, - lazy ? "-l" : NULL, NULL); - GFFUSE_LOGERR ("%s: failed to execute /bin/umount: %s", + res = setuid (geteuid ()); + if (res != 0) { + GFFUSE_LOGERR ("%s: setuid: %s", progname, strerror (errno)); + exit (1); + } +#ifdef GF_LINUX_HOST_OS + execl ("umount", "umount", "-i", rel_mnt, + lazy ? "-l" : NULL, NULL); + GFFUSE_LOGERR ("%s: failed to execute umount: %s", + progname, strerror (errno)); +#elif __NetBSD__ + /* exitting the filesystem causes the umount */ + exit (0); +#else + execl ("umount", "umount", "-f", rel_mnt, NULL); + GFFUSE_LOGERR ("%s: failed to execute umount: %s", progname, strerror (errno)); +#endif /* GF_LINUX_HOST_OS */ exit (1); } res = waitpid (res, &status, 0); |
