ref: a351bcdccdf5a4273bc8dc3360a48fbb8b8aa9ea
dir: /src/amount.c/
#include <u.h> #include <libc.h> #include <auth.h> int authmount(int fd, char *mntpt, int flags, char *aname, AuthInfo** aip) { int afd, r; afd = fauth(fd, aname); if (afd < 0){ *aip = nil; fprint(2, "fauth: %r\n"); return mount(fd, afd, mntpt, flags, aname); } *aip = auth_proxy(afd, amount_getkey, "proto=p9any role=client"); if (*aip == nil) return -1; r = mount(fd, afd, mntpt, flags, aname); close(afd); if (r < 0){ auth_freeAI(*aip); *aip = nil; } return r; } void main(int argc, char*argv[]) { AuthInfo*ai; int fd; if (argc != 4){ fprint(2, "usage: %s file mnt aname\n", argv[0]); exits("usage"); } fd = open(argv[1], ORDWR); if (fd < 0) sysfatal("open %s: %r", argv[1]); if (authmount(fd, argv[2], MREPL|MCREATE, argv[3], &ai) < 0) sysfatal("authmount: %r"); if (ai == nil) print("no auth information obtained\n"); if (ai != nil){ print("client uid: %s\n", ai->cuid); print("server uid: %s\n", ai->suid); print("cap: %s\n", ai->cap); auth_freeAI(ai); } exits(nil); }