summaryrefslogtreecommitdiffstats
path: root/support/nfs
diff options
context:
space:
mode:
authorneilbrown <neilbrown>1999-11-22 23:17:27 +0000
committerneilbrown <neilbrown>1999-11-22 23:17:27 +0000
commita24504ade282e4f7e2dec379368a2fd41680f388 (patch)
treebb82435508a73135bb5e02329a293b8ec897fa8a /support/nfs
parentc790e97b504b04aacb914cc8c434977eed218952 (diff)
downloadnfs-utils-a24504ade282e4f7e2dec379368a2fd41680f388.tar.gz
nfs-utils-a24504ade282e4f7e2dec379368a2fd41680f388.tar.xz
nfs-utils-a24504ade282e4f7e2dec379368a2fd41680f388.zip
changed parseopts to not modify the "char *cp" argument. It was
replacing commas with nuls so that parseopts could not be called twice with the same string.
Diffstat (limited to 'support/nfs')
-rw-r--r--support/nfs/exports.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/support/nfs/exports.c b/support/nfs/exports.c
index 702df23..078c806 100644
--- a/support/nfs/exports.c
+++ b/support/nfs/exports.c
@@ -253,12 +253,11 @@ updateexportent(struct exportent *eep, char *options)
}
/*
- * Parse option string pointed to by s and set mount options accordingly.
+ * Parse option string pointed to by cp and set mount options accordingly.
*/
static int
parseopts(char *cp, struct exportent *ep)
{
- char *opt;
squids = ep->e_squids; nsquids = ep->e_nsquids;
sqgids = ep->e_sqgids; nsqgids = ep->e_nsqgids;
@@ -266,11 +265,14 @@ parseopts(char *cp, struct exportent *ep)
while (isblank(*cp))
cp++;
while (*cp) {
- opt = cp;
+ char *opt = strdup(cp);
+ char *optstart = cp;
while (*cp && *cp != ',')
cp++;
- if (*cp)
- *cp++ = '\0';
+ if (*cp) {
+ opt[cp-optstart] = '\0';
+ cp++;
+ }
/* process keyword */
if (strcmp(opt, "ro") == 0)
@@ -316,18 +318,24 @@ parseopts(char *cp, struct exportent *ep)
else if (strncmp(opt, "anongid=", 8) == 0)
ep->e_anongid = atoi(opt+8);
else if (strncmp(opt, "squash_uids=", 12) == 0) {
- if (parsesquash(opt+12, &squids, &nsquids, &cp) < 0)
+ if (parsesquash(opt+12, &squids, &nsquids, &cp) < 0) {
+ free(opt);
return -1;
+ }
} else if (strncmp(opt, "squash_gids=", 12) == 0) {
- if (parsesquash(opt+12, &sqgids, &nsqgids, &cp) < 0)
+ if (parsesquash(opt+12, &sqgids, &nsqgids, &cp) < 0) {
+ free(opt);
return -1;
+ }
} else {
xlog(L_ERROR,
"Unknown keyword \"%s\" in export file\n",
opt);
ep->e_flags |= NFSEXP_ALLSQUASH | NFSEXP_READONLY;
+ free(opt);
return -1;
}
+ free(opt);
while (isblank(*cp))
cp++;
}