]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
umount: call /sbin/umount.<uhelper> for root user too
authorKarel Zak <kzak@redhat.com>
Tue, 15 Mar 2011 09:31:06 +0000 (10:31 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 15 Mar 2011 09:31:06 +0000 (10:31 +0100)
Originally the "uhelper=" was ignored for root, now the umount command
calls /sbin/umount.<uhelper> always.

This change is necessary for things like pam_mount where a device has
to be uninitialized by uhelper rather than directly umounted by
umount(2).

Note that all uhelpers has to be linked with libmount or execute

umount -fake -i /mountpoint

to remove mountpoint entry from /etc/mtab or /dev/.mount/utab.

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

index 3606caae904a72563cd93a7aa38e38e2fb0f01e2..b2d8c856959f6e099a5d5e78344ecb3992a8477e 100644 (file)
@@ -155,10 +155,6 @@ where the <suffix> is filesystem type or a value from "uhelper=" mtab option.
 The \-t option is used  for filesystems with subtypes support (for example
 /sbin/mount.fuse -t fuse.sshfs).
 
-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 42671f465eefd42dd1391e373c9d46582de2d632..3e4dc337b999da9adbe477ae96437cb094ca8ef5 100644 (file)
@@ -559,6 +559,22 @@ umount_file (char *arg) {
        if (!mc && verbose)
                printf(_("Could not find %s in mtab\n"), file);
 
+       /*
+        * uhelper - umount helper
+        * -- external umount (for example HAL mounts)
+        */
+       if (external_allowed && mc) {
+               char *uhelper = NULL;
+
+               if (mc->m.mnt_opts)
+                       uhelper = get_option_value(mc->m.mnt_opts, "uhelper=");
+               if (uhelper) {
+                       int status = 0;
+                       if (check_special_umountprog(arg, arg, uhelper, &status))
+                               return status;
+               }
+       }
+
        if (restricted) {
                char *mtab_user = NULL;
 
@@ -566,23 +582,6 @@ 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_option_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.