aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/auth/factotum/ctl.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-02-13 18:32:56 +0000
committerrsc <devnull@localhost>2005-02-13 18:32:56 +0000
commitfb7a39bc56092ecd2a52d8b6fc403eda6b905ba1 (patch)
tree58842675b911280685f25fbb33d6422d929fe210 /src/cmd/auth/factotum/ctl.c
parent05abefb2a0866dde7721be1f5c57fd35a5bd140f (diff)
downloadplan9port-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.c17
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;