summaryrefslogtreecommitdiffstats
path: root/support/export/xtab.c
diff options
context:
space:
mode:
authorneilbrown <neilbrown>2000-08-23 01:17:52 +0000
committerneilbrown <neilbrown>2000-08-23 01:17:52 +0000
commit82d42dffa84fb884684f75769ca13668c5188a5e (patch)
tree66d5ee003f36756f622dfdb8677f35a2de9e3852 /support/export/xtab.c
parentda25e1aa006bafb4dd08e2ffedbd42d7c1f4036b (diff)
downloadnfs-utils-82d42dffa84fb884684f75769ca13668c5188a5e.tar.gz
nfs-utils-82d42dffa84fb884684f75769ca13668c5188a5e.tar.xz
nfs-utils-82d42dffa84fb884684f75769ca13668c5188a5e.zip
1/ be less trusting of information in /var/lib/nfs/xtab. Add things to
kernel even if they are in here. 2/ O_CREAT [ex]log when locking for write incase they don't exist 3/ added etc/debian diretory with some files
Diffstat (limited to 'support/export/xtab.c')
-rw-r--r--support/export/xtab.c19
1 files changed, 15 insertions, 4 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