diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-02-17 08:57:29 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-02-17 08:57:29 +0000 |
commit | 69cc79ad513988f2cf1a2ebc72a0327c6d043161 (patch) | |
tree | 4aab6ea6f9061354633870e088d9c15a6cd14084 /util | |
parent | 3ca0dc5d3ef86d72183a13d5e59c776876e00eab (diff) |
support for user mounts
Diffstat (limited to 'util')
-rw-r--r-- | util/fusermount.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/util/fusermount.c b/util/fusermount.c index 3d27219..ee4c005 100644 --- a/util/fusermount.c +++ b/util/fusermount.c @@ -396,13 +396,15 @@ static int mount_fuse(const char *mnt, int flags, const char *fsname) res = do_mount(fsname, mnt, type, stbuf.st_mode & S_IFMT, fd, flags); if(res == -1) return -1; - - mtablock = lock_mtab(); - res = add_mount(fsname, mnt, type); - unlock_mtab(mtablock); - if(res == -1) { - umount(mnt); - return -1; + + if(geteuid() == 0) { + mtablock = lock_mtab(); + res = add_mount(fsname, mnt, type); + unlock_mtab(mtablock); + if(res == -1) { + umount(mnt); + return -1; + } } return fd; @@ -580,12 +582,19 @@ int main(int argc, char *argv[]) restore_privs(); if(unmount) { - int mtablock = lock_mtab(); - res = remove_mount(mnt, quiet); - unlock_mtab(mtablock); + if(geteuid() == 0) { + int mtablock = lock_mtab(); + res = remove_mount(mnt, quiet); + unlock_mtab(mtablock); + } else { + res = umount2(mnt, 2); + if(res == -1) { + fprintf(stderr, "%s: failed to unmount %s: %s\n", progname, mnt, + strerror(errno)); + } + } if(res == -1) exit(1); - return 0; } |