MFC r273896:

Build mount_nfs(8) with WARNS=6.

Sponsored by:	The FreeBSD Foundation
This commit is contained in:
trasz 2014-11-29 15:57:31 +00:00
parent abb884ffe0
commit 39035328b4
2 changed files with 58 additions and 49 deletions

View File

@ -10,7 +10,6 @@ MLINKS= mount_nfs.8 mount_oldnfs.8
MOUNT= ${.CURDIR}/../mount
UMNTALL= ${.CURDIR}/../../usr.sbin/rpc.umntall
CFLAGS+= -DNFS -I${MOUNT} -I${UMNTALL}
WARNS?= 3
LINKS= ${BINDIR}/mount_nfs ${BINDIR}/mount_oldnfs

View File

@ -79,7 +79,7 @@ __FBSDID("$FreeBSD$");
#include "mounttab.h"
/* Table for af,sotype -> netid conversions. */
struct nc_protos {
static struct nc_protos {
const char *netid;
int af;
int sotype;
@ -102,20 +102,21 @@ struct nfhret {
#define ISBGRND 2
#define OF_NOINET4 4
#define OF_NOINET6 8
int retrycnt = -1;
int opflags = 0;
int nfsproto = IPPROTO_TCP;
int mnttcp_ok = 1;
int noconn = 0;
char *portspec = NULL; /* Server nfs port; NULL means look up via rpcbind. */
struct sockaddr *addr;
int addrlen = 0;
u_char *fh = NULL;
int fhsize = 0;
int secflavor = -1;
int got_principal = 0;
static int retrycnt = -1;
static int opflags = 0;
static int nfsproto = IPPROTO_TCP;
static int mnttcp_ok = 1;
static int noconn = 0;
/* The 'portspec' is the server nfs port; NULL means look up via rpcbind. */
static const char *portspec = NULL;
static struct sockaddr *addr;
static int addrlen = 0;
static u_char *fh = NULL;
static int fhsize = 0;
static int secflavor = -1;
static int got_principal = 0;
enum mountmode {
static enum mountmode {
ANY,
V2,
V3,
@ -130,8 +131,8 @@ enum tryret {
TRYRET_LOCALERR /* Local failure. */
};
static int sec_name_to_num(char *sec);
static char *sec_num_to_name(int num);
static int sec_name_to_num(const char *sec);
static const char *sec_num_to_name(int num);
static int getnfsargs(char *, struct iovec **iov, int *iovlen);
/* void set_rpc_maxgrouplist(int); */
static struct netconfig *getnetconf_cached(const char *netid);
@ -149,9 +150,10 @@ main(int argc, char *argv[])
int c;
struct iovec *iov;
int num, iovlen;
char *name, *p, *spec, *fstype;
char *mntname, *p, *spec, *tmp;
char mntpath[MAXPATHLEN], errmsg[255];
char hostname[MAXHOSTNAMELEN + 1], *gssname, gssn[MAXHOSTNAMELEN + 50];
char hostname[MAXHOSTNAMELEN + 1], gssn[MAXHOSTNAMELEN + 50];
const char *fstype, *gssname;
iov = NULL;
iovlen = 0;
@ -226,7 +228,7 @@ main(int argc, char *argv[])
while (opt) {
char *pval = NULL;
char *pnextopt = NULL;
char *val = "";
const char *val = "";
pass_flag_to_nmount = 1;
pnextopt = strchr(opt, ',');
if (pnextopt != NULL) {
@ -276,10 +278,10 @@ main(int argc, char *argv[])
portspec = "2049";
} else if (strcmp(opt, "port") == 0) {
pass_flag_to_nmount=0;
asprintf(&portspec, "%d",
atoi(val));
if (portspec == NULL)
asprintf(&tmp, "%d", atoi(val));
if (tmp == NULL)
err(1, "asprintf");
portspec = tmp;
} else if (strcmp(opt, "principal") == 0) {
got_principal = 1;
} else if (strcmp(opt, "proto") == 0) {
@ -364,9 +366,11 @@ main(int argc, char *argv[])
}
pass_flag_to_nmount=0;
}
if (pass_flag_to_nmount)
build_iovec(&iov, &iovlen, opt, val,
if (pass_flag_to_nmount) {
build_iovec(&iov, &iovlen, opt,
__DECONST(void *, val),
strlen(val) + 1);
}
opt = pnextopt;
}
}
@ -426,7 +430,7 @@ main(int argc, char *argv[])
}
spec = *argv++;
name = *argv;
mntname = *argv;
if (retrycnt == -1)
/* The default is to keep retrying forever. */
@ -455,18 +459,19 @@ main(int argc, char *argv[])
hostname);
gssname = gssn;
}
build_iovec(&iov, &iovlen, "gssname", gssname,
strlen(gssname) + 1);
build_iovec(&iov, &iovlen, "gssname",
__DECONST(void *, gssname), strlen(gssname) + 1);
}
if (!getnfsargs(spec, &iov, &iovlen))
exit(1);
/* resolve the mountpoint with realpath(3) */
if (checkpath(name, mntpath) != 0)
if (checkpath(mntname, mntpath) != 0)
err(1, "%s", mntpath);
build_iovec(&iov, &iovlen, "fstype", fstype, (size_t)-1);
build_iovec(&iov, &iovlen, "fstype",
__DECONST(void *, fstype), (size_t)-1);
build_iovec(&iov, &iovlen, "fspath", mntpath, (size_t)-1);
build_iovec(&iov, &iovlen, "errmsg", errmsg, sizeof(errmsg));
@ -477,7 +482,7 @@ main(int argc, char *argv[])
}
static int
sec_name_to_num(char *sec)
sec_name_to_num(const char *sec)
{
if (!strcmp(sec, "krb5"))
return (RPCSEC_GSS_KRB5);
@ -490,7 +495,7 @@ sec_name_to_num(char *sec)
return (-1);
}
static char *
static const char *
sec_num_to_name(int flavor)
{
switch (flavor) {
@ -674,10 +679,9 @@ nfs_tryproto(struct addrinfo *ai, char *hostp, char *spec, char **errstr,
struct rpc_err rpcerr;
CLIENT *clp;
struct netconfig *nconf, *nconf_mnt;
const char *netid, *netid_mnt;
char *secname;
const char *netid, *netid_mnt, *secname;
int doconnect, nfsvers, mntvers, sotype;
enum clnt_stat stat;
enum clnt_stat clntstat;
enum mountmode trymntmode;
sotype = 0;
@ -721,6 +725,7 @@ nfs_tryproto(struct addrinfo *ai, char *hostp, char *spec, char **errstr,
tryagain:
if (trymntmode == V4) {
nfsvers = 4;
mntvers = 3; /* Workaround for GCC. */
} else if (trymntmode == V2) {
nfsvers = 2;
mntvers = 1;
@ -780,10 +785,10 @@ tryagain:
try.tv_sec = 10;
try.tv_usec = 0;
stat = clnt_call(clp, NFSPROC_NULL, (xdrproc_t)xdr_void, NULL,
clntstat = clnt_call(clp, NFSPROC_NULL, (xdrproc_t)xdr_void, NULL,
(xdrproc_t)xdr_void, NULL, try);
if (stat != RPC_SUCCESS) {
if (stat == RPC_PROGVERSMISMATCH && trymntmode == ANY) {
if (clntstat != RPC_SUCCESS) {
if (clntstat == RPC_PROGVERSMISMATCH && trymntmode == ANY) {
clnt_destroy(clp);
trymntmode = V2;
goto tryagain;
@ -792,7 +797,7 @@ tryagain:
snprintf(errbuf, sizeof errbuf, "[%s] %s:%s: %s", netid,
hostp, spec, clnt_sperror(clp, "NFSPROC_NULL"));
clnt_destroy(clp);
return (returncode(stat, &rpcerr));
return (returncode(clntstat, &rpcerr));
}
clnt_destroy(clp);
@ -812,8 +817,10 @@ tryagain:
build_iovec(iov, iovlen, "addr", addr, addrlen);
secname = sec_num_to_name(secflavor);
if (secname != NULL)
build_iovec(iov, iovlen, "sec", secname, (size_t)-1);
if (secname != NULL) {
build_iovec(iov, iovlen, "sec",
__DECONST(void *, secname), (size_t)-1);
}
build_iovec(iov, iovlen, "nfsv4", NULL, 0);
build_iovec(iov, iovlen, "dirpath", spec, (size_t)-1);
@ -833,12 +840,12 @@ tryagain:
clp->cl_auth = authsys_create_default();
nfhret.auth = secflavor;
nfhret.vers = mntvers;
stat = clnt_call(clp, MOUNTPROC_MNT, (xdrproc_t)xdr_dir, spec,
clntstat = clnt_call(clp, MOUNTPROC_MNT, (xdrproc_t)xdr_dir, spec,
(xdrproc_t)xdr_fh, &nfhret,
try);
auth_destroy(clp->cl_auth);
if (stat != RPC_SUCCESS) {
if (stat == RPC_PROGVERSMISMATCH && trymntmode == ANY) {
if (clntstat != RPC_SUCCESS) {
if (clntstat == RPC_PROGVERSMISMATCH && trymntmode == ANY) {
clnt_destroy(clp);
trymntmode = V2;
goto tryagain;
@ -847,7 +854,7 @@ tryagain:
snprintf(errbuf, sizeof errbuf, "[%s] %s:%s: %s", netid_mnt,
hostp, spec, clnt_sperror(clp, "RPCPROG_MNT"));
clnt_destroy(clp);
return (returncode(stat, &rpcerr));
return (returncode(clntstat, &rpcerr));
}
clnt_destroy(clp);
@ -873,8 +880,10 @@ tryagain:
build_iovec(iov, iovlen, "addr", addr, addrlen);
build_iovec(iov, iovlen, "fh", fh, fhsize);
secname = sec_num_to_name(nfhret.auth);
if (secname)
build_iovec(iov, iovlen, "sec", secname, (size_t)-1);
if (secname) {
build_iovec(iov, iovlen, "sec",
__DECONST(void *, secname), (size_t)-1);
}
if (nfsvers == 3)
build_iovec(iov, iovlen, "nfsv3", NULL, 0);
@ -886,9 +895,10 @@ tryagain:
* return code.
*/
static enum tryret
returncode(enum clnt_stat stat, struct rpc_err *rpcerr)
returncode(enum clnt_stat clntstat, struct rpc_err *rpcerr)
{
switch (stat) {
switch (clntstat) {
case RPC_TIMEDOUT:
return (TRYRET_TIMEOUT);
case RPC_PMAPFAILURE: