xref: /freebsd/lib/libutil/mntopts.h (revision cda23fc36d22bfa9d57d1a57c0daaeeb86bac94f)
1*cda23fc3SBrooks Davis /*-
2*cda23fc3SBrooks Davis  * SPDX-License-Identifier: BSD-3-Clause
3*cda23fc3SBrooks Davis  *
4*cda23fc3SBrooks Davis  * Copyright (c) 1994
5*cda23fc3SBrooks Davis  *      The Regents of the University of California.  All rights reserved.
6*cda23fc3SBrooks Davis  *
7*cda23fc3SBrooks Davis  * Redistribution and use in source and binary forms, with or without
8*cda23fc3SBrooks Davis  * modification, are permitted provided that the following conditions
9*cda23fc3SBrooks Davis  * are met:
10*cda23fc3SBrooks Davis  * 1. Redistributions of source code must retain the above copyright
11*cda23fc3SBrooks Davis  *    notice, this list of conditions and the following disclaimer.
12*cda23fc3SBrooks Davis  * 2. Redistributions in binary form must reproduce the above copyright
13*cda23fc3SBrooks Davis  *    notice, this list of conditions and the following disclaimer in the
14*cda23fc3SBrooks Davis  *    documentation and/or other materials provided with the distribution.
15*cda23fc3SBrooks Davis  * 3. Neither the name of the University nor the names of its contributors
16*cda23fc3SBrooks Davis  *    may be used to endorse or promote products derived from this software
17*cda23fc3SBrooks Davis  *    without specific prior written permission.
18*cda23fc3SBrooks Davis  *
19*cda23fc3SBrooks Davis  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20*cda23fc3SBrooks Davis  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*cda23fc3SBrooks Davis  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*cda23fc3SBrooks Davis  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23*cda23fc3SBrooks Davis  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*cda23fc3SBrooks Davis  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25*cda23fc3SBrooks Davis  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26*cda23fc3SBrooks Davis  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27*cda23fc3SBrooks Davis  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28*cda23fc3SBrooks Davis  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29*cda23fc3SBrooks Davis  * SUCH DAMAGE.
30*cda23fc3SBrooks Davis  */
31*cda23fc3SBrooks Davis 
32*cda23fc3SBrooks Davis #ifndef _MNTOPTS_H_
33*cda23fc3SBrooks Davis #define _MNTOPTS_H_
34*cda23fc3SBrooks Davis 
35*cda23fc3SBrooks Davis struct mntopt {
36*cda23fc3SBrooks Davis 	const char *m_option;	/* option name */
37*cda23fc3SBrooks Davis 	int m_inverse;		/* if a negative option, e.g. "atime" */
38*cda23fc3SBrooks Davis 	long long m_flag;	/* bit to set, e.g. MNT_RDONLY */
39*cda23fc3SBrooks Davis 	int m_altloc;		/* 1 => set bit in altflags */
40*cda23fc3SBrooks Davis };
41*cda23fc3SBrooks Davis 
42*cda23fc3SBrooks Davis /* User-visible MNT_ flags. */
43*cda23fc3SBrooks Davis #define MOPT_ASYNC		{ "async",	0, MNT_ASYNC, 0 }
44*cda23fc3SBrooks Davis #define MOPT_NOATIME		{ "atime",	1, MNT_NOATIME, 0 }
45*cda23fc3SBrooks Davis #define MOPT_NOEXEC		{ "exec",	1, MNT_NOEXEC, 0 }
46*cda23fc3SBrooks Davis #define MOPT_NOSUID		{ "suid",	1, MNT_NOSUID, 0 }
47*cda23fc3SBrooks Davis #define MOPT_NOSYMFOLLOW	{ "symfollow",  1, MNT_NOSYMFOLLOW, 0 }
48*cda23fc3SBrooks Davis #define MOPT_RDONLY		{ "rdonly",	0, MNT_RDONLY, 0 }
49*cda23fc3SBrooks Davis #define MOPT_SYNC		{ "sync",	0, MNT_SYNCHRONOUS, 0 }
50*cda23fc3SBrooks Davis #define MOPT_UNION		{ "union",	0, MNT_UNION, 0 }
51*cda23fc3SBrooks Davis #define MOPT_USERQUOTA		{ "userquota",	0, 0, 0 }
52*cda23fc3SBrooks Davis #define MOPT_GROUPQUOTA		{ "groupquota",	0, 0, 0 }
53*cda23fc3SBrooks Davis #define MOPT_NOCLUSTERR		{ "clusterr",	1, MNT_NOCLUSTERR, 0 }
54*cda23fc3SBrooks Davis #define MOPT_NOCLUSTERW		{ "clusterw",	1, MNT_NOCLUSTERW, 0 }
55*cda23fc3SBrooks Davis #define MOPT_SUIDDIR		{ "suiddir",	0, MNT_SUIDDIR, 0 }
56*cda23fc3SBrooks Davis #define MOPT_SNAPSHOT		{ "snapshot",	0, MNT_SNAPSHOT, 0 }
57*cda23fc3SBrooks Davis #define MOPT_MULTILABEL		{ "multilabel",	0, MNT_MULTILABEL, 0 }
58*cda23fc3SBrooks Davis #define MOPT_ACLS		{ "acls",	0, MNT_ACLS, 0 }
59*cda23fc3SBrooks Davis #define MOPT_NFS4ACLS		{ "nfsv4acls",	0, MNT_NFS4ACLS, 0 }
60*cda23fc3SBrooks Davis #define MOPT_AUTOMOUNTED	{ "automounted",0, MNT_AUTOMOUNTED, 0 }
61*cda23fc3SBrooks Davis #define MOPT_UNTRUSTED		{ "untrusted",  0, MNT_UNTRUSTED, 0 }
62*cda23fc3SBrooks Davis 
63*cda23fc3SBrooks Davis /* Control flags. */
64*cda23fc3SBrooks Davis #define MOPT_FORCE		{ "force",	0, MNT_FORCE, 0 }
65*cda23fc3SBrooks Davis #define MOPT_UPDATE		{ "update",	0, MNT_UPDATE, 0 }
66*cda23fc3SBrooks Davis #define MOPT_RO			{ "ro",		0, MNT_RDONLY, 0 }
67*cda23fc3SBrooks Davis #define MOPT_RW			{ "rw",		1, MNT_RDONLY, 0 }
68*cda23fc3SBrooks Davis #define	MOPT_NOCOVER		{ "cover",	1, MNT_NOCOVER, 0 }
69*cda23fc3SBrooks Davis #define	MOPT_EMPTYDIR		{ "emptydir",	0, MNT_EMPTYDIR, 0 }
70*cda23fc3SBrooks Davis /* This is parsed by mount(8), but is ignored by specific mount_*(8)s. */
71*cda23fc3SBrooks Davis #define MOPT_AUTO		{ "auto",	0, 0, 0 }
72*cda23fc3SBrooks Davis 
73*cda23fc3SBrooks Davis /* A handy macro as terminator of MNT_ array. */
74*cda23fc3SBrooks Davis #define MOPT_END		{ NULL,		0, 0, 0 }
75*cda23fc3SBrooks Davis 
76*cda23fc3SBrooks Davis #define MOPT_FSTAB_COMPAT						\
77*cda23fc3SBrooks Davis 	MOPT_RO,							\
78*cda23fc3SBrooks Davis 	MOPT_RW,							\
79*cda23fc3SBrooks Davis 	MOPT_AUTO
80*cda23fc3SBrooks Davis 
81*cda23fc3SBrooks Davis /* Standard options which all mounts can understand. */
82*cda23fc3SBrooks Davis #define MOPT_STDOPTS							\
83*cda23fc3SBrooks Davis 	MOPT_USERQUOTA,							\
84*cda23fc3SBrooks Davis 	MOPT_GROUPQUOTA,						\
85*cda23fc3SBrooks Davis 	MOPT_FSTAB_COMPAT,						\
86*cda23fc3SBrooks Davis 	MOPT_NOATIME,							\
87*cda23fc3SBrooks Davis 	MOPT_NOEXEC,							\
88*cda23fc3SBrooks Davis 	MOPT_SUIDDIR,		/* must be before MOPT_NOSUID */	\
89*cda23fc3SBrooks Davis 	MOPT_NOSUID,							\
90*cda23fc3SBrooks Davis 	MOPT_NOSYMFOLLOW,						\
91*cda23fc3SBrooks Davis 	MOPT_RDONLY,							\
92*cda23fc3SBrooks Davis 	MOPT_UNION,							\
93*cda23fc3SBrooks Davis 	MOPT_NOCLUSTERR,						\
94*cda23fc3SBrooks Davis 	MOPT_NOCLUSTERW,						\
95*cda23fc3SBrooks Davis 	MOPT_MULTILABEL,						\
96*cda23fc3SBrooks Davis 	MOPT_ACLS,							\
97*cda23fc3SBrooks Davis 	MOPT_NFS4ACLS,							\
98*cda23fc3SBrooks Davis 	MOPT_AUTOMOUNTED,						\
99*cda23fc3SBrooks Davis 	MOPT_UNTRUSTED,							\
100*cda23fc3SBrooks Davis 	MOPT_NOCOVER,							\
101*cda23fc3SBrooks Davis 	MOPT_EMPTYDIR
102*cda23fc3SBrooks Davis 
103*cda23fc3SBrooks Davis void getmntopts(const char *, const struct mntopt *, int *, int *);
104*cda23fc3SBrooks Davis void rmslashes(char *, char *);
105*cda23fc3SBrooks Davis int checkpath(const char *, char resolved_path[]);
106*cda23fc3SBrooks Davis int checkpath_allow_file(const char *, char resolved_path[]);
107*cda23fc3SBrooks Davis struct statfs *getmntpoint(const char *);
108*cda23fc3SBrooks Davis int chkdoreload(struct statfs *, void (*)(const char *, ...) __printflike(1,2));
109*cda23fc3SBrooks Davis extern int getmnt_silent;
110*cda23fc3SBrooks Davis void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
111*cda23fc3SBrooks Davis void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
112*cda23fc3SBrooks Davis void free_iovec(struct iovec **iovec, int *iovlen);
113*cda23fc3SBrooks Davis 
114*cda23fc3SBrooks Davis #endif /* !_MNTOPTS_H_ */
115