xref: /plan9-contrib/sys/include/auth.h (revision 2ebbfa15057a80d5ffc355d10c2a61bb0ac12c16)
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;
389a747e4fSDavid du Colombier 	char ibuf[AuthRpcMax];
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 typedef struct String String;
989a747e4fSDavid du Colombier enum {
999a747e4fSDavid du Colombier 	AttrNameval,		/* name=val -- when matching, must have name=val */
1009a747e4fSDavid du Colombier 	AttrQuery,		/* name? -- when matching, must be present */
1019a747e4fSDavid du Colombier 	AttrDefault,		/* name:=val -- when matching, if present must match INTERNAL */
1029a747e4fSDavid du Colombier };
1039a747e4fSDavid du Colombier struct Attr
1049a747e4fSDavid du Colombier {
1059a747e4fSDavid du Colombier 	int type;
1069a747e4fSDavid du Colombier 	Attr *next;
107*2ebbfa15SDavid du Colombier 	char *name;
108*2ebbfa15SDavid du Colombier 	char *val;
1099a747e4fSDavid du Colombier };
1109a747e4fSDavid du Colombier 
1119a747e4fSDavid du Colombier typedef int AuthGetkey(char*);
1129a747e4fSDavid du Colombier 
1139a747e4fSDavid du Colombier int	_attrfmt(Fmt*);
1149a747e4fSDavid du Colombier Attr	*_copyattr(Attr*);
1159a747e4fSDavid du Colombier Attr	*_delattr(Attr*, char*);
1169a747e4fSDavid du Colombier Attr	*_findattr(Attr*, char*);
1179a747e4fSDavid du Colombier void	_freeattr(Attr*);
1189a747e4fSDavid du Colombier Attr	*_mkattr(int, char*, char*, Attr*);
1199a747e4fSDavid du Colombier Attr	*_parseattr(char*);
120*2ebbfa15SDavid du Colombier char	*_strfindattr(Attr*, char*);
1219a747e4fSDavid du Colombier #pragma varargck type "A" Attr*
1229a747e4fSDavid du Colombier 
1239a747e4fSDavid du Colombier extern AuthInfo*	fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params);
1249a747e4fSDavid du Colombier extern AuthInfo*	auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...);
1259a747e4fSDavid du Colombier extern int		auth_getkey(char*);
1269a747e4fSDavid du Colombier extern int		(*amount_getkey)(char*);
1279a747e4fSDavid du Colombier extern void		auth_freeAI(AuthInfo *ai);
1289a747e4fSDavid du Colombier extern int		auth_chuid(AuthInfo *ai, char *ns);
1299a747e4fSDavid du Colombier extern Chalstate	*auth_challenge(char*, ...);
1309a747e4fSDavid du Colombier extern AuthInfo*	auth_response(Chalstate*);
1319a747e4fSDavid du Colombier extern int		auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...);
1329a747e4fSDavid du Colombier extern void		auth_freechal(Chalstate*);
1339a747e4fSDavid du Colombier extern AuthInfo*	auth_userpasswd(char *user, char *passwd);
1349a747e4fSDavid du Colombier extern UserPasswd*	auth_getuserpasswd(AuthGetkey *getkey, char*, ...);
1359a747e4fSDavid du Colombier extern AuthInfo*	auth_getinfo(AuthRpc *rpc);
1369a747e4fSDavid du Colombier extern AuthRpc*		auth_allocrpc(int afd);
1379a747e4fSDavid du Colombier extern Attr*		auth_attr(AuthRpc *rpc);
1389a747e4fSDavid du Colombier extern void		auth_freerpc(AuthRpc *rpc);
1399a747e4fSDavid du Colombier extern uint		auth_rpc(AuthRpc *rpc, char *verb, void *a, int n);
1409a747e4fSDavid du Colombier #pragma varargck argpos auth_proxy 3
1419a747e4fSDavid du Colombier #pragma varargck argpos auth_challenge 1
1429a747e4fSDavid du Colombier #pragma varargck argpos auth_respond 3
1439a747e4fSDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2
144