From bd986f80513b7e43c2cfa9a31d651ead5bd1524a Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 11 Mar 1997 12:43:45 +0000 Subject: Merge from Lite2 (use new getvfsbyname() and mount(2) interface, cleanup) --- usr.sbin/mountd/Makefile | 3 +- usr.sbin/mountd/exports.5 | 10 ++-- usr.sbin/mountd/mountd.8 | 22 +++++---- usr.sbin/mountd/mountd.c | 113 +++++++++++++++++----------------------------- 4 files changed, 63 insertions(+), 85 deletions(-) (limited to 'usr.sbin/mountd') diff --git a/usr.sbin/mountd/Makefile b/usr.sbin/mountd/Makefile index f32e11b..c05730d 100644 --- a/usr.sbin/mountd/Makefile +++ b/usr.sbin/mountd/Makefile @@ -1,7 +1,8 @@ # From: @(#)Makefile 8.3 (Berkeley) 1/25/94 -# $Id$ +# $Id: Makefile,v 1.6 1997/02/22 14:33:01 peter Exp $ PROG= mountd +CFLAGS+= -D_NEW_VFSCONF CFLAGS+=-DNFS -DMFS -DCD9660 -DMSDOSFS MAN5= exports.5 netgroup.5 MAN8= mountd.8 diff --git a/usr.sbin/mountd/exports.5 b/usr.sbin/mountd/exports.5 index 73f0207..866cae7 100644 --- a/usr.sbin/mountd/exports.5 +++ b/usr.sbin/mountd/exports.5 @@ -29,9 +29,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" @(#)exports.5 8.2 (Berkeley) 1/28/94 +.\" @(#)exports.5 8.3 (Berkeley) 3/29/95 .\" -.Dd January 28, 1994 +.Dd March 29, 1995 .Dt EXPORTS 5 .Os .Sh NAME @@ -74,7 +74,9 @@ followed by the .Fl alldirs flag; this form allows the host(s) to mount at any point within the filesystem, -including regular files if the ``-r'' option is used on mountd. +including regular files if the +.Fl r +option is used on mountd. The pathnames must not have any symbolic links in them and should not have any "." or ".." components. Mount points for a filesystem may appear on multiple lines each with @@ -143,7 +145,7 @@ The .Fl kerb option specifies that the Kerberos authentication server should be used to authenticate and map client credentials. -This requires that the kernel be built with the NFSKERB option. +This option requires that the kernel be built with the NFSKERB option. .Pp The .Fl ro diff --git a/usr.sbin/mountd/mountd.8 b/usr.sbin/mountd/mountd.8 index 099ac55..ffed3cb 100644 --- a/usr.sbin/mountd/mountd.8 +++ b/usr.sbin/mountd/mountd.8 @@ -29,10 +29,10 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" From: @(#)mountd.8 8.1 (Berkeley) 6/9/93 -.\" $Id$ +.\" @(#)mountd.8 8.4 (Berkeley) 4/28/95 +.\" $Id: mountd.8,v 1.7 1997/02/22 14:33:02 peter Exp $ .\" -.Dd September 22, 1994 +.Dd April 28, 1995 .Dt MOUNTD 8 .Os .Sh NAME @@ -71,11 +71,15 @@ that require it. The .Fl r option allows mount RPCs requests for regular files to be served. -Although this seems to violate the mount protocol specification, some diskless -workstations do mount requests for their swapfiles and expect them to be -regular files. Since a regular file cannot be specified in /etc/exports, the -entire file system that the swapfiles reside in will have to be exported with -the ``-alldirs'' flag. +Although this seems to violate the mount protocol specification, +some diskless workstations do mount requests for +their swapfiles and expect them to be regular files. +Since a regular file cannot be specified in +.Pa /etc/exports , +the entire file system in which the swapfiles resides +will have to be exported with the +.Fl alldirs +flag. .It Ar exportsfile The .Ar exportsfile @@ -90,7 +94,7 @@ After changing the exports file, a hangup signal should be sent to the mountd daemon to get it to reload the export information. After sending the SIGHUP -(kill -HUP `cat /var/run/mountd.pid`), +(kill \-s HUP `cat /var/run/mountd.pid`), check the syslog output to see if mountd logged any parsing errors in the exports file. .Pp diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c index 9e57342..f094863 100644 --- a/usr.sbin/mountd/mountd.c +++ b/usr.sbin/mountd/mountd.c @@ -41,9 +41,9 @@ static char copyright[] = #endif /*not lint*/ #ifndef lint -/*static char sccsid[] = "From: @(#)mountd.c 8.8 (Berkeley) 2/20/94";*/ +/*static char sccsid[] = "@(#)mountd.c 8.15 (Berkeley) 5/1/95"; */ static const char rcsid[] = - "$Id$"; + "$Id: mountd.c,v 1.13 1997/02/22 14:33:02 peter Exp $"; #endif /*not lint*/ #include @@ -63,6 +63,9 @@ static const char rcsid[] = #endif #include #include +#include +#include +#include /* XXX need isofs in include */ #include @@ -250,18 +253,18 @@ main(argc, argv) SVCXPRT *udptransp, *tcptransp; int c; #ifdef __FreeBSD__ - struct vfsconf *vfc; + struct vfsconf vfc; + int error; - vfc = getvfsbyname("nfs"); - if(!vfc && vfsisloadable("nfs")) { + error = getvfsbyname("nfs", &vfc); + if (error && vfsisloadable("nfs")) { if(vfsload("nfs")) err(1, "vfsload(nfs)"); endvfsent(); /* flush cache */ - vfc = getvfsbyname("nfs"); + error = getvfsbyname("nfs", &vfc); } - if(!vfc) { + if (error) errx(1, "NFS support is not available in the running kernel"); - } #endif /* __FreeBSD__ */ while ((c = getopt(argc, argv, "dnr")) != EOF) @@ -276,7 +279,7 @@ main(argc, argv) debug = debug ? 0 : 1; break; default: - fprintf(stderr, "Usage: mountd [-r] [-n] [export_file]\n"); + fprintf(stderr, "Usage: mountd [-d] [-r] [-n] [export_file]\n"); exit(1); }; argc -= optind; @@ -341,13 +344,12 @@ mntsrv(rqstp, transp) struct exportlist *ep; struct dirlist *dp; struct fhreturn fhr; - struct authunix_parms *ucr; struct stat stb; struct statfs fsb; struct hostent *hp; u_long saddr; u_short sport; - char rpcpath[RPCMNT_PATHLEN+1], dirpath[MAXPATHLEN]; + char rpcpath[RPCMNT_PATHLEN + 1], dirpath[MAXPATHLEN]; int bad = ENOENT, defset, hostset; sigset_t sighup_mask; @@ -404,7 +406,7 @@ mntsrv(rqstp, transp) fhr.fhr_flag = defset; fhr.fhr_vers = rqstp->rq_vers; /* Get the file handle */ - bzero((caddr_t)&fhr.fhr_fh, sizeof(nfsfh_t)); + memset(&fhr.fhr_fh, 0, sizeof(nfsfh_t)); if (getfh(dirpath, (fhandle_t *)&fhr.fhr_fh) < 0) { bad = errno; syslog(LOG_ERR, "Can't get fh for %s", dirpath); @@ -691,7 +693,7 @@ get_exportlist() * And delete exports that are in the kernel for all local * file systems. * XXX: Should know how to handle all local exportable file systems - * instead of just MOUNT_UFS. + * instead of just "ufs". */ num = getmntinfo(&fsp, MNT_NOWAIT); for (i = 0; i < num; i++) { @@ -699,29 +701,16 @@ get_exportlist() struct ufs_args ua; struct iso_args ia; struct mfs_args ma; -#ifdef __NetBSD__ struct msdosfs_args da; } targs; - if (!strcmp(fsp->f_fstypename, MOUNT_MFS) || - !strcmp(fsp->f_fstypename, MOUNT_UFS) || - !strcmp(fsp->f_fstypename, MOUNT_MSDOS) || - !strcmp(fsp->f_fstypename, MOUNT_CD9660)) { + if (!strcmp(fsp->f_fstypename, "mfs") || + !strcmp(fsp->f_fstypename, "ufs") || + !strcmp(fsp->f_fstypename, "msdos") || + !strcmp(fsp->f_fstypename, "cd9660")) { targs.ua.fspec = NULL; targs.ua.export.ex_flags = MNT_DELEXPORT; if (mount(fsp->f_fstypename, fsp->f_mntonname, -#else - } targs; - - switch (fsp->f_type) { - case MOUNT_MFS: - case MOUNT_UFS: - case MOUNT_CD9660: - case MOUNT_MSDOS: - targs.ua.fspec = NULL; - targs.ua.export.ex_flags = MNT_DELEXPORT; - if (mount(fsp->f_type, fsp->f_mntonname, -#endif fsp->f_flags | MNT_UPDATE, (caddr_t)&targs) < 0) syslog(LOG_ERR, "Can't delete exports for %s", @@ -963,7 +952,7 @@ get_exp() ep = (struct exportlist *)malloc(sizeof (struct exportlist)); if (ep == (struct exportlist *)NULL) out_of_mem(); - bzero((caddr_t)ep, sizeof (struct exportlist)); + memset(ep, 0, sizeof(struct exportlist)); return (ep); } @@ -978,7 +967,7 @@ get_grp() gp = (struct grouplist *)malloc(sizeof (struct grouplist)); if (gp == (struct grouplist *)NULL) out_of_mem(); - bzero((caddr_t)gp, sizeof (struct grouplist)); + memset(gp, 0, sizeof(struct grouplist)); return (gp); } @@ -1270,12 +1259,12 @@ do_opt(cpp, endcpp, ep, grp, has_hostp, exflagsp, cr) while (cpopt && *cpopt) { allflag = 1; usedarg = -2; - if (cpoptend = index(cpopt, ',')) { + if (cpoptend = strchr(cpopt, ',')) { *cpoptend++ = '\0'; - if (cpoptarg = index(cpopt, '=')) + if (cpoptarg = strchr(cpopt, '=')) *cpoptarg++ = '\0'; } else { - if (cpoptarg = index(cpopt, '=')) + if (cpoptarg = strchr(cpopt, '=')) *cpoptarg++ = '\0'; else { *cp = savedc; @@ -1418,13 +1407,12 @@ get_host(cp, grp, tgrp) malloc(sizeof(struct hostent)); if (nhp == (struct hostent *)NULL) out_of_mem(); - bcopy((caddr_t)hp, (caddr_t)nhp, - sizeof(struct hostent)); + memmove(nhp, hp, sizeof(struct hostent)); i = strlen(hp->h_name)+1; nhp->h_name = (char *)malloc(i); if (nhp->h_name == (char *)NULL) out_of_mem(); - bcopy(hp->h_name, nhp->h_name, i); + memmove(nhp->h_name, hp->h_name, i); addrp = hp->h_addr_list; i = 1; while (*addrp++) @@ -1439,8 +1427,7 @@ get_host(cp, grp, tgrp) malloc(hp->h_length); if (*naddrp == (char *)NULL) out_of_mem(); - bcopy(*addrp, *naddrp, - hp->h_length); + memmove(*naddrp, *addrp, hp->h_length); addrp++; naddrp++; } @@ -1519,10 +1506,9 @@ get_isoaddr(cp, grp) malloc(sizeof (struct sockaddr_iso)); if (isoaddr == (struct sockaddr_iso *)NULL) out_of_mem(); - bzero((caddr_t)isoaddr, sizeof (struct sockaddr_iso)); - bcopy((caddr_t)isop, (caddr_t)&isoaddr->siso_addr, - sizeof (struct iso_addr)); - isoaddr->siso_len = sizeof (struct sockaddr_iso); + memset(isoaddr, 0, sizeof(struct sockaddr_iso)); + memmove(&isoaddr->siso_addr, isop, sizeof(struct iso_addr)); + isoaddr->siso_len = sizeof(struct sockaddr_iso); isoaddr->siso_family = AF_ISO; grp->gr_type = GT_ISO; grp->gr_ptr.gt_isoaddr = isoaddr; @@ -1573,8 +1559,8 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb) args.ua.fspec = 0; args.ua.export.ex_flags = exflags; args.ua.export.ex_anon = *anoncrp; - bzero((char *)&sin, sizeof(sin)); - bzero((char *)&imask, sizeof(imask)); + memset(&sin, 0, sizeof(sin)); + memset(&imask, 0, sizeof(imask)); sin.sin_family = AF_INET; sin.sin_len = sizeof(sin); imask.sin_family = AF_INET; @@ -1640,13 +1626,9 @@ do_mount(ep, grp, exflags, anoncrp, dirp, dirplen, fsb) * Maybe I should just use the fsb->f_mntonname path instead * of looping back up the dirp to the mount point?? * Also, needs to know how to export all types of local - * exportable file systems and not just MOUNT_UFS. + * exportable file systems and not just "ufs". */ -#ifdef __NetBSD__ while (mount(fsb->f_fstypename, dirp, -#else - while (mount(fsb->f_type, dirp, -#endif fsb->f_flags | MNT_UPDATE, (caddr_t)&args) < 0) { if (cp) *cp-- = savedc; @@ -1896,7 +1878,7 @@ void get_mountlist() { struct mountlist *mlp, **mlpp; - char *eos, *dirp; + char *host, *dirp, *cp; int len; char str[STRSIZ]; FILE *mlfile; @@ -1907,27 +1889,16 @@ get_mountlist() } mlpp = &mlhead; while (fgets(str, STRSIZ, mlfile) != NULL) { - if ((dirp = index(str, '\t')) == NULL && - (dirp = index(str, ' ')) == NULL) + cp = str; + host = strsep(&cp, " \t\n"); + dirp = strsep(&cp, " \t\n"); + if (host == NULL || dirp == NULL) continue; mlp = (struct mountlist *)malloc(sizeof (*mlp)); - len = dirp-str; - if (len > RPCMNT_NAMELEN) - len = RPCMNT_NAMELEN; - bcopy(str, mlp->ml_host, len); - mlp->ml_host[len] = '\0'; - while (*dirp == '\t' || *dirp == ' ') - dirp++; - if ((eos = index(dirp, '\t')) == NULL && - (eos = index(dirp, ' ')) == NULL && - (eos = index(dirp, '\n')) == NULL) - len = strlen(dirp); - else - len = eos-dirp; - if (len > RPCMNT_PATHLEN) - len = RPCMNT_PATHLEN; - bcopy(dirp, mlp->ml_dirp, len); - mlp->ml_dirp[len] = '\0'; + strncpy(mlp->ml_host, host, RPCMNT_NAMELEN); + mlp->ml_host[RPCMNT_NAMELEN] = '\0'; + strncpy(mlp->ml_dirp, dirp, RPCMNT_PATHLEN); + mlp->ml_dirp[RPCMNT_PATHLEN] = '\0'; mlp->ml_next = (struct mountlist *)NULL; *mlpp = mlp; mlpp = &mlp->ml_next; -- cgit v1.1