aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <miklos@szeredi.hu>2004-02-17 08:57:29 +0000
committerGravatar Miklos Szeredi <miklos@szeredi.hu>2004-02-17 08:57:29 +0000
commit69cc79ad513988f2cf1a2ebc72a0327c6d043161 (patch)
tree4aab6ea6f9061354633870e088d9c15a6cd14084 /util
parent3ca0dc5d3ef86d72183a13d5e59c776876e00eab (diff)
support for user mounts
Diffstat (limited to 'util')
-rw-r--r--util/fusermount.c31
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;
}