dat.h (6304B)
1 enum 2 { 3 MaxRpc = 2048, /* max size of any protocol message */ 4 5 /* keep in sync with rpc.c:/rpcname */ 6 RpcUnknown = 0, /* Rpc.op */ 7 RpcAuthinfo, 8 RpcAttr, 9 RpcRead, 10 RpcStart, 11 RpcWrite, 12 RpcReadHex, 13 RpcWriteHex, 14 15 /* thread stack size - big buffers for printing */ 16 STACK = 65536 17 }; 18 19 typedef struct Conv Conv; 20 typedef struct Key Key; 21 typedef struct Logbuf Logbuf; 22 typedef struct Proto Proto; 23 typedef struct Ring Ring; 24 typedef struct Role Role; 25 typedef struct Rpc Rpc; 26 27 struct Rpc 28 { 29 int op; 30 void *data; 31 int count; 32 int hex; /* should result of read be turned into hex? */ 33 }; 34 35 struct Conv 36 { 37 int ref; /* ref count */ 38 int hangup; /* flag: please hang up */ 39 int active; /* flag: there is an active thread */ 40 int done; /* flag: conversation finished successfully */ 41 ulong tag; /* identifying tag */ 42 Conv *next; /* in linked list */ 43 char *sysuser; /* system name for user speaking to us */ 44 char *state; /* for debugging */ 45 char statebuf[128]; /* for formatted states */ 46 char err[ERRMAX]; /* last error */ 47 48 Attr *attr; /* current attributes */ 49 Proto *proto; /* protocol */ 50 51 Channel *rpcwait; /* wait here for an rpc */ 52 Rpc rpc; /* current rpc. op==RpcUnknown means none */ 53 char rpcbuf[MaxRpc]; /* buffer for rpc */ 54 char reply[MaxRpc]; /* buffer for response */ 55 int nreply; /* count of response */ 56 void (*kickreply)(Conv*); /* call to send response */ 57 Req *req; /* 9P call to read response */ 58 59 Channel *keywait; /* wait here for key confirmation */ 60 61 }; 62 63 struct Key 64 { 65 int ref; /* ref count */ 66 ulong tag; /* identifying tag: sequence number */ 67 Attr *attr; /* public attributes */ 68 Attr *privattr; /* private attributes, like !password */ 69 Proto *proto; /* protocol owner of key */ 70 void *priv; /* protocol-specific storage */ 71 }; 72 73 struct Logbuf 74 { 75 Req *wait; 76 Req **waitlast; 77 int rp; 78 int wp; 79 char *msg[128]; 80 }; 81 82 struct Ring 83 { 84 Key **key; 85 int nkey; 86 }; 87 88 struct Proto 89 { 90 char *name; /* name of protocol */ 91 Role *roles; /* list of roles and service functions */ 92 char *keyprompt; /* required attributes for key proto=name */ 93 int (*checkkey)(Key*); /* initialize k->priv or reject key */ 94 void (*closekey)(Key*); /* free k->priv */ 95 }; 96 97 struct Role 98 { 99 char *name; /* name of role */ 100 int (*fn)(Conv*); /* service function */ 101 }; 102 103 extern char *authaddr; /* plan9.c */ 104 extern int *confirminuse; /* fs.c */ 105 extern Conv* conv; /* conv.c */ 106 extern int debug; /* main.c */ 107 extern char *factname; /* main.c */ 108 extern Srv fs; /* fs.c */ 109 extern int *needkeyinuse; /* fs.c */ 110 extern char *owner; /* main.c */ 111 extern Proto *prototab[]; /* main.c */ 112 extern Ring ring; /* key.c */ 113 extern char *rpcname[]; /* rpc.c */ 114 extern int *loginuse; /* fs.c */ 115 116 extern char Easproto[]; /* err.c */ 117 118 void fsinit0(void); 119 120 /* provided by lib9p */ 121 #define emalloc emalloc9p 122 #define erealloc erealloc9p 123 #define estrdup estrdup9p 124 125 /* hidden in libauth */ 126 #define attrfmt _attrfmt 127 #define copyattr _copyattr 128 #define delattr _delattr 129 #define findattr _findattr 130 #define freeattr _freeattr 131 #define mkattr _mkattr 132 #define parseattr _parseattr 133 #define strfindattr _strfindattr 134 135 extern Attr* addattr(Attr*, char*, ...); 136 /* #pragma varargck argpos addattr 2 */ 137 extern Attr* addattrs(Attr*, Attr*); 138 extern Attr* sortattr(Attr*); 139 extern int attrnamefmt(Fmt*); 140 /* #pragma varargck type "N" Attr* */ 141 extern int matchattr(Attr*, Attr*, Attr*); 142 extern Attr* parseattrfmt(char*, ...); 143 /* #pragma varargck argpos parseattrfmt 1 */ 144 extern Attr* parseattrfmtv(char*, va_list); 145 146 extern void confirmflush(Req*); 147 extern void confirmread(Req*); 148 extern int confirmwrite(char*); 149 extern int needkey(Conv*, Attr*); 150 extern int badkey(Conv*, Key*, char*, Attr*); 151 extern int confirmkey(Conv*, Key*); 152 153 extern Conv* convalloc(char*); 154 extern void convclose(Conv*); 155 extern void convhangup(Conv*); 156 extern int convneedkey(Conv*, Attr*); 157 extern int convbadkey(Conv*, Key*, char*, Attr*); 158 extern int convread(Conv*, void*, int); 159 extern int convreadm(Conv*, char**); 160 extern int convprint(Conv*, char*, ...); 161 /* #pragma varargck argpos convprint 2 */ 162 extern int convreadfn(Conv*, int(*)(void*, int), char**); 163 extern void convreset(Conv*); 164 extern int convwrite(Conv*, void*, int); 165 166 extern int ctlwrite(char*); 167 168 extern char* estrappend(char*, char*, ...); 169 /* #pragma varargck argpos estrappend 2 */ 170 extern int hexparse(char*, uchar*, int); 171 172 extern void keyadd(Key*); 173 extern Key* keylookup(char*, ...); 174 extern Key* keyiterate(int, char*, ...); 175 /* #pragma varargck argpos keylookup 1 */ 176 extern Key* keyfetch(Conv*, char*, ...); 177 /* #pragma varargck argpos keyfetch 2 */ 178 extern void keyclose(Key*); 179 extern void keyevict(Conv*, Key*, char*, ...); 180 /* #pragma varargck argpos keyevict 3 */ 181 extern Key* keyreplace(Conv*, Key*, char*, ...); 182 /* #pragma varargck argpos keyreplace 3 */ 183 184 extern void lbkick(Logbuf*); 185 extern void lbappend(Logbuf*, char*, ...); 186 extern void lbvappend(Logbuf*, char*, va_list); 187 /* #pragma varargck argpos lbappend 2 */ 188 extern void lbread(Logbuf*, Req*); 189 extern void lbflush(Logbuf*, Req*); 190 extern void flog(char*, ...); 191 /* #pragma varargck argpos flog 1 */ 192 193 extern void logflush(Req*); 194 extern void logread(Req*); 195 extern void logwrite(Req*); 196 197 extern void needkeyread(Req*); 198 extern void needkeyflush(Req*); 199 extern int needkeywrite(char*); 200 extern int needkeyqueue(void); 201 202 extern Attr* addcap(Attr*, char*, Ticket*); 203 extern Key* plan9authkey(Attr*); 204 extern int _authdial(char*, char*); 205 206 extern int memrandom(void*, int); 207 208 extern Proto* protolookup(char*); 209 210 extern int rpcwrite(Conv*, void*, int); 211 extern void rpcrespond(Conv*, char*, ...); 212 /* #pragma varargck argpos rpcrespond 2 */ 213 extern void rpcrespondn(Conv*, char*, void*, int); 214 extern void rpcexec(Conv*); 215 216 extern int xioauthdial(char*, char*); 217 extern void xioclose(int); 218 extern int xiodial(char*, char*, char*, int*); 219 extern int xiowrite(int, void*, int); 220 extern int xioasrdresp(int, void*, int); 221 extern int xioasgetticket(int, char*, char*); 222 223 /* pkcs1.c - maybe should be in libsec */ 224 typedef DigestState *DigestAlg(uchar*, ulong, uchar*, DigestState*); 225 int rsasign(RSApriv*, DigestAlg*, uchar*, uint, uchar*, uint); 226 int rsaverify(RSApub*, DigestAlg*, uchar*, uint, uchar*, uint); 227 void mptoberjust(mpint*, uchar*, uint); 228 229 230 extern int extrafactotumdir; 231 232 int havesecstore(void); 233 int secstorefetch(void);