]> err.no Git - util-linux/commitdiff
mount: add support for mtab "uhelper" option
authorKarel Zak <kzak@redhat.com>
Thu, 12 Apr 2007 12:35:46 +0000 (14:35 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 24 Apr 2007 22:20:40 +0000 (00:20 +0200)
The helper is an external /sbin/umount.<suffix> program where the
suffix is a value from the uhelper= option from /etc/mtab.

The uhelper (unprivileged umount helper) is possible to used when
non-root user wants to umount a mountpoint which is not defined in the
/etc/fstab file (e.g devices mounted by HAL).

This option is already supported by HAL upstream.

Signed-off-by: Karel Zak <kzak@redhat.com>
mount/mount.c
mount/umount.8
mount/umount.c

index 1360d235dfeaf5cff8b4927c22937447b7c15525..7c1f1bdc690d4c073019f77938fb82d85f3dd42c 100644 (file)
@@ -188,7 +188,7 @@ static const struct opt_map opt_map[] = {
 };
 
 static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_encryption,
-       *opt_speed, *opt_comment;
+       *opt_speed, *opt_comment, *opt_uhelper;
 
 static struct string_opt_map {
   char *tag;
@@ -201,6 +201,7 @@ static struct string_opt_map {
   { "encryption=", 0, &opt_encryption },
   { "speed=", 0, &opt_speed },
   { "comment=", 1, &opt_comment },
+  { "uhelper=", 0, &opt_uhelper },
   { NULL, 0, NULL }
 };
 
index fafbff269c13e57ab298cede0b367e87ba978da4..5d38ac8d344bedea64089733df790799fb714488 100644 (file)
@@ -122,6 +122,19 @@ or when the \-d option was given.
 Any pending loop devices can be freed using `losetup -d', see
 .BR losetup (8).
 
+.SH NOTES
+The syntax of external umount helpers is:
+
+.br
+.BI "/sbin/umount.<suffix> [\-nlfvr] " "dir " | " device "
+.br
+
+where the <suffix> is filesystem type or a value from "uhelper=" mtab option.
+
+The uhelper (unprivileged umount helper) is possible to used when non-root user
+wants to umount a mountpoint which is not defined in the /etc/fstab file (e.g
+devices mounted by HAL).
+
 .SH FILES
 .I /etc/mtab
 table of mounted file systems
index 676ed8cc23b7003734e2ba86add38141d14d2860..8a59f120eaeaa6fb90590fb2da669708e374e671 100644 (file)
@@ -565,6 +565,23 @@ umount_file (char *arg) {
                        die(2,
                            _("umount: %s is not mounted (according to mtab)"),
                            file);
+               /*
+                * uhelper - unprivileged umount helper
+                * -- external umount (for example HAL mounts)
+                */
+               if (external_allowed) {
+                       char *uhelper = NULL;
+
+                       if (mc->m.mnt_opts)
+                               uhelper = get_value(mc->m.mnt_opts, "uhelper=");
+                       if (uhelper) {
+                               int status = 0;
+                               if (check_special_umountprog(arg, arg,
+                                                       uhelper, &status))
+                                       return status;
+                       }
+               }
+
                /* The 2.4 kernel will generally refuse to mount the same
                   filesystem on the same mount point, but will accept NFS.
                   So, unmounting must be possible. */