plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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);