xref: /plan9/sys/include/auth.h (revision 742e209d3b5effa4477ed518e2d7b5b9bf3973e5)
19a747e4fSDavid du Colombier #pragma	src	"/sys/src/libauth"
23e12c5d1SDavid du Colombier #pragma	lib	"libauth.a"
33e12c5d1SDavid du Colombier 
49a747e4fSDavid du Colombier /*
59a747e4fSDavid du Colombier  * Interface for typical callers.
69a747e4fSDavid du Colombier  */
79a747e4fSDavid du Colombier 
89a747e4fSDavid du Colombier typedef struct	AuthInfo	AuthInfo;
9219b2ee8SDavid du Colombier typedef struct	Chalstate	Chalstate;
107dd7cddfSDavid du Colombier typedef struct	Chapreply	Chapreply;
117dd7cddfSDavid du Colombier typedef struct	MSchapreply	MSchapreply;
129a747e4fSDavid du Colombier typedef struct	UserPasswd	UserPasswd;
139a747e4fSDavid du Colombier typedef struct	AuthRpc		AuthRpc;
143e12c5d1SDavid du Colombier 
15219b2ee8SDavid du Colombier enum
16219b2ee8SDavid du Colombier {
179a747e4fSDavid du Colombier 	MAXCHLEN=	256,		/* max challenge length	*/
189a747e4fSDavid du Colombier 	MAXNAMELEN=	256,		/* maximum name length */
197dd7cddfSDavid du Colombier 	MD5LEN=		16,
203e12c5d1SDavid du Colombier 
219a747e4fSDavid du Colombier 	ARok = 0,			/* rpc return values */
229a747e4fSDavid du Colombier 	ARdone,
239a747e4fSDavid du Colombier 	ARerror,
249a747e4fSDavid du Colombier 	ARneedkey,
259a747e4fSDavid du Colombier 	ARbadkey,
269a747e4fSDavid du Colombier 	ARwritenext,
279a747e4fSDavid du Colombier 	ARtoosmall,
289a747e4fSDavid du Colombier 	ARtoobig,
299a747e4fSDavid du Colombier 	ARrpcfailure,
309a747e4fSDavid du Colombier 	ARphase,
319a747e4fSDavid du Colombier 
329a747e4fSDavid du Colombier 	AuthRpcMax = 4096,
333e12c5d1SDavid du Colombier };
343e12c5d1SDavid du Colombier 
359a747e4fSDavid du Colombier struct AuthRpc
36219b2ee8SDavid du Colombier {
379a747e4fSDavid du Colombier 	int afd;
38*742e209dSDavid du Colombier 	char ibuf[AuthRpcMax+1];	/* +1 for NUL in auth_rpc.c */
399a747e4fSDavid du Colombier 	char obuf[AuthRpcMax];
409a747e4fSDavid du Colombier 	char *arg;
419a747e4fSDavid du Colombier 	uint narg;
42219b2ee8SDavid du Colombier };
43219b2ee8SDavid du Colombier 
449a747e4fSDavid du Colombier struct AuthInfo
45219b2ee8SDavid du Colombier {
469a747e4fSDavid du Colombier 	char	*cuid;		/* caller id */
479a747e4fSDavid du Colombier 	char	*suid;		/* server id */
489a747e4fSDavid du Colombier 	char	*cap;		/* capability (only valid on server side) */
499a747e4fSDavid du Colombier 	int	nsecret;	/* length of secret */
509a747e4fSDavid du Colombier 	uchar	*secret;	/* secret */
513e12c5d1SDavid du Colombier };
523e12c5d1SDavid du Colombier 
53219b2ee8SDavid du Colombier struct Chalstate
54219b2ee8SDavid du Colombier {
559a747e4fSDavid du Colombier 	char	*user;
569a747e4fSDavid du Colombier 	char	chal[MAXCHLEN];
579a747e4fSDavid du Colombier 	int	nchal;
589a747e4fSDavid du Colombier 	void	*resp;
599a747e4fSDavid du Colombier 	int	nresp;
609a747e4fSDavid du Colombier 
619a747e4fSDavid du Colombier /* for implementation only */
629a747e4fSDavid du Colombier 	int	afd;			/* to factotum */
639a747e4fSDavid du Colombier 	AuthRpc	*rpc;			/* to factotum */
649a747e4fSDavid du Colombier 	char	userbuf[MAXNAMELEN];	/* temp space if needed */
659a747e4fSDavid du Colombier 	int	userinchal;		/* user was sent to obtain challenge */
66219b2ee8SDavid du Colombier };
67219b2ee8SDavid du Colombier 
689a747e4fSDavid du Colombier struct	Chapreply		/* for protocol "chap" */
697dd7cddfSDavid du Colombier {
707dd7cddfSDavid du Colombier 	uchar	id;
717dd7cddfSDavid du Colombier 	char	resp[MD5LEN];
727dd7cddfSDavid du Colombier };
737dd7cddfSDavid du Colombier 
749a747e4fSDavid du Colombier struct	MSchapreply	/* for protocol "mschap" */
757dd7cddfSDavid du Colombier {
767dd7cddfSDavid du Colombier 	char	LMresp[24];		/* Lan Manager response */
777dd7cddfSDavid du Colombier 	char	NTresp[24];		/* NT response */
787dd7cddfSDavid du Colombier };
797dd7cddfSDavid du Colombier 
809a747e4fSDavid du Colombier struct	UserPasswd
8159cc4ca5SDavid du Colombier {
829a747e4fSDavid du Colombier 	char	*user;
839a747e4fSDavid du Colombier 	char	*passwd;
8459cc4ca5SDavid du Colombier };
8559cc4ca5SDavid du Colombier 
86219b2ee8SDavid du Colombier extern	int	newns(char*, char*);
877dd7cddfSDavid du Colombier extern	int	addns(char*, char*);
887dd7cddfSDavid du Colombier 
899a747e4fSDavid du Colombier extern	int	noworld(char*);
909a747e4fSDavid du Colombier extern	int	amount(int, char*, int, char*);
919a747e4fSDavid du Colombier 
929a747e4fSDavid du Colombier /* these two may get generalized away -rsc */
939a747e4fSDavid du Colombier extern	int	login(char*, char*, char*);
949a747e4fSDavid du Colombier extern	int	httpauth(char*, char*);
959a747e4fSDavid du Colombier 
969a747e4fSDavid du Colombier typedef struct Attr Attr;
979a747e4fSDavid du Colombier enum {
989a747e4fSDavid du Colombier 	AttrNameval,		/* name=val -- when matching, must have name=val */
999a747e4fSDavid du Colombier 	AttrQuery,		/* name? -- when matching, must be present */
1009a747e4fSDavid du Colombier 	AttrDefault,		/* name:=val -- when matching, if present must match INTERNAL */
1019a747e4fSDavid du Colombier };
1029a747e4fSDavid du Colombier struct Attr
1039a747e4fSDavid du Colombier {
1049a747e4fSDavid du Colombier 	int type;
1059a747e4fSDavid du Colombier 	Attr *next;
1062ebbfa15SDavid du Colombier 	char *name;
1072ebbfa15SDavid du Colombier 	char *val;
1089a747e4fSDavid du Colombier };
1099a747e4fSDavid du Colombier 
1109a747e4fSDavid du Colombier typedef int AuthGetkey(char*);
1119a747e4fSDavid du Colombier 
1129a747e4fSDavid du Colombier int	_attrfmt(Fmt*);
1139a747e4fSDavid du Colombier Attr	*_copyattr(Attr*);
1149a747e4fSDavid du Colombier Attr	*_delattr(Attr*, char*);
1159a747e4fSDavid du Colombier Attr	*_findattr(Attr*, char*);
1169a747e4fSDavid du Colombier void	_freeattr(Attr*);
1179a747e4fSDavid du Colombier Attr	*_mkattr(int, char*, char*, Attr*);
1189a747e4fSDavid du Colombier Attr	*_parseattr(char*);
1192ebbfa15SDavid du Colombier char	*_strfindattr(Attr*, char*);
1209a747e4fSDavid du Colombier #pragma varargck type "A" Attr*
1219a747e4fSDavid du Colombier 
1229a747e4fSDavid du Colombier extern AuthInfo*	fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params);
1239a747e4fSDavid du Colombier extern AuthInfo*	auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...);
1249a747e4fSDavid du Colombier extern int		auth_getkey(char*);
1259a747e4fSDavid du Colombier extern int		(*amount_getkey)(char*);
1269a747e4fSDavid du Colombier extern void		auth_freeAI(AuthInfo *ai);
1279a747e4fSDavid du Colombier extern int		auth_chuid(AuthInfo *ai, char *ns);
1289a747e4fSDavid du Colombier extern Chalstate	*auth_challenge(char*, ...);
1299a747e4fSDavid du Colombier extern AuthInfo*	auth_response(Chalstate*);
1309a747e4fSDavid du Colombier extern int		auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...);
1319a747e4fSDavid du Colombier extern void		auth_freechal(Chalstate*);
1329a747e4fSDavid du Colombier extern AuthInfo*	auth_userpasswd(char *user, char *passwd);
1339a747e4fSDavid du Colombier extern UserPasswd*	auth_getuserpasswd(AuthGetkey *getkey, char*, ...);
1349a747e4fSDavid du Colombier extern AuthInfo*	auth_getinfo(AuthRpc *rpc);
1359a747e4fSDavid du Colombier extern AuthRpc*		auth_allocrpc(int afd);
1369a747e4fSDavid du Colombier extern Attr*		auth_attr(AuthRpc *rpc);
1379a747e4fSDavid du Colombier extern void		auth_freerpc(AuthRpc *rpc);
1389a747e4fSDavid du Colombier extern uint		auth_rpc(AuthRpc *rpc, char *verb, void *a, int n);
139fb7f0c93SDavid du Colombier extern int		auth_wep(char*, char*, ...);
1409a747e4fSDavid du Colombier #pragma varargck argpos auth_proxy 3
1419a747e4fSDavid du Colombier #pragma varargck argpos auth_challenge 1
1428014c1eeSDavid du Colombier #pragma varargck argpos auth_respond 8
1439a747e4fSDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2
144