X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fexports.c;h=078c806f3c4c672c8b94d4fef49e7b30ae48a68e;hp=702df23097046e90a94e3fe29ef5a83f5fd0236d;hb=a24504ade282e4f7e2dec379368a2fd41680f388;hpb=c790e97b504b04aacb914cc8c434977eed218952 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++; }