]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/export/xtab.c
Exportfs and rpc.mountd optimalization
[nfs-utils.git] / support / export / xtab.c
index 0ddb2516a8d5e8327441555ca668788f6c1850e6..510765a3f0d59b5517e06b0542f1eb8d0d702f03 100644 (file)
@@ -80,6 +80,12 @@ xtab_export_read(void)
        return xtab_read(_PATH_ETAB, 1);
 }
 
+/*
+ * mountd now keeps an open fd for the etab at all times to make sure that the
+ * inode number changes when the xtab_export_write is done. If you change the
+ * routine below such that the files are edited in place, then you'll need to
+ * fix the auth_reload logic as well...
+ */
 static int
 xtab_write(char *xtab, char *xtabtmp, int is_export)
 {
@@ -94,7 +100,7 @@ xtab_write(char *xtab, char *xtabtmp, int is_export)
        setexportent(xtabtmp, "w");
 
        for (i = 0; i < MCL_MAXTYPES; i++) {
-               for (exp = exportlist[i]; exp; exp = exp->m_next) {
+               for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
                        if (is_export && !exp->m_xtabent)
                                continue;
                        if (!is_export && ! exp->m_exported)
@@ -102,10 +108,7 @@ xtab_write(char *xtab, char *xtabtmp, int is_export)
 
                        /* write out the export entry using the FQDN */
                        xe = exp->m_export;
-                       strncpy(xe.e_hostname,
-                               exp->m_client->m_hostname,
-                               sizeof (xe.e_hostname) - 1);
-                       xe.e_hostname[sizeof (xe.e_hostname) - 1] = '\0';
+                       xe.e_hostname = exp->m_client->m_hostname;
                        putexportent(&xe);
                }
        }
@@ -140,9 +143,7 @@ xtab_append(nfs_export *exp)
                return;
        setexportent(_PATH_XTAB, "a");
        xe = exp->m_export;
-       strncpy(xe.e_hostname, exp->m_client->m_hostname,
-              sizeof (xe.e_hostname) - 1);
-       xe.e_hostname[sizeof (xe.e_hostname) - 1] = '\0';
+       xe.e_hostname = exp->m_client->m_hostname;
        putexportent(&xe);
        endexportent();
        xfunlock(lockid);