Add an fusermount(8) utility, mainly for compatibility with some FUSE
file systems.
This commit is contained in:
parent
41bef1b523
commit
460f24ec7b
7
usr.sbin/fusermount/Makefile
Normal file
7
usr.sbin/fusermount/Makefile
Normal file
@ -0,0 +1,7 @@
|
||||
# $NetBSD: Makefile,v 1.1 2007/04/26 21:13:39 agc Exp $
|
||||
|
||||
PROG=fusermount
|
||||
MAN=fusermount.8
|
||||
WARNS=4
|
||||
|
||||
.include <bsd.prog.mk>
|
110
usr.sbin/fusermount/fusermount.8
Normal file
110
usr.sbin/fusermount/fusermount.8
Normal file
@ -0,0 +1,110 @@
|
||||
.\" $NetBSD: fusermount.8,v 1.1 2007/04/26 21:13:39 agc Exp $ */
|
||||
.\"
|
||||
.\" Copyright (c) 2007 Alistair Crooks. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. The name of the author may not be used to endorse or promote
|
||||
.\" products derived from this software without specific prior written
|
||||
.\" permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
.\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
.\" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.\"
|
||||
.Dd April 26, 2007
|
||||
.Dt FUSERMOUNT 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fusermount
|
||||
.Nd manage librefuse mount items
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl chpx
|
||||
.Op Fl d Ar name
|
||||
.Ar refuseoptions
|
||||
.Nm
|
||||
.Fl u
|
||||
.Ar mountpoint(s)
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility acts as a frontend to the
|
||||
.Xr refuse 3
|
||||
library, allowing mounting and unmounting of
|
||||
refuse-based
|
||||
file systems.
|
||||
.Pp
|
||||
There are essentially two forms of the
|
||||
.Nm
|
||||
command.
|
||||
The first, and default option, is to mount a
|
||||
refuse-based
|
||||
file system.
|
||||
By using the
|
||||
.Fl u
|
||||
argument, the file system can be unmounted.
|
||||
.Pp
|
||||
The arguments to
|
||||
.Nm
|
||||
are as follows:
|
||||
.Bl -tag -width Ds
|
||||
.It Fl c
|
||||
sets a flag to enable kernel caching of files.
|
||||
At present this option has no effect.
|
||||
.It Fl d Ar name
|
||||
makes the name argument appear as the file system
|
||||
name in
|
||||
.Xr mount 8
|
||||
and
|
||||
.Xr df 1
|
||||
output.
|
||||
.It Fl h
|
||||
prints a usage message and exits.
|
||||
.It Fl p
|
||||
checks the file permissions.
|
||||
At present this option has no effect.
|
||||
.It Fl x
|
||||
allows mortal (non-root) users to access the file system.
|
||||
At present, this option has no effect.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility is included mainly for compatibility reasons, since some
|
||||
file systems demand its existence.
|
||||
.Sh EXIT STATUS
|
||||
.Nm
|
||||
returns 0 for successful operation, or
|
||||
non-zero if one of the operations did not complete successfully.
|
||||
.Sh SEE ALSO
|
||||
.Xr df 1 ,
|
||||
.Xr libpuffs 3 ,
|
||||
.Xr librefuse 3 ,
|
||||
.Xr mount 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
utility first appeared in
|
||||
.Nx 5.0 .
|
||||
.Sh AUTHORS
|
||||
The
|
||||
.Nm
|
||||
utility was written by
|
||||
.An Alistair Crooks
|
||||
.Aq agc@NetBSD.org .
|
150
usr.sbin/fusermount/fusermount.c
Normal file
150
usr.sbin/fusermount/fusermount.c
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright © 2007 Alistair Crooks. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifndef lint
|
||||
__COPYRIGHT("@(#) Copyright © (c) 2007 \
|
||||
The NetBSD Foundation, Inc. All rights reserved.");
|
||||
__RCSID("$NetBSD: fusermount.c,v 1.1 2007/04/26 21:13:39 agc Exp $");
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
enum {
|
||||
FlagCheckPerm = 1,
|
||||
FlagKernelCache,
|
||||
FlagNonrootUsers,
|
||||
|
||||
ActionMount,
|
||||
ActionUnmount
|
||||
};
|
||||
|
||||
/* unmount mount point(s) */
|
||||
static int
|
||||
refuse_unmount(int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
for (ret = 1, i = 0 ; i < argc ; i++) {
|
||||
if (unmount(argv[i], 0) < 0) {
|
||||
warn("can't unmount `%s'", argv[i]);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* print the usage meessage */
|
||||
static void
|
||||
usage(const char *prog)
|
||||
{
|
||||
(void) fprintf(stderr,
|
||||
"Usage: %s [-c] [-d name] [-h] [-p] [-u] [-x] mountpoint...\n",
|
||||
prog);
|
||||
(void) fprintf(stderr, "\t-c\tuse kernel cache\n");
|
||||
(void) fprintf(stderr, "\t-d name\tuse name in mount information\n");
|
||||
(void) fprintf(stderr, "\t-h\tprint help information\n");
|
||||
(void) fprintf(stderr, "\t-p\tcheck file permissions\n");
|
||||
(void) fprintf(stderr, "\t-u\tunmount mount point(s)\n");
|
||||
(void) fprintf(stderr,
|
||||
"\t-x\tallow access to mortal (non-root) users\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *progname;
|
||||
char *execme;
|
||||
int flags;
|
||||
int action;
|
||||
int i;
|
||||
|
||||
progname = NULL;
|
||||
flags = 0;
|
||||
action = ActionMount;
|
||||
while ((i = getopt(argc, argv, "cd:hpux")) != -1) {
|
||||
switch(i) {
|
||||
case 'c':
|
||||
flags |= FlagKernelCache;
|
||||
break;
|
||||
case 'd':
|
||||
progname = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
usage(*argv);
|
||||
exit(EXIT_SUCCESS);
|
||||
case 'p':
|
||||
flags |= FlagCheckPerm;
|
||||
break;
|
||||
case 'u':
|
||||
action = ActionUnmount;
|
||||
break;
|
||||
case 'x':
|
||||
if (geteuid() != 0) {
|
||||
err(EXIT_FAILURE,
|
||||
"-x option is only allowed for use by root");
|
||||
}
|
||||
flags |= FlagNonrootUsers;
|
||||
break;
|
||||
default:
|
||||
warnx("Unrecognised argument `%c'", i);
|
||||
usage(*argv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
if (optind >= argc - 2) {
|
||||
warnx("Not enough command line arguments");
|
||||
usage(*argv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
execme = argv[optind + 1];
|
||||
if (progname) {
|
||||
argv[optind + 1] = progname;
|
||||
}
|
||||
/* mountpoint = argv[optind]; */
|
||||
switch(action) {
|
||||
case ActionMount:
|
||||
execvp(execme, &argv[optind + 1]);
|
||||
break;
|
||||
case ActionUnmount:
|
||||
if (!refuse_unmount(argc - optind, argv + optind)) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
Loading…
Reference in New Issue
Block a user