summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/export/xtab.c19
-rw-r--r--support/include/exportfs.h4
-rw-r--r--support/nfs/xio.c2
3 files changed, 18 insertions, 7 deletions
diff --git a/support/export/xtab.c b/support/export/xtab.c
index c8adc06..b0c3095 100644
--- a/support/export/xtab.c
+++ b/support/export/xtab.c
@@ -21,6 +21,10 @@
static int
xtab_read(char *xtab, int is_export)
{
+ /* is_export == 0 => reading /proc/fs/nfs/exports - we know these things are exported to kernel
+ * is_export == 1 => reading /var/lib/nfs/etab - these things are allowed to be exported
+ * is_export == 2 => reading /var/lib/nfs/xtab - these things might be known to kernel
+ */
struct exportent *xp;
nfs_export *exp;
int lockid;
@@ -33,11 +37,18 @@ xtab_read(char *xtab, int is_export)
!(exp = export_create(xp))) {
continue;
}
- if (is_export) {
+ switch (is_export) {
+ case 0:
+ exp->m_exported = 1;
+ break;
+ case 1:
exp->m_xtabent = 1;
exp->m_mayexport = 1;
- } else
- exp->m_exported = 1;
+ break;
+ case 2:
+ exp->m_exported = -1;/* may be exported */
+ break;
+ }
}
endexportent();
xfunlock(lockid);
@@ -53,7 +64,7 @@ xtab_mount_read(void)
close(fd);
return xtab_read(_PATH_PROC_EXPORTS, 0);
} else
- return xtab_read(_PATH_XTAB, 1);
+ return xtab_read(_PATH_XTAB, 2);
}
int
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
index d440dc1..3ca248e 100644
--- a/support/include/exportfs.h
+++ b/support/include/exportfs.h
@@ -36,8 +36,8 @@ typedef struct mexport {
struct mexport * m_next;
struct mclient * m_client;
struct exportent m_export;
- int m_exported : 1, /* known to knfsd */
- m_xtabent : 1, /* xtab entry exists */
+ int m_exported; /* known to knfsd. -1 means not sure */
+ int m_xtabent : 1, /* xtab entry exists */
m_mayexport: 1, /* derived from xtabbed */
m_changed : 1; /* options (may) have changed */
} nfs_export;
diff --git a/support/nfs/xio.c b/support/nfs/xio.c
index 49ee6bc..0a250fc 100644
--- a/support/nfs/xio.c
+++ b/support/nfs/xio.c
@@ -55,7 +55,7 @@ xflock(char *fname, char *type)
struct flock fl = { readonly? F_RDLCK : F_WRLCK, SEEK_SET, 0, 0, 0 };
int fd;
- if ((fd = open(fname, readonly? O_RDONLY : O_RDWR)) < 0) {
+ if ((fd = open(fname, readonly? O_RDONLY : (O_RDWR|O_CREAT))) < 0) {
xlog(L_WARNING, "could not open %s for locking", fname);
return -1;
}