diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-09-18 11:50:58 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2013-09-18 15:10:26 -0400 |
commit | 9b5c3c6a6571a265a90cfce30345891fac24a67c (patch) | |
tree | bd01642dc030dcec748470aee796915ff69b1ac5 | |
parent | 56e3172f5ccbc232204b11cdbf31d9a627c9f6ad (diff) | |
download | nfs-utils-9b5c3c6a6571a265a90cfce30345891fac24a67c.tar.gz nfs-utils-9b5c3c6a6571a265a90cfce30345891fac24a67c.tar.xz nfs-utils-9b5c3c6a6571a265a90cfce30345891fac24a67c.zip |
exportfs: insecure/secure should be a secinfo_flag
The 'insecure' flag is listed in /proc/fs/nfsd/export_features
in newer kernels as being a secinfo_flag, however it is not
displayed by secinfo_show.
This patch fixes that, and sets up a framework which should make
it easy to add new flags to /proc/fs/nfsd/export_features and have
them be displayed properly.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | support/nfs/exports.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/support/nfs/exports.c b/support/nfs/exports.c index dea040f..05178f7 100644 --- a/support/nfs/exports.c +++ b/support/nfs/exports.c @@ -196,10 +196,35 @@ getexportent(int fromkernel, int fromexports) return ⅇ } +static const struct secinfo_flag_displaymap { + unsigned int flag; + const char *set; + const char *unset; +} secinfo_flag_displaymap[] = { + { NFSEXP_READONLY, "ro", "rw" }, + { NFSEXP_INSECURE_PORT, "insecure", "secure" }, + { NFSEXP_ROOTSQUASH, "root_squash", "no_root_squash" }, + { NFSEXP_ALLSQUASH, "all_squash", "no_all_squash" }, + { 0, NULL, NULL } +}; + +static void secinfo_flags_show(FILE *fp, unsigned int flags, unsigned int mask) +{ + const struct secinfo_flag_displaymap *p; + + for (p = &secinfo_flag_displaymap[0]; p->flag != 0; p++) { + if (!(mask & p->flag)) + continue; + fprintf(fp, ",%s", (flags & p->flag) ? p->set : p->unset); + } +} + void secinfo_show(FILE *fp, struct exportent *ep) { + const struct export_features *ef; struct sec_entry *p1, *p2; - int flags; + + ef = get_export_features(); for (p1=ep->e_secinfo; p1->flav; p1=p2) { @@ -208,12 +233,7 @@ void secinfo_show(FILE *fp, struct exportent *ep) p2++) { fprintf(fp, ":%s", p2->flav->flavour); } - flags = p1->flags; - fprintf(fp, ",%s", (flags & NFSEXP_READONLY) ? "ro" : "rw"); - fprintf(fp, ",%sroot_squash", (flags & NFSEXP_ROOTSQUASH)? - "" : "no_"); - fprintf(fp, ",%sall_squash", (flags & NFSEXP_ALLSQUASH)? - "" : "no_"); + secinfo_flags_show(fp, p1->flags, ef->secinfo_flags); } } |