diff options
author | Marcel Telka <Marcel.Telka@Sun.COM> | 2010-07-07 09:45:09 +0200 |
---|---|---|
committer | Marcel Telka <Marcel.Telka@Sun.COM> | 2010-07-07 09:45:09 +0200 |
commit | eec076a392205ddc8bb6e61562b217a98b1fad97 (patch) | |
tree | a38595aee2e29f7e32d85874d49d156b04e8f7a5 /usr/src/cmd | |
parent | 2b6c28b8b605a28e1a671f5d6b484cd697e51da6 (diff) | |
download | illumos-gate-eec076a392205ddc8bb6e61562b217a98b1fad97.tar.gz |
6826935 mount_nfs needs to recognize if not use friendly numbers
Diffstat (limited to 'usr/src/cmd')
-rw-r--r-- | usr/src/cmd/fs.d/nfs/mount/mount.c | 80 |
1 files changed, 43 insertions, 37 deletions
diff --git a/usr/src/cmd/fs.d/nfs/mount/mount.c b/usr/src/cmd/fs.d/nfs/mount/mount.c index 7d47f4709e..dc0a8526cf 100644 --- a/usr/src/cmd/fs.d/nfs/mount/mount.c +++ b/usr/src/cmd/fs.d/nfs/mount/mount.c @@ -20,8 +20,7 @@ */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ @@ -80,6 +79,7 @@ #include "nfs_subr.h" #include "webnfs.h" #include <rpcsvc/nfs4_prot.h> +#include <limits.h> #include <nfs/nfssys.h> extern int _nfssys(enum nfssys_op, void *); @@ -949,12 +949,27 @@ static char *optlist[] = { NULL }; -#define bad(val) (val == NULL || !isdigit(*val)) +static int +convert_int(int *val, char *str) +{ + long lval; + + if (str == NULL || !isdigit(*str)) + return (-1); + + lval = strtol(str, &str, 10); + if (*str != '\0' || lval > INT_MAX) + return (-2); + + *val = (int)lval; + return (0); +} static int set_args(int *mntflags, struct nfs_args *args, char *fshost, struct mnttab *mnt) { char *saveopt, *optstr, *opts, *newopts, *val; + int num; int largefiles = 0; int invalid = 0; int attrpref = 0; @@ -1030,9 +1045,9 @@ set_args(int *mntflags, struct nfs_args *args, char *fshost, struct mnttab *mnt) args->flags |= NFSMNT_NOAC; break; case OPT_PORT: - if (bad(val)) + if (convert_int(&num, val) != 0) goto badopt; - nfs_port = htons((ushort_t)atoi(val)); + nfs_port = htons((ushort_t)num); break; case OPT_SECURE: @@ -1049,62 +1064,54 @@ set_args(int *mntflags, struct nfs_args *args, char *fshost, struct mnttab *mnt) break; case OPT_RSIZE: - args->flags |= NFSMNT_RSIZE; - if (bad(val)) + if (convert_int(&args->rsize, val) != 0) goto badopt; - args->rsize = atoi(val); + args->flags |= NFSMNT_RSIZE; break; case OPT_WSIZE: - args->flags |= NFSMNT_WSIZE; - if (bad(val)) + if (convert_int(&args->wsize, val) != 0) goto badopt; - args->wsize = atoi(val); + args->flags |= NFSMNT_WSIZE; break; case OPT_TIMEO: - args->flags |= NFSMNT_TIMEO; - if (bad(val)) + if (convert_int(&args->timeo, val) != 0) goto badopt; - args->timeo = atoi(val); + args->flags |= NFSMNT_TIMEO; break; case OPT_RETRANS: - args->flags |= NFSMNT_RETRANS; - if (bad(val)) + if (convert_int(&args->retrans, val) != 0) goto badopt; - args->retrans = atoi(val); + args->flags |= NFSMNT_RETRANS; break; case OPT_ACTIMEO: + if (convert_int(&args->acregmax, val) != 0) + goto badopt; + args->acdirmin = args->acregmin = args->acdirmax + = args->acregmax; args->flags |= NFSMNT_ACDIRMAX; args->flags |= NFSMNT_ACREGMAX; args->flags |= NFSMNT_ACDIRMIN; args->flags |= NFSMNT_ACREGMIN; - if (bad(val)) - goto badopt; - args->acdirmin = args->acregmin = args->acdirmax - = args->acregmax = atoi(val); break; case OPT_ACREGMIN: - args->flags |= NFSMNT_ACREGMIN; - if (bad(val)) + if (convert_int(&args->acregmin, val) != 0) goto badopt; - args->acregmin = atoi(val); + args->flags |= NFSMNT_ACREGMIN; break; case OPT_ACREGMAX: - args->flags |= NFSMNT_ACREGMAX; - if (bad(val)) + if (convert_int(&args->acregmax, val) != 0) goto badopt; - args->acregmax = atoi(val); + args->flags |= NFSMNT_ACREGMAX; break; case OPT_ACDIRMIN: - args->flags |= NFSMNT_ACDIRMIN; - if (bad(val)) + if (convert_int(&args->acdirmin, val) != 0) goto badopt; - args->acdirmin = atoi(val); + args->flags |= NFSMNT_ACDIRMIN; break; case OPT_ACDIRMAX: - args->flags |= NFSMNT_ACDIRMAX; - if (bad(val)) + if (convert_int(&args->acdirmax, val) != 0) goto badopt; - args->acdirmax = atoi(val); + args->flags |= NFSMNT_ACDIRMAX; break; case OPT_BG: bg++; @@ -1113,9 +1120,8 @@ set_args(int *mntflags, struct nfs_args *args, char *fshost, struct mnttab *mnt) bg = 0; break; case OPT_RETRY: - if (bad(val)) + if (convert_int(&retries, val) != 0) goto badopt; - retries = atoi(val); break; case OPT_LLOCK: args->flags |= NFSMNT_LLOCK; @@ -1124,9 +1130,9 @@ set_args(int *mntflags, struct nfs_args *args, char *fshost, struct mnttab *mnt) posix = 1; break; case OPT_VERS: - if (bad(val)) + if (convert_int(&num, val) != 0) goto badopt; - nfsvers = (rpcvers_t)atoi(val); + nfsvers = (rpcvers_t)num; break; case OPT_PROTO: if (val == NULL) |