mount: add support for mtab "uhelper" option

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>
This commit is contained in:
Karel Zak 2007-04-12 14:35:46 +02:00
parent 0b44c6155b
commit dd9f213ab6
3 changed files with 32 additions and 1 deletions

View 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 }
};

View 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

View 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. */