void expkey_request(struct cache_detail *cd, struct cache_head *h, char **bpp, int *blen) { /* client fsidtype \xfsid */ struct svc_expkey *ek = container_of(h, struct svc_expkey, h); char type[5]; qword_add(bpp, blen, ek->ek_client->name); snprintf(type, 5, "%d", ek->ek_fsidtype); qword_add(bpp, blen, type); qword_addhex(bpp, blen, (char*)ek->ek_fsid, key_len(ek->ek_fsidtype)); (*bpp)[-1] = '\n'; }
static int test_export(char *path, int with_fsid) { char buf[1024]; char *bp = buf; int len = sizeof(buf); int fd, n; n = snprintf(buf, len, "-test-client- "); bp += n; len -= n; qword_add(&bp, &len, path); if (len < 1) return 0; snprintf(bp, len, " 3 %d 65534 65534 0\n", with_fsid ? NFSEXP_FSID : 0); fd = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY); if (fd < 0) return 0; n = write(fd, buf, strlen(buf)); close(fd); if (n < 0) return 0; return 1; }
static void dump(int verbose, int export_format) { char buf[1024]; char *bp; int len; nfs_export *exp; struct exportent *ep; int htype; char *hname, c; for (htype = 0; htype < MCL_MAXTYPES; htype++) { for (exp = exportlist[htype].p_head; exp; exp = exp->m_next) { ep = &exp->m_export; if (!exp->m_xtabent) continue; /* neilb */ if (htype == MCL_ANONYMOUS) hname = (export_format) ? "*" : "<world>"; else hname = ep->e_hostname; if (strlen(ep->e_path) > 14 && !export_format) printf("%-14s\n\t\t%s", ep->e_path, hname); else if (export_format) { bp = buf; len = sizeof(buf) - 1; qword_add(&bp, &len, ep->e_path); *bp = '\0'; printf("%s %s", buf, hname); } else { printf("%-14s\t%s", ep->e_path, hname); } if (!verbose && !export_format) { printf("\n"); continue; } c = '('; if (ep->e_flags & NFSEXP_READONLY) c = dumpopt(c, "ro"); else c = dumpopt(c, "rw"); if (ep->e_flags & NFSEXP_ASYNC) c = dumpopt(c, "async"); if (ep->e_flags & NFSEXP_GATHERED_WRITES) c = dumpopt(c, "wdelay"); if (ep->e_flags & NFSEXP_NOHIDE) c = dumpopt(c, "nohide"); if (ep->e_flags & NFSEXP_CROSSMOUNT) c = dumpopt(c, "crossmnt"); if (ep->e_flags & NFSEXP_INSECURE_PORT) c = dumpopt(c, "insecure"); if (ep->e_flags & NFSEXP_ROOTSQUASH) c = dumpopt(c, "root_squash"); else c = dumpopt(c, "no_root_squash"); if (ep->e_flags & NFSEXP_ALLSQUASH) c = dumpopt(c, "all_squash"); if (ep->e_flags & NFSEXP_NOSUBTREECHECK) c = dumpopt(c, "no_subtree_check"); if (ep->e_flags & NFSEXP_NOAUTHNLM) c = dumpopt(c, "insecure_locks"); if (ep->e_flags & NFSEXP_NOACL) c = dumpopt(c, "no_acl"); if (ep->e_flags & NFSEXP_FSID) c = dumpopt(c, "fsid=%d", ep->e_fsid); if (ep->e_uuid) c = dumpopt(c, "fsid=%s", ep->e_uuid); if (ep->e_mountpoint) c = dumpopt(c, "mountpoint%s%s", ep->e_mountpoint[0]?"=":"", ep->e_mountpoint); if (ep->e_anonuid != 65534) c = dumpopt(c, "anonuid=%d", ep->e_anonuid); if (ep->e_anongid != 65534) c = dumpopt(c, "anongid=%d", ep->e_anongid); switch(ep->e_fslocmethod) { case FSLOC_NONE: break; case FSLOC_REFER: c = dumpopt(c, "refer=%s", ep->e_fslocdata); break; case FSLOC_REPLICA: c = dumpopt(c, "replicas=%s", ep->e_fslocdata); break; #ifdef DEBUG case FSLOC_STUB: c = dumpopt(c, "fsloc=stub"); break; #endif } secinfo_show(stdout, ep); printf("%c\n", (c != '(')? ')' : ' '); } } }