diff options
author | joerg <joerg@FreeBSD.org> | 2002-07-18 20:52:17 +0000 |
---|---|---|
committer | joerg <joerg@FreeBSD.org> | 2002-07-18 20:52:17 +0000 |
commit | 63afba9f66e6db9c328d43e463254994b758bf41 (patch) | |
tree | 6194f27b4b092874f62873ebbd9d5a0f1f0e6eb5 /usr.sbin/mountd/mountd.c | |
parent | 66e9d99f6c46c9edc7c7f30ae1a88510c54c0ce5 (diff) | |
download | FreeBSD-src-63afba9f66e6db9c328d43e463254994b758bf41.zip FreeBSD-src-63afba9f66e6db9c328d43e463254994b758bf41.tar.gz |
Try to give a more descriptive error message for the pilot error of
attempting to export the non-root of a filesystem with -alldirs. This
pilot error seems to be very common, and the "could not remount" error
message doesn't give much hints about the real reason. See the old PR
below for an example.
While i was at it, make it possible to entirely omit the often
annoying error message in that case by specifying the "quiet" exports
flag. This allows to specify something like
/cdrom -alldirs,ro,quiet <where to export to>
which will silently fail if nothing is mounted under /cdrom, but do
the rigth thing as soon as you mount something.
While doing this, i've put the embedded example in the exports(5) man
page into a subsection of its own as it ought to be.
Thanks for Paul Southworth for reminding me about this problem.
PR: bin/4448
MFC after: 1 month
Diffstat (limited to 'usr.sbin/mountd/mountd.c')
-rw-r--r-- | usr.sbin/mountd/mountd.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c index 3d0df88..2798915 100644 --- a/usr.sbin/mountd/mountd.c +++ b/usr.sbin/mountd/mountd.c @@ -243,6 +243,7 @@ int mountdlockfd; #define OP_NET 0x10 #define OP_ALLDIRS 0x40 #define OP_HAVEMASK 0x80 /* A mask was specified or inferred. */ +#define OP_QUIET 0x100 #define OP_MASKLEN 0x200 #ifdef DEBUG @@ -1240,7 +1241,8 @@ getexp_err(ep, grp) { struct grouplist *tgrp; - syslog(LOG_ERR, "bad exports list line %s", line); + if (!(opt_flags & OP_QUIET)) + syslog(LOG_ERR, "bad exports list line %s", line); if (ep && (ep->ex_flag & EX_LINKED) == 0) free_exp(ep); while (grp) { @@ -1580,6 +1582,8 @@ do_opt(cpp, endcpp, ep, grp, has_hostp, exflagsp, cr) opt_flags |= OP_MAPALL; } else if (cpoptarg && !strcmp(cpopt, "index")) { ep->ex_indexfile = strdup(cpoptarg); + } else if (!strcmp(cpopt, "quiet")) { + opt_flags |= OP_QUIET; } else { syslog(LOG_ERR, "bad opt %s", cpopt); return (1); @@ -1812,6 +1816,8 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb) *cp-- = savedc; else cp = dirp + dirplen - 1; + if (opt_flags & OP_QUIET) + return (1); if (errno == EPERM) { if (debug) warnx("can't change attributes for %s", @@ -1821,8 +1827,14 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb) return (1); } if (opt_flags & OP_ALLDIRS) { - syslog(LOG_ERR, "could not remount %s: %m", - dirp); + if (errno == EINVAL) + syslog(LOG_ERR, + "-alldirs requested but %s is not a filesystem mountpoint", + dirp); + else + syslog(LOG_ERR, + "could not remount %s: %m", + dirp); return (1); } /* back up over the last component */ |