From: neilbrown Date: Mon, 22 Nov 1999 23:17:27 +0000 (+0000) Subject: changed parseopts to not modify the "char *cp" argument. It was X-Git-Tag: nfs-utils-0-1-3~4 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=commitdiff_plain;h=a24504ade282e4f7e2dec379368a2fd41680f388 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. --- diff --git a/ChangeLog b/ChangeLog index afe22cf..7b4c10f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Nov 23 10:13:39 1999 Neil Brown + + * support/nfs/exports.c (parseopts): make copy of opt string before + 'nul'ing out commas so that + exportfs -o option1,option2 hosta:/fs hostb:/fs + applies both options to both exports + Thu Oct 28 12:55:42 1999 H.J. Lu * README: Fix a few typos. 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++; }