summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-09-18 11:50:58 -0400
committerSteve Dickson <steved@redhat.com>2013-09-18 15:10:26 -0400
commit9b5c3c6a6571a265a90cfce30345891fac24a67c (patch)
treebd01642dc030dcec748470aee796915ff69b1ac5
parent56e3172f5ccbc232204b11cdbf31d9a627c9f6ad (diff)
downloadnfs-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.c34
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 &ee;
}
+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);
}
}