Small tweaks
Lots of new code imported.
This commit is contained in:
parent
a770daa795
commit
2277c5d7bb
86 changed files with 12444 additions and 91 deletions
139
src/cmd/factotum/confirm.c
Normal file
139
src/cmd/factotum/confirm.c
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
#include "std.h"
|
||||
#include "dat.h"
|
||||
|
||||
Logbuf confbuf;
|
||||
|
||||
void
|
||||
confirmread(Req *r)
|
||||
{
|
||||
lbread(&confbuf, r);
|
||||
}
|
||||
|
||||
void
|
||||
confirmflush(Req *r)
|
||||
{
|
||||
lbflush(&confbuf, r);
|
||||
}
|
||||
|
||||
int
|
||||
confirmwrite(char *s)
|
||||
{
|
||||
char *t, *ans;
|
||||
int allow;
|
||||
ulong tag;
|
||||
Attr *a;
|
||||
Conv *c;
|
||||
|
||||
a = _parseattr(s);
|
||||
if(a == nil){
|
||||
werrstr("bad attr");
|
||||
return -1;
|
||||
}
|
||||
if((t = _strfindattr(a, "tag")) == nil){
|
||||
werrstr("no tag");
|
||||
return -1;
|
||||
}
|
||||
tag = strtoul(t, 0, 0);
|
||||
if((ans = _strfindattr(a, "answer")) == nil){
|
||||
werrstr("no answer");
|
||||
return -1;
|
||||
}
|
||||
if(strcmp(ans, "yes") == 0)
|
||||
allow = 1;
|
||||
else if(strcmp(ans, "no") == 0)
|
||||
allow = 0;
|
||||
else{
|
||||
werrstr("bad answer");
|
||||
return -1;
|
||||
}
|
||||
for(c=conv; c; c=c->next){
|
||||
if(tag == c->tag){
|
||||
nbsendul(c->keywait, allow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(c == nil){
|
||||
werrstr("tag not found");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
confirmkey(Conv *c, Key *k)
|
||||
{
|
||||
if(*confirminuse == 0)
|
||||
return -1;
|
||||
|
||||
lbappend(&confbuf, "confirm tag=%lud %A %N", c->tag, k->attr, k->privattr);
|
||||
c->state = "keyconfirm";
|
||||
return recvul(c->keywait);
|
||||
}
|
||||
|
||||
Logbuf needkeybuf;
|
||||
|
||||
void
|
||||
needkeyread(Req *r)
|
||||
{
|
||||
lbread(&needkeybuf, r);
|
||||
}
|
||||
|
||||
void
|
||||
needkeyflush(Req *r)
|
||||
{
|
||||
lbflush(&needkeybuf, r);
|
||||
}
|
||||
|
||||
int
|
||||
needkeywrite(char *s)
|
||||
{
|
||||
char *t;
|
||||
ulong tag;
|
||||
Attr *a;
|
||||
Conv *c;
|
||||
|
||||
a = _parseattr(s);
|
||||
if(a == nil){
|
||||
werrstr("empty write");
|
||||
return -1;
|
||||
}
|
||||
if((t = _strfindattr(a, "tag")) == nil){
|
||||
werrstr("no tag");
|
||||
freeattr(a);
|
||||
return -1;
|
||||
}
|
||||
tag = strtoul(t, 0, 0);
|
||||
for(c=conv; c; c=c->next)
|
||||
if(c->tag == tag){
|
||||
nbsendul(c->keywait, 0);
|
||||
break;
|
||||
}
|
||||
if(c == nil){
|
||||
werrstr("tag not found");
|
||||
freeattr(a);
|
||||
return -1;
|
||||
}
|
||||
freeattr(a);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
needkey(Conv *c, Attr *a)
|
||||
{
|
||||
if(c == nil || *needkeyinuse == 0)
|
||||
return -1;
|
||||
|
||||
lbappend(&needkeybuf, "needkey tag=%lud %A", c->tag, a);
|
||||
return nbrecvul(c->keywait);
|
||||
}
|
||||
|
||||
int
|
||||
badkey(Conv *c, Key *k, char *msg, Attr *a)
|
||||
{
|
||||
if(c == nil || *needkeyinuse == 0)
|
||||
return -1;
|
||||
|
||||
lbappend(&needkeybuf, "badkey tag=%lud %A %N\n%s\n%A",
|
||||
c->tag, k->attr, k->privattr, msg, a);
|
||||
return nbrecvul(c->keywait);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue