#include #include #include #include "fns.h" void usage(void) { fprint(2, "usage: %s [-k keypattern] cmd args...\n", argv0); exits("usage"); } void main(int argc, char **argv) { char *keypattern; int fd; AuthInfo *ai; char alg[256]; keypattern = ""; ARGBEGIN { case 'k': keypattern = EARGF(usage()); break; default: usage(); } ARGEND if(argc < 1) usage(); fd = 0; if((ai = auth_proxy(fd, nil, "proto=infauth %s", keypattern)) == nil) sysfatal("auth: %r"); if(getmsg(fd, alg, sizeof alg) < 0) sysfatal("read alg: %r"); if(strcmp(alg, "none") != 0) { if((fd = mypushssl(fd, alg, ai->secret, ai->nsecret)) < 0) sysfatal("pushssl: %r"); } dup(fd, 0); dup(fd, 1); dup(fd, 2); exec(argv[0], argv); sysfatal("exec %s: %r", argv[0]); }