err(1, name);
err(1, "%s", name);
main(argc, argv)	int argc;	char *argv[];{	register int c;	register struct nfs_args *nfsargsp;	struct nfs_args nfsargs;	struct nfsd_cargs ncd;	int mntflags, altflags, i, nfssvc_flag, num;	char *name, *p, *spec;	int error = 0;#ifdef NFSKERB	uid_t last_ruid;#endif#ifdef NFSKERB	last_ruid = -1;	if (krb_get_lrealm(realm, 0) != KSUCCESS)	    (void)strcpy(realm, "[not set]");	if (sizeof (struct nfsrpc_nickverf) != RPCX_NICKVERF ||	    sizeof (struct nfsrpc_fullblock) != RPCX_FULLBLOCK ||	    ((char *)&ktick.kt) - ((char *)&ktick) != NFSX_UNSIGNED ||	    ((char *)ktick.kt.dat) - ((char *)&ktick) != 2 * NFSX_UNSIGNED)		fprintf(stderr, "Yikes! NFSKERB structs not packed!!\n");#endif	retrycnt = DEF_RETRY;	mntflags = 0;	altflags = 0;	nfsargs = nfsdefargs;	nfsargsp = &nfsargs;	while ((c = getopt(argc, argv,	    "23a:bcdD:g:I:iKL:lm:o:PpqR:r:sTt:w:x:U")) != EOF)		switch (c) {		case '3':			if (force2)				errx(1, "-2 and -3 are mutually exclusive");			force3 = 1;			break;		case '2':			if (force3)				errx(1, "-2 and -3 are mutually exclusive");			force2 = 1;			nfsargsp->flags &= ~NFSMNT_NFSV3;			break;		case 'a':			num = strtol(optarg, &p, 10);			if (*p || num < 0)				errx(1, "illegal -a value -- %s", optarg);			nfsargsp->readahead = num;			nfsargsp->flags |= NFSMNT_READAHEAD;			break;		case 'b':			opflags |= BGRND;			break;		case 'c':			nfsargsp->flags |= NFSMNT_NOCONN;			break;		case 'D':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -D value -- %s", optarg);			nfsargsp->deadthresh = num;			nfsargsp->flags |= NFSMNT_DEADTHRESH;			break;		case 'd':			nfsargsp->flags |= NFSMNT_DUMBTIMR;			break;#if 0 /* XXXX */		case 'g':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -g value -- %s", optarg);			set_rpc_maxgrouplist(num);			nfsargsp->maxgrouplist = num;			nfsargsp->flags |= NFSMNT_MAXGRPS;			break;#endif		case 'I':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -I value -- %s", optarg);			nfsargsp->readdirsize = num;			nfsargsp->flags |= NFSMNT_READDIRSIZE;			break;		case 'i':			nfsargsp->flags |= NFSMNT_INT;			break;#ifdef NFSKERB		case 'K':			nfsargsp->flags |= NFSMNT_KERB;			break;#endif		case 'L':			num = strtol(optarg, &p, 10);			if (*p || num < 2)				errx(1, "illegal -L value -- %s", optarg);			nfsargsp->leaseterm = num;			nfsargsp->flags |= NFSMNT_LEASETERM;			break;		case 'l':			nfsargsp->flags |= NFSMNT_RDIRPLUS;			break;#ifdef NFSKERB		case 'm':			(void)strncpy(realm, optarg, REALM_SZ - 1);			realm[REALM_SZ - 1] = '\0';			break;#endif		case 'o':			getmntopts(optarg, mopts, &mntflags, &altflags);			if (altflags & ALTF_BG)				opflags |= BGRND;			if (altflags & ALTF_NOCONN)				nfsargsp->flags |= NFSMNT_NOCONN;			if (altflags & ALTF_DUMBTIMR)				nfsargsp->flags |= NFSMNT_DUMBTIMR;			if (altflags & ALTF_INTR)				nfsargsp->flags |= NFSMNT_INT;#ifdef NFSKERB			if (altflags & ALTF_KERB)				nfsargsp->flags |= NFSMNT_KERB;#endif			if (altflags & ALTF_NFSV3) {				if (force2)					errx(1,"conflicting version options");				force3 = 1;			}			if (altflags & ALTF_NFSV2) {				if (force3)					errx(1,"conflicting version options");				force2 = 1;				nfsargsp->flags &= ~NFSMNT_NFSV3;			}			if (altflags & ALTF_RDIRPLUS)				nfsargsp->flags |= NFSMNT_RDIRPLUS;			if (altflags & ALTF_MNTUDP)				mnttcp_ok = 0;			if (altflags & ALTF_RESVPORT)				nfsargsp->flags |= NFSMNT_RESVPORT;#ifdef ISO			if (altflags & ALTF_SEQPACKET)				nfsargsp->sotype = SOCK_SEQPACKET;#endif			if (altflags & ALTF_NQNFS) {				if (force2)					errx(1,"nqnfs only available with v3");				force3 = 1;				nfsargsp->flags |= NFSMNT_NQNFS;			}			if (altflags & ALTF_SOFT)				nfsargsp->flags |= NFSMNT_SOFT;			if (altflags & ALTF_TCP) {				nfsargsp->sotype = SOCK_STREAM;				nfsproto = IPPROTO_TCP;			}			if (altflags & ALTF_PORT)				port_no = atoi(strstr(optarg, "port=") + 5);			altflags = 0;			break;		case 'P':			nfsargsp->flags |= NFSMNT_RESVPORT;			break;#ifdef ISO		case 'p':			nfsargsp->sotype = SOCK_SEQPACKET;			break;#endif		case 'q':			if (force2)				errx(1,"nqnfs only available with v3");			force3 = 1;			nfsargsp->flags |= NFSMNT_NQNFS;			break;		case 'R':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -R value -- %s", optarg);			retrycnt = num;			break;		case 'r':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -r value -- %s", optarg);			nfsargsp->rsize = num;			nfsargsp->flags |= NFSMNT_RSIZE;			break;		case 's':			nfsargsp->flags |= NFSMNT_SOFT;			break;		case 'T':			nfsargsp->sotype = SOCK_STREAM;			nfsproto = IPPROTO_TCP;			break;		case 't':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -t value -- %s", optarg);			nfsargsp->timeo = num;			nfsargsp->flags |= NFSMNT_TIMEO;			break;		case 'w':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -w value -- %s", optarg);			nfsargsp->wsize = num;			nfsargsp->flags |= NFSMNT_WSIZE;			break;		case 'x':			num = strtol(optarg, &p, 10);			if (*p || num <= 0)				errx(1, "illegal -x value -- %s", optarg);			nfsargsp->retrans = num;			nfsargsp->flags |= NFSMNT_RETRANS;			break;		case 'U':			mnttcp_ok = 0;			break;		default:			usage();			break;		}	argc -= optind;	argv += optind;	if (argc != 2)		usage();	spec = *argv++;	name = *argv;	if (!getnfsargs(spec, nfsargsp))		exit(1);	if (mount(MOUNT_NFS, name, mntflags, nfsargsp)) {		if (errno == EOPNOTSUPP)			errx(1, "%s: Filesystem not supported by kernel", name);		else			err(1, name);	}	if (nfsargsp->flags & (NFSMNT_NQNFS | NFSMNT_KERB)) {		if ((opflags & ISBGRND) == 0) {			if (i = fork()) {				if (i == -1)					err(1, "nqnfs 1");				exit(0);			}			(void) setsid();			(void) close(STDIN_FILENO);			(void) close(STDOUT_FILENO);			(void) close(STDERR_FILENO);			(void) chdir("/");		}		openlog("mount_nfs:", LOG_PID, LOG_DAEMON);		nfssvc_flag = NFSSVC_MNTD;		ncd.ncd_dirp = name;		while (nfssvc(nfssvc_flag, (caddr_t)&ncd) < 0) {			if (errno != ENEEDAUTH) {				syslog(LOG_ERR, "nfssvc err %m");				continue;			}			nfssvc_flag =			    NFSSVC_MNTD | NFSSVC_GOTAUTH | NFSSVC_AUTHINFAIL;#ifdef NFSKERB			/*			 * Set up as ncd_authuid for the kerberos call.			 * Must set ruid to ncd_authuid and reset the			 * ticket name iff ncd_authuid is not the same			 * as last time, so that the right ticket file			 * is found.			 * Get the Kerberos credential structure so that			 * we have the seesion key and get a ticket for			 * this uid.			 * For more info see the IETF Draft "Authentication			 * in ONC RPC".			 */			if (ncd.ncd_authuid != last_ruid) {				krb_set_tkt_string("");				last_ruid = ncd.ncd_authuid;			}			setreuid(ncd.ncd_authuid, 0);			kret = krb_get_cred(NFS_KERBSRV, inst, realm, &kcr);			if (kret == RET_NOTKT) {		            kret = get_ad_tkt(NFS_KERBSRV, inst, realm,				DEFAULT_TKT_LIFE);			    if (kret == KSUCCESS)				kret = krb_get_cred(NFS_KERBSRV, inst, realm,				    &kcr);			}			if (kret == KSUCCESS)			    kret = krb_mk_req(&ktick.kt, NFS_KERBSRV, inst,				realm, 0);			/*			 * Fill in the AKN_FULLNAME authenticator and verfier.			 * Along with the Kerberos ticket, we need to build			 * the timestamp verifier and encrypt it in CBC mode.			 */			if (kret == KSUCCESS &&			    ktick.kt.length <= (RPCAUTH_MAXSIZ-3*NFSX_UNSIGNED)			    && gettimeofday(&ktv, NULL) == 0) {			    ncd.ncd_authtype = RPCAUTH_KERB4;			    ncd.ncd_authstr = (u_char *)&ktick;			    ncd.ncd_authlen = nfsm_rndup(ktick.kt.length) +				3 * NFSX_UNSIGNED;			    ncd.ncd_verfstr = (u_char *)&kverf;			    ncd.ncd_verflen = sizeof (kverf);			    memmove(ncd.ncd_key, kcr.session,				sizeof (kcr.session));			    kin.t1 = htonl(ktv.tv_sec);			    kin.t2 = htonl(ktv.tv_usec);			    kin.w1 = htonl(NFS_KERBTTL);			    kin.w2 = htonl(NFS_KERBTTL - 1);			    bzero((caddr_t)kivec, sizeof (kivec));			    /*			     * Encrypt kin in CBC mode using the session			     * key in kcr.			     */			    XXX			    /*			     * Finally, fill the timestamp verifier into the			     * authenticator and verifier.			     */			    ktick.kind = htonl(RPCAKN_FULLNAME);			    kverf.kind = htonl(RPCAKN_FULLNAME);			    NFS_KERBW1(ktick.kt) = kout.w1;			    ktick.kt.length = htonl(ktick.kt.length);			    kverf.verf.t1 = kout.t1;			    kverf.verf.t2 = kout.t2;			    kverf.verf.w2 = kout.w2;			    nfssvc_flag = NFSSVC_MNTD | NFSSVC_GOTAUTH;			}			setreuid(0, 0);#endif /* NFSKERB */		}	}	exit(0);}