906c312bbf
The mntopts(3) functions support operations associated with a mount point. The main purpose of this commit is to document the mntopts(3) functions that now appear in 18 utilities in the base system. See mntopts(3) for the documentation details. The getmntopts() function appeared in 4.4BSD. The build_iovec(), build_iovec_argf(), free_iovec(), checkpath(), and rmslashes() functions were added with nmount(8) in FreeBSD 5.0. The getmntpoint() and chkdoreload() functions are being added in this commit. These functions should be in a library but for historic reasons are in a file in the sources for the mount(8) program. Thus, to access them the following lines need to be added to the Makefile of the program wanting to use them: SRCS+= getmntopts.c MOUNT= ${SRCTOP}/sbin/mount CFLAGS+= -I${MOUNT} .PATH: ${MOUNT} Once these changes have been MFC'ed to 13 they may be made into a library. Reviewed by: kib, gbe MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D37907
113 lines
4.7 KiB
C
113 lines
4.7 KiB
C
/*-
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*
|
|
* Copyright (c) 1994
|
|
* The Regents of the University of California. 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. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
|
|
*
|
|
* @(#)mntopts.h 8.7 (Berkeley) 3/29/95
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
struct mntopt {
|
|
const char *m_option; /* option name */
|
|
int m_inverse; /* if a negative option, e.g. "atime" */
|
|
long long m_flag; /* bit to set, e.g. MNT_RDONLY */
|
|
int m_altloc; /* 1 => set bit in altflags */
|
|
};
|
|
|
|
/* User-visible MNT_ flags. */
|
|
#define MOPT_ASYNC { "async", 0, MNT_ASYNC, 0 }
|
|
#define MOPT_NOATIME { "atime", 1, MNT_NOATIME, 0 }
|
|
#define MOPT_NOEXEC { "exec", 1, MNT_NOEXEC, 0 }
|
|
#define MOPT_NOSUID { "suid", 1, MNT_NOSUID, 0 }
|
|
#define MOPT_NOSYMFOLLOW { "symfollow", 1, MNT_NOSYMFOLLOW, 0 }
|
|
#define MOPT_RDONLY { "rdonly", 0, MNT_RDONLY, 0 }
|
|
#define MOPT_SYNC { "sync", 0, MNT_SYNCHRONOUS, 0 }
|
|
#define MOPT_UNION { "union", 0, MNT_UNION, 0 }
|
|
#define MOPT_USERQUOTA { "userquota", 0, 0, 0 }
|
|
#define MOPT_GROUPQUOTA { "groupquota", 0, 0, 0 }
|
|
#define MOPT_NOCLUSTERR { "clusterr", 1, MNT_NOCLUSTERR, 0 }
|
|
#define MOPT_NOCLUSTERW { "clusterw", 1, MNT_NOCLUSTERW, 0 }
|
|
#define MOPT_SUIDDIR { "suiddir", 0, MNT_SUIDDIR, 0 }
|
|
#define MOPT_SNAPSHOT { "snapshot", 0, MNT_SNAPSHOT, 0 }
|
|
#define MOPT_MULTILABEL { "multilabel", 0, MNT_MULTILABEL, 0 }
|
|
#define MOPT_ACLS { "acls", 0, MNT_ACLS, 0 }
|
|
#define MOPT_NFS4ACLS { "nfsv4acls", 0, MNT_NFS4ACLS, 0 }
|
|
#define MOPT_AUTOMOUNTED { "automounted",0, MNT_AUTOMOUNTED, 0 }
|
|
#define MOPT_UNTRUSTED { "untrusted", 0, MNT_UNTRUSTED, 0 }
|
|
|
|
/* Control flags. */
|
|
#define MOPT_FORCE { "force", 0, MNT_FORCE, 0 }
|
|
#define MOPT_UPDATE { "update", 0, MNT_UPDATE, 0 }
|
|
#define MOPT_RO { "ro", 0, MNT_RDONLY, 0 }
|
|
#define MOPT_RW { "rw", 1, MNT_RDONLY, 0 }
|
|
#define MOPT_NOCOVER { "cover", 1, MNT_NOCOVER, 0 }
|
|
#define MOPT_EMPTYDIR { "emptydir", 0, MNT_EMPTYDIR, 0 }
|
|
/* This is parsed by mount(8), but is ignored by specific mount_*(8)s. */
|
|
#define MOPT_AUTO { "auto", 0, 0, 0 }
|
|
|
|
/* A handy macro as terminator of MNT_ array. */
|
|
#define MOPT_END { NULL, 0, 0, 0 }
|
|
|
|
#define MOPT_FSTAB_COMPAT \
|
|
MOPT_RO, \
|
|
MOPT_RW, \
|
|
MOPT_AUTO
|
|
|
|
/* Standard options which all mounts can understand. */
|
|
#define MOPT_STDOPTS \
|
|
MOPT_USERQUOTA, \
|
|
MOPT_GROUPQUOTA, \
|
|
MOPT_FSTAB_COMPAT, \
|
|
MOPT_NOATIME, \
|
|
MOPT_NOEXEC, \
|
|
MOPT_SUIDDIR, /* must be before MOPT_NOSUID */ \
|
|
MOPT_NOSUID, \
|
|
MOPT_NOSYMFOLLOW, \
|
|
MOPT_RDONLY, \
|
|
MOPT_UNION, \
|
|
MOPT_NOCLUSTERR, \
|
|
MOPT_NOCLUSTERW, \
|
|
MOPT_MULTILABEL, \
|
|
MOPT_ACLS, \
|
|
MOPT_NFS4ACLS, \
|
|
MOPT_AUTOMOUNTED, \
|
|
MOPT_UNTRUSTED, \
|
|
MOPT_NOCOVER, \
|
|
MOPT_EMPTYDIR
|
|
|
|
void getmntopts(const char *, const struct mntopt *, int *, int *);
|
|
void rmslashes(char *, char *);
|
|
int checkpath(const char *, char resolved_path[]);
|
|
int checkpath_allow_file(const char *, char resolved_path[]);
|
|
struct statfs *getmntpoint(const char *);
|
|
int chkdoreload(struct statfs *, void (*)(const char *, ...) __printflike(1,2));
|
|
extern int getmnt_silent;
|
|
void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
|
|
void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
|
|
void free_iovec(struct iovec **iovec, int *iovlen);
|