diff options
author | attilio <attilio@FreeBSD.org> | 2013-03-09 12:45:36 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2013-03-09 12:45:36 +0000 |
commit | 63326e81a339a762e08d5303facf65cc9cea9b87 (patch) | |
tree | 21c1d4f35c98c9eb7c1dae4a3d9eedfb120cbd53 /usr.sbin | |
parent | 359add023cede52e6b7a5d624d929f7331925364 (diff) | |
download | FreeBSD-src-63326e81a339a762e08d5303facf65cc9cea9b87.zip FreeBSD-src-63326e81a339a762e08d5303facf65cc9cea9b87.tar.gz |
Garbage collect NWFS and NCP bits which are now completely disconnected
from the tree since few months.
This patch is not targeted for MFC.
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/mount_nwfs/Makefile | 15 | ||||
-rw-r--r-- | usr.sbin/mount_nwfs/mount_nwfs.8 | 230 | ||||
-rw-r--r-- | usr.sbin/mount_nwfs/mount_nwfs.c | 369 |
3 files changed, 0 insertions, 614 deletions
diff --git a/usr.sbin/mount_nwfs/Makefile b/usr.sbin/mount_nwfs/Makefile deleted file mode 100644 index 8f46581..0000000 --- a/usr.sbin/mount_nwfs/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# $FreeBSD$ - -PROG= mount_nwfs -SRCS= mount_nwfs.c getmntopts.c -MAN= mount_nwfs.8 - -MOUNT= ${.CURDIR}/../../sbin/mount -CFLAGS+= -DNWFS -I${MOUNT} - -.PATH: ${MOUNT} - -DPADD= ${LIBNCP} ${LIBIPX} -LDADD= -lncp -lipx - -.include <bsd.prog.mk> diff --git a/usr.sbin/mount_nwfs/mount_nwfs.8 b/usr.sbin/mount_nwfs/mount_nwfs.8 deleted file mode 100644 index 3946f71..0000000 --- a/usr.sbin/mount_nwfs/mount_nwfs.8 +++ /dev/null @@ -1,230 +0,0 @@ -.\" $FreeBSD$ -.Dd October 14, 1999 -.Dt MOUNT_NWFS 8 -.Os -.Sh NAME -.Nm mount_nwfs -.Nd mount NetWare volume from a NetWare file server -.Sh SYNOPSIS -.Nm -.Op Fl Chv -.Fl S Ar server -.Fl U Ar user -.Op Fl connection\ options -.Fl V Ar volume -.Op Fl M Ar mode -.Op Fl c Ar case -.Op Fl d Ar mode -.Op Fl f Ar mode -.Op Fl g Ar gid -.Op Fl l Ar locale -.Op Fl n Ar os2 -.Op Fl u Ar uid -.Op Fl w Ar scheme -.Ar node -.Nm -.Op Fl options -.Ar /server:user/volume[/path] -.Ar node -.Sh DESCRIPTION -The -.Nm -utility allows to mount volume from a NetWare server. -It may use either -existing connection or create new: if no usable connection was found -it will try to establish a new one. -Connection has count of references to it, -so when last mount will be dismounted connection will be closed. -It is -possible to create connection without any mounts (but use it for them) with -.Xr ncplogin 1 . -.Pp -Note two forms of command line. -In the first form, server and user specified -via -.Fl S -and -.Fl U -options respectively. -In the second form server and user specified in -.Ar special -part of -.Xr mount 8 -command line arguments (the -.Fl S , -.Fl U -and -.Fl V -options are not used in this case). -This allows use of -.Xr fstab 5 -file (see -.Sx EXAMPLES -below). -.Pp -The options are: -.Bl -tag -width indent -.It Fl S Ar server -Name of NetWare server to connect. -For native IP you will need also -.Fl A -option. -.It Fl U Ar user -Name of user used in login sequence. -.It Fl connection\ options -See -.Xr ncplogin 1 -for details. -.It Fl V Ar volume -Volume name to mount. -Volume name can also be specified after all options and -before -.Ar mount-point . -.It Ar node -Path to mount volume. -.It Fl c Ar case -Select a -.Ar case -option which affects on name representation. -.Ar Case -can be one of the following: -.Bl -tag -width "ValueXX" -.It Em Value -.Em Meaning -.It l -All existing file names converted to lower case. -Newly created file gets a lower case under OS2 name space. -This is the default when mounting volumes with DOS name space. -.It L -Same as 'l' but file system tries to be case insensitive. -May not work well. -.It n -No case conversion is performed. -.Em Warning ! -Use this option with DOS name space only as a last resort, -because creating a lower case name in the DOS name space -can lead to unpredictable results. -This is the default when mounting volumes with OS2 name space. -.It u -All existing file names converted to upper case. -Newly created file gets an upper case under OS2 name space. -.It U -Same as 'u' but file system tries to be case insensitive. -May not work well. -.El -.It Fl f Ar mode , Fl d Ar mode -Specify permissions that should be assigned to files and directories. -The values must be specified as octal numbers. -Default value for the file mode -is taken from mount point, default value for the dir mode adds execute -permission where the file mode gives read permission. -.Pp -Note that these permissions can differ from the rights granted by NetWare -server. -.It Fl n Ar namespace -Do not use -.Ar namespace . -Currently only -.Ar OS2 -can be here. -.It Fl v -Print version number. -.It Fl u Ar uid , Fl g Ar gid -User id and group id assigned to files. -The default is owner and group id from -directory where volume is mounted. -.It Fl l Ar locale -Set the locale for case conversion. -By default -.Nm -tries to use an environment variable -.Ev LC_* . -.It Fl w Ar scheme -Select a -.Ar scheme -used to convert file names between NetWare and -.Fx . -Supported conversion schemes are: -.Bl -tag -width ".Cm koi2cp866" -.It Cm asis -Characters passed as is without any alteration. -.It Cm koi2cp866 -koi8-r <-> CP866 -.It Cm se -Suits for setups used in Sweden. -.El -.It Fl M Ar mode -See -.Xr ncplogin 1 -for details. -If this option is omitted, connection permissions -assumed the same as directory mode -.Pq Fl d -option. -.El -.Sh FILES -.Bl -tag -width /var/log/wtmp -compact -.It Pa ~/.nwfsrc -keeps static parameters for connections and other information. -See -.Pa /usr/share/examples/nwclient/dot.nwfsrc -for details. -.El -.Sh NOTES -Before any NCP connection can be established kernel must be configured -for IPX support, IPXrouted and KLD nwfs.ko should be loaded. -.Sh EXAMPLES -Next examples illustrates how to connect to NetWare server -.Em nwserv -as user -.Em GUEST -and mount volumes -.Em SYS -and -.Em VOL1 : -.Bd -literal -offset indent -mount_nwfs -S nwserv -U guest -V sys /nw/s1/sys -mount_nwfs /nwserv:guest/sys /nw/s1/sys -mount -t nwfs /nwserv:guest/vol1 /nw/s1/vol1 -mount -t nwfs /nwserv:boris/sys/home/boris /home/boris/nw/home -.Ed -.Pp -The last example mounts only subdirectory on a volume and equivalent -to NetWare 'map root' command. -.Pp -It is possible to use -.Xr fstab 5 -for nwfs mounts: -.Bd -literal -offset indent -/nwserv:guest/sys /nw/s1/sys nwfs rw,noauto 0 0 -/nwserv:guest/vol1 /nw/s1/vol2 nwfs rw,noauto 0 0 -.Ed -.Sh HISTORY -The -.Nm -utility first appeared in -.Fx 4.0 . -.Sh CREDITS -In development of NetWare client for -.Fx , -the following sources were used: -.Pp -Documentation from NetWare NDK. -.Pp -Ncpfs for Linux - written by -.An Volker Lendecke Aq lendecke@math.uni\-goettingen.de . -He granted me permission to publish parts of his code under -.Bx Ns -style -license, -.Pp -"Interrupt List" from -.An Ralf Brown , -.Pp -Many files from -.Pa /sys -directory. -.Sh AUTHORS -.An Boris Popov Aq bp@butya.kz , -.Aq rbp@chat.ru -.Sh BUGS -to number a few diff --git a/usr.sbin/mount_nwfs/mount_nwfs.c b/usr.sbin/mount_nwfs/mount_nwfs.c deleted file mode 100644 index 5f5f19a..0000000 --- a/usr.sbin/mount_nwfs/mount_nwfs.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright (c) 1999, Boris Popov - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Boris Popov. - * 4. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ -#include <sys/param.h> -#include <sys/stat.h> -#include <sys/errno.h> -#include <sys/mount.h> -#include <sys/sysctl.h> -#include <machine/cpu.h> - -#include <stdio.h> -#include <string.h> -#include <pwd.h> -#include <grp.h> -#include <unistd.h> -#include <ctype.h> -#include <stdlib.h> -#include <err.h> -#include <sysexits.h> -#include <time.h> - -#include <netncp/ncp_lib.h> -#include <netncp/ncp_rcfile.h> -#include <fs/nwfs/nwfs_mount.h> -#include "mntopts.h" - -#define NWFS_VFSNAME "nwfs" - -static char mount_point[MAXPATHLEN + 1]; -static void usage(void); -static int parsercfile(struct ncp_conn_loginfo *li, struct nwfs_args *mdata); - -static struct mntopt mopts[] = { - MOPT_STDOPTS, - MOPT_END -}; - -static int -parsercfile(struct ncp_conn_loginfo *li __unused, - struct nwfs_args *mdata __unused) -{ - return 0; -} - -int -main(int argc, char *argv[]) -{ - NWCONN_HANDLE connHandle; - struct nwfs_args mdata; - struct ncp_conn_loginfo li; - struct stat st; - struct nw_entry_info einfo; - struct tm *tm; - time_t ltime; - int opt, error, mntflags, nlsopt, wall_clock; - int uid_set, gid_set; - size_t len; - char *p, *p1, tmp[1024]; - u_char *pv; - - if (argc < 2) - usage(); - if (argc == 2) { - if (strcmp(argv[1], "-h") == 0) { - usage(); - } else if (strcmp(argv[1], "-v") == 0) { - errx(EX_OK, "version %d.%d.%d", NWFS_VERSION / 100000, - (NWFS_VERSION % 10000) / 1000, - (NWFS_VERSION % 1000) / 100); - } - } - - if(ncp_initlib()) exit(1); - - mntflags = error = 0; - bzero(&mdata,sizeof(mdata)); - gid_set = uid_set = 0; - nlsopt = 0; - - if (ncp_li_init(&li, argc, argv)) return 1; - /* - * A little bit weird, but I should figure out which server/user to use - * _before_ reading .rc file - */ - if (argc >= 3 && argv[argc-1][0] != '-' && argv[argc-2][0] != '-' && - argv[argc-2][0] == '/') { - p = argv[argc-2]; - error = 1; - do { - if (*p++ != '/') break; - p1 = tmp; - while (*p != ':' && *p != 0) *p1++ = *p++; - if (*p++ == 0) break; - *p1 = 0; - if (ncp_li_setserver(&li, tmp)) break; - p1 = tmp; - while (*p != '/' && *p != 0) *p1++ = *p++; - if (*p++ == 0) break; - *p1 = 0; - if (ncp_li_setuser(&li, tmp)) break; - p1 = tmp; - while (*p != '/' && *p != 0) *p1++ = *p++; - *p1 = 0; - if (strlen(tmp) > NCP_VOLNAME_LEN) { - warnx("volume name too long: %s", tmp); - break; - } - ncp_str_upper(strcpy(mdata.mounted_vol,tmp)); - if (*p == '/') - p++; - p1 = mdata.root_path + 2; - pv = mdata.root_path + 1; - for(;*p;) { - *pv = 0; - while (*p != '/' && *p) { - *p1++ = *p++; - (*pv)++; - } - if (*pv) { - ncp_nls_mem_u2n(pv + 1, pv + 1, *pv); - pv += (*pv) + 1; - mdata.root_path[0]++; - } - if (*p++ == 0) break; - p1++; - } - error = 0; - } while(0); - if (error) - errx(EX_DATAERR, - "an error occurred while parsing '%s'", - argv[argc - 2]); - } - if (ncp_li_readrc(&li)) return 1; - if (ncp_rc) { - parsercfile(&li,&mdata); - rc_close(ncp_rc); - } - while ((opt = getopt(argc, argv, STDPARAM_OPT"V:c:d:f:g:l:n:o:u:w:")) != -1) { - switch (opt) { - case STDPARAM_ARGS: - if (ncp_li_arg(&li, opt, optarg)) { - return 1; - } - break; - case 'V': - if (strlen(optarg) > NCP_VOLNAME_LEN) - errx(EX_DATAERR, "volume too long: %s", optarg); - ncp_str_upper(strcpy(mdata.mounted_vol,optarg)); - break; - case 'u': { - struct passwd *pwd; - - pwd = isdigit(optarg[0]) ? - getpwuid(atoi(optarg)) : getpwnam(optarg); - if (pwd == NULL) - errx(EX_NOUSER, "unknown user '%s'", optarg); - mdata.uid = pwd->pw_uid; - uid_set = 1; - break; - } - case 'g': { - struct group *grp; - - grp = isdigit(optarg[0]) ? - getgrgid(atoi(optarg)) : getgrnam(optarg); - if (grp == NULL) - errx(EX_NOUSER, "unknown group '%s'", optarg); - mdata.gid = grp->gr_gid; - gid_set = 1; - break; - } - case 'd': - errno = 0; - mdata.dir_mode = strtol(optarg, &p, 8); - if (errno || *p != 0) - errx(EX_DATAERR, "invalid value for directory mode"); - break; - case 'f': - errno = 0; - mdata.file_mode = strtol(optarg, &p, 8); - if (errno || *p != 0) - errx(EX_DATAERR, "invalid value for file mode"); - break; - case '?': - usage(); - /*NOTREACHED*/ - case 'n': { - char *inp, *nsp; - - nsp = inp = optarg; - while ((nsp = strsep(&inp, ",;:")) != NULL) { - if (strcasecmp(nsp, "OS2") == 0) - mdata.flags |= NWFS_MOUNT_NO_OS2; - else if (strcasecmp(nsp, "LONG") == 0) - mdata.flags |= NWFS_MOUNT_NO_LONG; - else if (strcasecmp(nsp, "NFS") == 0) - mdata.flags |= NWFS_MOUNT_NO_NFS; - else - errx(EX_DATAERR, "unknown namespace '%s'", nsp); - } - break; - }; - case 'l': - if (ncp_nls_setlocale(optarg) != 0) return 1; - mdata.flags |= NWFS_MOUNT_HAVE_NLS; - break; - case 'o': - getmntopts(optarg, mopts, &mntflags, 0); - break; - case 'c': - switch (optarg[0]) { - case 'l': - nlsopt |= NWHP_LOWER; - break; - case 'u': - nlsopt |= NWHP_UPPER; - break; - case 'n': - nlsopt |= NWHP_LOWER | NWHP_UPPER; - break; - case 'L': - nlsopt |= NWHP_LOWER | NWHP_NOSTRICT; - break; - case 'U': - nlsopt |= NWHP_UPPER | NWHP_NOSTRICT; - break; - default: - errx(EX_DATAERR, "invalid suboption '%c' for -c", - optarg[0]); - } - break; - case 'w': - if (ncp_nls_setrecodebyname(optarg) != 0) - return 1; - mdata.flags |= NWFS_MOUNT_HAVE_NLS; - break; - default: - usage(); - } - } - - if (optind == argc - 2) { - optind++; - } else if (mdata.mounted_vol[0] == 0) - errx(EX_USAGE, "volume name should be specified"); - - if (optind != argc - 1) - usage(); - realpath(argv[optind], mount_point); - - if (stat(mount_point, &st) == -1) - err(EX_OSERR, "could not find mount point %s", mount_point); - if (!S_ISDIR(st.st_mode)) { - errno = ENOTDIR; - err(EX_OSERR, "can't mount on %s", mount_point); - } - if (ncp_geteinfo(mount_point, &einfo) == 0) - errx(EX_OSERR, "can't mount on %s twice", mount_point); - - if (uid_set == 0) { - mdata.uid = st.st_uid; - } - if (gid_set == 0) { - mdata.gid = st.st_gid; - } - if (mdata.file_mode == 0 ) { - mdata.file_mode = st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); - } - if (mdata.dir_mode == 0) { - mdata.dir_mode = mdata.file_mode; - if ((mdata.dir_mode & S_IRUSR) != 0) - mdata.dir_mode |= S_IXUSR; - if ((mdata.dir_mode & S_IRGRP) != 0) - mdata.dir_mode |= S_IXGRP; - if ((mdata.dir_mode & S_IROTH) != 0) - mdata.dir_mode |= S_IXOTH; - } - if (li.access_mode == 0) { - li.access_mode = mdata.dir_mode; - } -/* if (mdata.flags & NWFS_MOUNT_HAVE_NLS) {*/ - mdata.nls = ncp_nls; -/* }*/ - mdata.nls.opt = nlsopt; - - len = sizeof(wall_clock); - if (sysctlbyname("machdep.wall_cmos_clock", &wall_clock, &len, NULL, 0) == -1) - err(EX_OSERR, "get wall_clock"); - if (wall_clock == 0) { - time(<ime); - tm = localtime(<ime); - mdata.tz = -(tm->tm_gmtoff / 60); - } - - error = ncp_li_check(&li); - if (error) - return 1; - li.opt |= NCP_OPT_WDOG; - /* well, now we can try to login, or use already established connection */ - error = ncp_li_login(&li, &connHandle); - if (error) { - ncp_error("cannot login to server %s", error, li.server); - exit(1); - } - error = ncp_conn2ref(connHandle, &mdata.connRef); - if (error) { - ncp_error("could not convert handle to reference", error); - ncp_disconnect(connHandle); - exit(1); - } - strcpy(mdata.mount_point,mount_point); - mdata.version = NWFS_VERSION; - error = mount(NWFS_VFSNAME, mdata.mount_point, mntflags, (void*)&mdata); - if (error) { - ncp_error("mount error: %s", error, mdata.mount_point); - ncp_disconnect(connHandle); - exit(1); - } - /* - * I'm leave along my handle, but kernel should keep own ... - */ - ncp_disconnect(connHandle); - /* we are done ?, impossible ... */ - return 0; -} - -static void -usage(void) -{ - fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", - "usage: mount_nwfs [-Chv] -S server -U user [-connection options]", - " -V volume [-M mode] [-c case] [-d mode] [-f mode]", - " [-g gid] [-l locale] [-n os2] [-u uid] [-w scheme]", - " node", - " mount_nwfs [-options] /server:user/volume[/path] node"); - - exit (1); -} |