+Tue Nov 23 10:13:39 1999 Neil Brown <neilb@cse.unsw.edu.au>
+
+ * 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 <hjl@lucon.org>
* README: Fix a few typos.
}
/*
- * 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;
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)
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++;
}