diff options
author | neilbrown <neilbrown> | 1999-11-22 23:17:27 +0000 |
---|---|---|
committer | neilbrown <neilbrown> | 1999-11-22 23:17:27 +0000 |
commit | a24504ade282e4f7e2dec379368a2fd41680f388 (patch) | |
tree | bb82435508a73135bb5e02329a293b8ec897fa8a /support/nfs | |
parent | c790e97b504b04aacb914cc8c434977eed218952 (diff) | |
download | nfs-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.c | 22 |
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++; } |