]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/nfs/exports.c
call gethostbyaddr to make sure that we have canonical hostname
[nfs-utils.git] / support / nfs / exports.c
index 3b34d4ee55e1f420a6923fada953aa15a30d51b3..eb1bf2c8db165bbd761603c4d06be5f74e569fa1 100644 (file)
@@ -98,6 +98,8 @@ getexportent(void)
        if (ok == 0)
                exp[0] = '\0';
        if ((opt = strchr(exp, '(')) != NULL) {
+               if (opt == exp) 
+                       xlog(L_WARNING, "No host name given with %s %s, suggest *%s to avoid warning", ee.e_path, exp, exp);
                *opt++ = '\0';
                if (!(sp = strchr(opt, ')')) || sp[1] != '\0') {
                        syntaxerr("bad option list");
@@ -106,6 +108,8 @@ getexportent(void)
                *sp = '\0';
                if (parseopts(opt, &ee) < 0)
                        return NULL;
+       } else {
+           xlog(L_WARNING, "No options for %s %s: suggest %s() to avoid warning", ee.e_path, exp, exp);
        }
        if (strlen(exp) >= sizeof(ee.e_hostname)) {
                syntaxerr("client name too long");
@@ -131,12 +135,19 @@ putexportent(struct exportent *ep)
 {
        FILE    *fp;
        int     *id, i;
+       char    *esc=ep->e_path;
 
        if (!efp)
                return;
 
        fp = efp->x_fp;
-       fprintf(fp, "%s\t%s(", ep->e_path, ep->e_hostname);
+       for (i=0; esc[i]; i++)
+               if (iscntrl(esc[i]) || esc[i] == '"' || esc[i] == '\\'|| isspace(esc[i]))
+                       fprintf(fp, "\\%03o", esc[i]);
+               else
+                       fprintf(fp, "%c", esc[i]);
+
+       fprintf(fp, "\t%s(", ep->e_hostname);
        fprintf(fp, "%s,", (ep->e_flags & NFSEXP_READONLY)? "ro" : "rw");
        fprintf(fp, "%ssync,", (ep->e_flags & NFSEXP_ASYNC)? "a" : "");
        fprintf(fp, "%swdelay,", (ep->e_flags & NFSEXP_GATHERED_WRITES)?