Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115703155
D48137.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D48137.diff
View Options
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -215,7 +215,8 @@
static int do_mount(struct exportlist *, struct grouplist *, uint64_t,
struct expcred *, char *, int, struct statfs *, int, int *);
static int do_opt(char **, char **, struct exportlist *,
- struct grouplist *, int *, uint64_t *, struct expcred *);
+ struct grouplist *, int *, uint64_t *, struct expcred *,
+ char *);
static struct exportlist *ex_search(fsid_t *, struct exportlisthead *);
static struct exportlist *get_exp(void);
static void free_dir(struct dirlist *);
@@ -292,6 +293,7 @@
static int suspend_nfsd = 0;
static int nofork = 0;
static int skiplocalhost = 0;
+static int alldirs_fail = 0;
static int opt_flags;
static int have_v6 = 1;
@@ -320,6 +322,7 @@
#define OP_MASKLEN 0x200
#define OP_SEC 0x400
#define OP_CLASSMASK 0x800 /* mask not specified, is Class A/B/C default */
+#define OP_NOTROOT 0x1000 /* Mark the the mount path is not a fs root */
#ifdef DEBUG
static int debug = 1;
@@ -458,7 +461,7 @@
else
close(s);
- while ((c = getopt(argc, argv, "2Adeh:lNnp:RrSs")) != -1)
+ while ((c = getopt(argc, argv, "2Aadeh:lNnp:RrSs")) != -1)
switch (c) {
case '2':
force_v2 = 1;
@@ -466,6 +469,9 @@
case 'A':
warn_admin = 0;
break;
+ case 'a':
+ alldirs_fail = 1;
+ break;
case 'e':
/* now a no-op, since this is the default */
break;
@@ -1590,6 +1596,7 @@
v4root_phase = 0;
dirhead = (struct dirlist *)NULL;
unvis_dir[0] = '\0';
+ fsb.f_mntonname[0] = '\0';
while (get_line()) {
if (debug)
@@ -1650,7 +1657,7 @@
warnx("doing opt %s", cp);
got_nondir = 1;
if (do_opt(&cp, &endcp, ep, grp, &has_host,
- &exflags, &anon)) {
+ &exflags, &anon, unvis_dir)) {
getexp_err(ep, tgrp, NULL);
goto nextline;
}
@@ -1731,19 +1738,9 @@
fsb.f_fsid.val[1]);
}
- if (warn_admin != 0 &&
- (ep->ex_flag & EX_ADMINWARN) == 0 &&
- strcmp(unvis_dir, fsb.f_mntonname) !=
- 0) {
- if (debug)
- warnx("exporting %s exports entire "
- "%s file system", unvis_dir,
- fsb.f_mntonname);
- syslog(LOG_ERR, "Warning: exporting %s "
- "exports entire %s file system",
- unvis_dir, fsb.f_mntonname);
- ep->ex_flag |= EX_ADMINWARN;
- }
+ if (strcmp(unvis_dir, fsb.f_mntonname) !=
+ 0)
+ opt_flags |= OP_NOTROOT;
/*
* Add dirpath to export mount point.
@@ -1813,6 +1810,17 @@
"WARNING: No mask specified for %s, "
"using out-of-date default",
(&grp->gr_ptr.gt_net)->nt_name);
+ if ((opt_flags & OP_NOTROOT) != 0 && warn_admin != 0 &&
+ (ep->ex_flag & EX_ADMINWARN) == 0 && unvis_dir[0] != '\0' &&
+ fsb.f_mntonname[0] != '\0') {
+ if (debug)
+ warnx("exporting %s exports entire %s file "
+ "system", unvis_dir, fsb.f_mntonname);
+ syslog(LOG_ERR, "Warning: exporting %s exports "
+ "entire %s file system", unvis_dir,
+ fsb.f_mntonname);
+ ep->ex_flag |= EX_ADMINWARN;
+ }
if (check_options(dirhead)) {
getexp_err(ep, tgrp, NULL);
goto nextline;
@@ -2836,7 +2844,7 @@
*/
static int
do_opt(char **cpp, char **endcpp, struct exportlist *ep, struct grouplist *grp,
- int *has_hostp, uint64_t *exflagsp, struct expcred *cr)
+ int *has_hostp, uint64_t *exflagsp, struct expcred *cr, char *unvis_dir)
{
char *cpoptarg, *cpoptend;
char *cp, *endcp, *cpopt, savedc, savedc2;
@@ -2921,6 +2929,12 @@
syslog(LOG_ERR, "= after op: %s", cpopt);
return (1);
}
+ if ((opt_flags & OP_NOTROOT) != 0) {
+ syslog(LOG_ERR, "%s: path %s not mount point",
+ cpopt, unvis_dir);
+ if (alldirs_fail != 0)
+ return (1);
+ }
opt_flags |= OP_ALLDIRS;
} else if (!strcmp(cpopt, "public")) {
if (fnd_equal == 1) {
@@ -3317,7 +3331,8 @@
ret = 1;
goto error_exit;
}
- if (opt_flags & OP_ALLDIRS) {
+ if ((opt_flags & OP_ALLDIRS) &&
+ alldirs_fail != 0) {
if (errno == EINVAL)
syslog(LOG_ERR,
"-alldirs requested but %s is not a filesystem mountpoint",
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 28, 9:34 AM (15 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17828514
Default Alt Text
D48137.diff (4 KB)
Attached To
Mode
D48137: mountd.c: Add a new "-a" command line option for -alldris
Attached
Detach File
Event Timeline
Log In to Comment