- util-linux should provide plugin infrastructure for HAL --- util-linux-2.13-pre6/mount/mount.c.uhelper 2006-09-15 13:23:23.000000000 +0200 +++ util-linux-2.13-pre6/mount/mount.c 2006-09-15 13:23:23.000000000 +0200 @@ -183,7 +183,7 @@ }; 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; @@ -196,6 +196,7 @@ { "encryption=", 0, &opt_encryption }, { "speed=", 0, &opt_speed }, { "comment=", 1, &opt_comment }, + { "uhelper=", 0, &opt_uhelper }, { NULL, 0, NULL } }; --- util-linux-2.13-pre6/mount/umount.8.uhelper 2004-11-10 20:49:37.000000000 +0100 +++ util-linux-2.13-pre6/mount/umount.8 2006-09-15 14:02:25.000000000 +0200 @@ -122,6 +122,19 @@ 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. [\-nlfvr] " "dir " | " device " +.br + +where the is filesystem type or a value from "uhelper=" mtab option. + +The uhelper (unprivileged umount request helper) is possible 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 --- util-linux-2.13-pre6/mount/umount.c.uhelper 2006-09-15 13:23:23.000000000 +0200 +++ util-linux-2.13-pre6/mount/umount.c 2006-09-15 13:23:23.000000000 +0200 @@ -565,11 +565,24 @@ if (suid) { char *mtab_user = NULL; + char *uhelper = NULL; if (!mc) die(2, _("umount: %s is not mounted (according to mtab)"), file); + /* + * uhelper - unprivileged umount helper + * -- external umount (for example HAL mounts) + */ + 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. */