diff options
author | rsc <devnull@localhost> | 2005-02-13 18:32:56 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-02-13 18:32:56 +0000 |
commit | fb7a39bc56092ecd2a52d8b6fc403eda6b905ba1 (patch) | |
tree | 58842675b911280685f25fbb33d6422d929fe210 /src/cmd/auth/factotum/ctl.c | |
parent | 05abefb2a0866dde7721be1f5c57fd35a5bd140f (diff) | |
download | plan9port-fb7a39bc56092ecd2a52d8b6fc403eda6b905ba1.tar.gz plan9port-fb7a39bc56092ecd2a52d8b6fc403eda6b905ba1.tar.bz2 plan9port-fb7a39bc56092ecd2a52d8b6fc403eda6b905ba1.zip |
add pass proto
Diffstat (limited to 'src/cmd/auth/factotum/ctl.c')
-rw-r--r-- | src/cmd/auth/factotum/ctl.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/cmd/auth/factotum/ctl.c b/src/cmd/auth/factotum/ctl.c index 85fbe5d8..d426f86f 100644 --- a/src/cmd/auth/factotum/ctl.c +++ b/src/cmd/auth/factotum/ctl.c @@ -36,7 +36,7 @@ ctlwrite(char *a) { char *p; int i, nmatch, ret; - Attr *attr, **l, **lpriv, **lprotos, *pa, *priv, *protos; + Attr *attr, *kpa, **l, **lpriv, **lprotos, *pa, *priv, *protos; Key *k; Proto *proto; @@ -107,17 +107,22 @@ ctlwrite(char *a) ret = -1; continue; } - if(proto->checkkey == nil){ - werrstr("proto %s does not accept keys", proto->name); - ret = -1; - continue; + if(proto->keyprompt){ + kpa = parseattr(proto->keyprompt); + if(!matchattr(kpa, attr, priv)){ + freeattr(kpa); + werrstr("missing attributes -- want %s", proto->keyprompt); + ret = -1; + continue; + } + freeattr(kpa); } k = emalloc(sizeof(Key)); k->attr = mkattr(AttrNameval, "proto", proto->name, copyattr(attr)); k->privattr = copyattr(priv); k->ref = 1; k->proto = proto; - if((*proto->checkkey)(k) < 0){ + if(proto->checkkey && (*proto->checkkey)(k) < 0){ ret = -1; keyclose(k); continue; |