SCCS-vsn: sbin/mountd/mountd.c 8.2
#endif not lint
#ifndef lint
#endif not lint
#ifndef lint
-static char sccsid[] = "@(#)mountd.c 8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)mountd.c 8.2 (Berkeley) %G%";
#endif not lint
#include <pwd.h>
#endif not lint
#include <pwd.h>
{
register struct exportlist *ep;
int false = 0;
{
register struct exportlist *ep;
int false = 0;
omask = sigblock(sigmask(SIGHUP));
ep = exphead;
while (ep) {
omask = sigblock(sigmask(SIGHUP));
ep = exphead;
while (ep) {
- if (put_exlist(ep->ex_dirl, xdrsp, ep->ex_defdir))
+ putdef = 0;
+ if (put_exlist(ep->ex_dirl, xdrsp, ep->ex_defdir, &putdef))
+ goto errout;
+ if (ep->ex_defdir && putdef == 0 &&
+ put_exlist(ep->ex_defdir, xdrsp, (struct dirlist *)0,
+ &putdef))
goto errout;
ep = ep->ex_next;
}
goto errout;
ep = ep->ex_next;
}
* Called from xdr_explist() to traverse the tree and export the
* directory paths.
*/
* Called from xdr_explist() to traverse the tree and export the
* directory paths.
*/
-put_exlist(dp, xdrsp, adp)
+put_exlist(dp, xdrsp, adp, putdefp)
register struct dirlist *dp;
XDR *xdrsp;
struct dirlist *adp;
register struct dirlist *dp;
XDR *xdrsp;
struct dirlist *adp;
{
register struct grouplist *grp;
register struct hostlist *hp;
{
register struct grouplist *grp;
register struct hostlist *hp;
- if (put_exlist(dp->dp_left, xdrsp, adp))
+ if (put_exlist(dp->dp_left, xdrsp, adp, putdefp))
return (1);
if (!xdr_bool(xdrsp, &true))
return (1);
strp = dp->dp_dirp;
if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
return (1);
return (1);
if (!xdr_bool(xdrsp, &true))
return (1);
strp = dp->dp_dirp;
if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
return (1);
- if (adp && !strcmp(dp->dp_dirp, adp->dp_dirp))
+ if (adp && !strcmp(dp->dp_dirp, adp->dp_dirp)) {
if ((dp->dp_flag & DP_DEFSET) == 0 &&
(gotalldir == 0 || (adp->dp_flag & DP_DEFSET) == 0)) {
hp = dp->dp_hosts;
if ((dp->dp_flag & DP_DEFSET) == 0 &&
(gotalldir == 0 || (adp->dp_flag & DP_DEFSET) == 0)) {
hp = dp->dp_hosts;
}
if (!xdr_bool(xdrsp, &false))
return (1);
}
if (!xdr_bool(xdrsp, &false))
return (1);
- if (put_exlist(dp->dp_right, xdrsp, adp))
+ if (put_exlist(dp->dp_right, xdrsp, adp, putdefp))
return (1);
}
return (0);
return (1);
}
return (0);
while (!done) {
switch (grp->gr_type) {
case GT_HOST:
while (!done) {
switch (grp->gr_type) {
case GT_HOST:
sin.sin_addr.s_addr = **addrp;
sin.sin_addr.s_addr = **addrp;
- else
- sin.sin_addr.s_addr = INADDR_ANY;
+ args.slen = sizeof(sin);
+ } else
+ args.slen = 0;
args.saddr = (struct sockaddr *)&sin;
args.saddr = (struct sockaddr *)&sin;
- args.slen = sizeof(sin);
args.msklen = 0;
break;
case GT_NET:
args.msklen = 0;
break;
case GT_NET: