1 6e527fbc 2005-02-13 devnull #include "std.h"
2 6e527fbc 2005-02-13 devnull #include "dat.h"
4 6e527fbc 2005-02-13 devnull Logbuf confbuf;
7 6e527fbc 2005-02-13 devnull confirmread(Req *r)
9 6e527fbc 2005-02-13 devnull lbread(&confbuf, r);
13 6e527fbc 2005-02-13 devnull confirmflush(Req *r)
15 6e527fbc 2005-02-13 devnull lbflush(&confbuf, r);
19 6e527fbc 2005-02-13 devnull confirmwrite(char *s)
21 6e527fbc 2005-02-13 devnull char *t, *ans;
22 6e527fbc 2005-02-13 devnull int allow;
23 6e527fbc 2005-02-13 devnull ulong tag;
27 6e527fbc 2005-02-13 devnull a = _parseattr(s);
28 6e527fbc 2005-02-13 devnull if(a == nil){
29 6e527fbc 2005-02-13 devnull werrstr("bad attr");
30 6e527fbc 2005-02-13 devnull return -1;
32 6e527fbc 2005-02-13 devnull if((t = _strfindattr(a, "tag")) == nil){
33 6e527fbc 2005-02-13 devnull werrstr("no tag");
34 6e527fbc 2005-02-13 devnull return -1;
36 6e527fbc 2005-02-13 devnull tag = strtoul(t, 0, 0);
37 6e527fbc 2005-02-13 devnull if((ans = _strfindattr(a, "answer")) == nil){
38 6e527fbc 2005-02-13 devnull werrstr("no answer");
39 6e527fbc 2005-02-13 devnull return -1;
41 6e527fbc 2005-02-13 devnull if(strcmp(ans, "yes") == 0)
42 6e527fbc 2005-02-13 devnull allow = 1;
43 6e527fbc 2005-02-13 devnull else if(strcmp(ans, "no") == 0)
44 6e527fbc 2005-02-13 devnull allow = 0;
46 6e527fbc 2005-02-13 devnull werrstr("bad answer");
47 6e527fbc 2005-02-13 devnull return -1;
49 6e527fbc 2005-02-13 devnull for(c=conv; c; c=c->next){
50 6e527fbc 2005-02-13 devnull if(tag == c->tag){
51 6e527fbc 2005-02-13 devnull nbsendul(c->keywait, allow);
55 6e527fbc 2005-02-13 devnull if(c == nil){
56 6e527fbc 2005-02-13 devnull werrstr("tag not found");
57 6e527fbc 2005-02-13 devnull return -1;
59 6e527fbc 2005-02-13 devnull return 0;
63 6e527fbc 2005-02-13 devnull confirmkey(Conv *c, Key *k)
65 6e527fbc 2005-02-13 devnull if(*confirminuse == 0)
66 6e527fbc 2005-02-13 devnull return -1;
68 6e527fbc 2005-02-13 devnull lbappend(&confbuf, "confirm tag=%lud %A %N", c->tag, k->attr, k->privattr);
69 6e527fbc 2005-02-13 devnull c->state = "keyconfirm";
70 6e527fbc 2005-02-13 devnull return recvul(c->keywait);
73 6e527fbc 2005-02-13 devnull Logbuf needkeybuf;
76 6e527fbc 2005-02-13 devnull needkeyread(Req *r)
78 6e527fbc 2005-02-13 devnull lbread(&needkeybuf, r);
82 6e527fbc 2005-02-13 devnull needkeyflush(Req *r)
84 6e527fbc 2005-02-13 devnull lbflush(&needkeybuf, r);
88 6e527fbc 2005-02-13 devnull needkeywrite(char *s)
91 6e527fbc 2005-02-13 devnull ulong tag;
95 6e527fbc 2005-02-13 devnull a = _parseattr(s);
96 6e527fbc 2005-02-13 devnull if(a == nil){
97 6e527fbc 2005-02-13 devnull werrstr("empty write");
98 6e527fbc 2005-02-13 devnull return -1;
100 6e527fbc 2005-02-13 devnull if((t = _strfindattr(a, "tag")) == nil){
101 6e527fbc 2005-02-13 devnull werrstr("no tag");
102 6e527fbc 2005-02-13 devnull freeattr(a);
103 6e527fbc 2005-02-13 devnull return -1;
105 6e527fbc 2005-02-13 devnull tag = strtoul(t, 0, 0);
106 6e527fbc 2005-02-13 devnull for(c=conv; c; c=c->next)
107 6e527fbc 2005-02-13 devnull if(c->tag == tag){
108 6e527fbc 2005-02-13 devnull nbsendul(c->keywait, 0);
111 6e527fbc 2005-02-13 devnull if(c == nil){
112 6e527fbc 2005-02-13 devnull werrstr("tag not found");
113 6e527fbc 2005-02-13 devnull freeattr(a);
114 6e527fbc 2005-02-13 devnull return -1;
116 6e527fbc 2005-02-13 devnull freeattr(a);
117 6e527fbc 2005-02-13 devnull return 0;
121 6e527fbc 2005-02-13 devnull needkey(Conv *c, Attr *a)
123 6e527fbc 2005-02-13 devnull if(c == nil || *needkeyinuse == 0)
124 6e527fbc 2005-02-13 devnull return -1;
126 6e527fbc 2005-02-13 devnull lbappend(&needkeybuf, "needkey tag=%lud %A", c->tag, a);
127 6e527fbc 2005-02-13 devnull return nbrecvul(c->keywait);
131 6e527fbc 2005-02-13 devnull badkey(Conv *c, Key *k, char *msg, Attr *a)
133 6e527fbc 2005-02-13 devnull if(c == nil || *needkeyinuse == 0)
134 6e527fbc 2005-02-13 devnull return -1;
136 6e527fbc 2005-02-13 devnull lbappend(&needkeybuf, "badkey tag=%lud %A %N\n%s\n%A",
137 6e527fbc 2005-02-13 devnull c->tag, k->attr, k->privattr, msg, a);
138 6e527fbc 2005-02-13 devnull return nbrecvul(c->keywait);