]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/export/xtab.c
nfs-utils: have mountd hold open etab file to force inode number to change
[nfs-utils.git] / support / export / xtab.c
index d9265a24e078627725ea4319e89f43a72f5cb7d9..292087b8c656bc07bd2cd5adea7f76815a7732f8 100644 (file)
@@ -6,7 +6,9 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <sys/fcntl.h>
 #include <unistd.h>
@@ -65,6 +67,9 @@ xtab_mount_read(void)
        if ((fd=open(_PATH_PROC_EXPORTS, O_RDONLY))>=0) {
                close(fd);
                return xtab_read(_PATH_PROC_EXPORTS, 0);
+       } else if ((fd=open(_PATH_PROC_EXPORTS_ALT, O_RDONLY) >= 0)) {
+               close(fd);
+               return xtab_read(_PATH_PROC_EXPORTS_ALT, 0);
        } else
                return xtab_read(_PATH_XTAB, 2);
 }
@@ -75,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)
 {
@@ -146,7 +157,7 @@ xtab_append(nfs_export *exp)
 
 /*
  * rename newfile onto oldfile unless
- * they are identical 
+ * they are identical
  */
 static void cond_rename(char *newfile, char *oldfile)
 {