X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fexport%2Fxtab.c;h=3ef36610357209f06e73e184cff3fc48e1d177dc;hp=c8adc0672b3c96ba67d18530d8e0bd3057aa2652;hb=1898a9dc11a9834f557775a6b7d1ca7b1b6ca057;hpb=da25e1aa006bafb4dd08e2ffedbd42d7c1f4036b diff --git a/support/export/xtab.c b/support/export/xtab.c index c8adc06..3ef3661 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; @@ -28,16 +32,23 @@ xtab_read(char *xtab, int is_export) if ((lockid = xflock(xtab, "r")) < 0) return 0; setexportent(xtab, "r"); - while ((xp = getexportent()) != NULL) { - if (!(exp = export_lookup(xp->e_hostname, xp->e_path)) && - !(exp = export_create(xp))) { + while ((xp = getexportent(is_export==0, 0)) != NULL) { + if (!(exp = export_lookup(xp->e_hostname, xp->e_path, is_export != 1)) && + !(exp = export_create(xp, is_export!=1))) { 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