Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
#include <auth.h>

void
usage(void)
{
        fprint(2, "usage: auth/challenge 'params'\n");
        exits("usage");
}

void
main(int argc, char **argv)
{
        char buf[128], bufu[128];
        int afd, n;
        AuthInfo *ai;
        AuthRpc *rpc;
        Chalstate *c;

        ARGBEGIN{
        default:
                usage();
        }ARGEND

        if(argc != 1)
                usage();

        if((afd = open("/mnt/factotum/rpc", ORDWR)) < 0)
                sysfatal("open /mnt/factotum/rpc: %r");

        rpc = auth_allocrpc(afd);
        if(rpc == nil)
                sysfatal("auth_allocrpc: %r");

        if((c = auth_challenge("%s", argv[0])) == nil)
                sysfatal("auth_challenge: %r");

        print("challenge: %s\n", c->chal);
        print("user:");
        n = read(0, bufu, sizeof bufu);
        if(n > 0){
                bufu[n-1] = '\0';
                c->user = bufu;
        }

        print("response: ");
        n = read(0, buf, sizeof buf);
        if(n < 0)
                sysfatal("read: %r");
        if(n == 0)
                exits(nil);
        c->nresp = n-1;
        c->resp = buf;
        if((ai = auth_response(c)) == nil)
                sysfatal("auth_response: %r");

        print("%s %s\n", ai->cuid, ai->suid);
}