ref: a70b93a356662355214f5405edda066786f6dd03
dir: /sys/src/cmd/9nfs/nametest.c/
#include "all.h" void mapinit(char*, char*); int debug; int rpcdebug; int style = 'u'; Biobuf *in; Unixid *ids; Unixid **pids; Unixidmap *mp; void main(int argc, char **argv) { int id, arc; char *arv[4]; char *l, *name; chatty = 1; ARGBEGIN{ case '9': case 'u': style = ARGC(); break; case 'D': ++debug; break; }ARGEND if(argc <= 0){ ids = readunixids("/fd/0", style); if(ids) idprint(1, ids); exits(ids ? 0 : "readunixids"); } mapinit(argv[0], 0); in = Bopen("/fd/0", OREAD); while(l = Brdline(in, '\n')){ /* assign = */ l[Blinelen(in)-1] = 0; arc = strparse(l, nelem(arv), arv); if(arc <= 0) continue; switch(arv[0][0]){ case 'r': if(arc < 2) continue; mapinit(arv[1], arv[2]); break; case 'i': if(arc < 2) continue; id = strtol(arv[1], 0, 10); name = id2name(pids, id); print("%d -> %s\n", id, name); break; case 'n': if(arc < 2) continue; name = arv[1]; id = name2id(pids, name); print("%s -> %d\n", name, id); break; case 'p': print("server=%s, client=%s\n", mp->server, mp->client); break; case 'P': idprint(1, *pids); break; case 'u': pids = &mp->u.ids; print("users...\n"); break; case 'g': pids = &mp->g.ids; print("groups...\n"); break; } } exits(0); } void mapinit(char *file, char *client) { if(file){ print("reading %s...\n", file); if(readunixidmaps(file) < 0) exits("readunixidmaps"); if(!client) client = "nslocum.research.bell-labs.com"; } print("client = %s...\n", client); mp = pair2idmap("bootes", client, 0); if(mp == 0){ fprint(2, "%s: pair2idmap failed\n", argv0); exits("pair2idmap"); } pids = &mp->u.ids; print("[users...]\n"); }