diff options
| author | rsc <devnull@localhost> | 2005-02-13 05:58:45 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2005-02-13 05:58:45 +0000 |
| commit | 0f8ec41b0ae522b73085fa1662461e6351ba7e54 (patch) | |
| tree | 2d54cfd8208bdd903273ccc7df889677cf7fe8d5 /src/cmd/factotum/main.c | |
| parent | 7637c81af02c49ef508b946dfdec39f757a658d4 (diff) | |
| download | plan9port-0f8ec41b0ae522b73085fa1662461e6351ba7e54.tar.gz plan9port-0f8ec41b0ae522b73085fa1662461e6351ba7e54.zip | |
moving to auth
Diffstat (limited to 'src/cmd/factotum/main.c')
| -rw-r--r-- | src/cmd/factotum/main.c | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/src/cmd/factotum/main.c b/src/cmd/factotum/main.c deleted file mode 100644 index dbcfa5fe..00000000 --- a/src/cmd/factotum/main.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "std.h" -#include "dat.h" -#include <9pclient.h> - -int extrafactotumdir; -int debug; -int trysecstore = 1; -char *factname = "factotum"; -char *service = "factotum"; -char *owner; -char *authaddr; -void gflag(char*); - -void -usage(void) -{ - fprint(2, "usage: factotum [-Dd] [-a authaddr] [-m mtpt] [-s service]\n"); - fprint(2, " or factotum -g keypattern\n"); - fprint(2, " or factotum -g 'badkeyattr\\nmsg\\nkeypattern'\n"); - threadexitsall("usage"); -} - -void -threadmain(int argc, char *argv[]) -{ - char *mtpt; - char err[ERRMAX]; - -// mtpt = "/mnt"; - mtpt = nil; - owner = getuser(); - quotefmtinstall(); - fmtinstall('A', attrfmt); - fmtinstall('H', encodefmt); - fmtinstall('N', attrnamefmt); - - if(argc == 3 && strcmp(argv[1], "-g") == 0){ - gflag(argv[2]); - threadexitsall(nil); - } - - ARGBEGIN{ - default: - usage(); - case 'D': - chatty9p++; - break; - case 'a': - authaddr = EARGF(usage()); - break; - case 'g': - usage(); - case 'm': - mtpt = EARGF(usage()); - break; - case 's': - service = EARGF(usage()); - break; - case 'n': - trysecstore = 0; - break; - case 'x': - extrafactotumdir = 1; - break; - }ARGEND - - if(argc != 0) - usage(); - - if(trysecstore && havesecstore()){ - while(secstorefetch() < 0){ - rerrstr(err, sizeof err); - if(strcmp(err, "cancel") == 0) - break; - fprint(2, "secstorefetch: %r\n"); - fprint(2, "Enter an empty password to quit.\n"); - } - } - - threadpostmountsrv(&fs, service, mtpt, MBEFORE); - threadexits(nil); -} - -/* - * prompt user for a key. don't care about memory leaks, runs standalone - */ -static Attr* -promptforkey(int fd, char *params) -{ - char *v; - Attr *a, *attr; - char *def; - - attr = _parseattr(params); - fprint(fd, "!adding key:"); - for(a=attr; a; a=a->next) - if(a->type != AttrQuery && a->name[0] != '!') - fprint(fd, " %q=%q", a->name, a->val); - fprint(fd, "\n"); - - for(a=attr; a; a=a->next){ - v = a->name; - if(a->type != AttrQuery || v[0]=='!') - continue; - def = nil; - if(strcmp(v, "user") == 0) - def = getuser(); - a->val = readcons(v, def, 0); - if(a->val == nil) - sysfatal("user terminated key input"); - a->type = AttrNameval; - } - for(a=attr; a; a=a->next){ - v = a->name; - if(a->type != AttrQuery || v[0]!='!') - continue; - def = nil; - if(strcmp(v+1, "user") == 0) - def = getuser(); - a->val = readcons(v+1, def, 1); - if(a->val == nil) - sysfatal("user terminated key input"); - a->type = AttrNameval; - } - fprint(fd, "!\n"); - close(fd); - return attr; -} - -/* - * send a key to the mounted factotum - */ -static int -sendkey(Attr *attr) -{ - int rv; - char buf[1024]; - CFid *fid; - - fid = nsopen("factotum", nil, "ctl", OWRITE); - if(fid == nil) - sysfatal("opening factotum/ctl: %r"); - snprint(buf, sizeof buf, "key %A\n", attr); - rv = fswrite(fid, buf, strlen(buf)); - fsclose(fid); - return rv; -} - -static void -askuser(int fd, char *params) -{ - Attr *attr; - - attr = promptforkey(fd, params); - if(attr == nil) - sysfatal("no key supplied"); - if(sendkey(attr) < 0) - sysfatal("sending key to factotum: %r"); -} - -void -gflag(char *s) -{ - char *f[4]; - int nf; - int fd; - - if((fd = open("/dev/tty", ORDWR)) < 0) - sysfatal("open /dev/tty: %r"); - - nf = getfields(s, f, nelem(f), 0, "\n"); - if(nf == 1){ /* needkey or old badkey */ - fprint(fd, "\n"); - askuser(fd, s); - threadexitsall(nil); - } - if(nf == 3){ /* new badkey */ - fprint(fd, "\n"); - fprint(fd, "!replace: %s\n", f[0]); - fprint(fd, "!because: %s\n", f[1]); - askuser(fd, f[2]); - threadexitsall(nil); - } - usage(); -} |
