xref: /plan9-contrib/sys/src/cmd/unix/drawterm/include/auth.h (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #ifdef PLAN9
2*8ccd4a63SDavid du Colombier #pragma	src	"/sys/src/libauth"
3*8ccd4a63SDavid du Colombier #pragma	lib	"libauth.a"
4*8ccd4a63SDavid du Colombier #endif
5*8ccd4a63SDavid du Colombier 
6*8ccd4a63SDavid du Colombier /*
7*8ccd4a63SDavid du Colombier  * Interface for typical callers.
8*8ccd4a63SDavid du Colombier  */
9*8ccd4a63SDavid du Colombier 
10*8ccd4a63SDavid du Colombier typedef struct	AuthInfo	AuthInfo;
11*8ccd4a63SDavid du Colombier typedef struct	Chalstate	Chalstate;
12*8ccd4a63SDavid du Colombier typedef struct	Chapreply	Chapreply;
13*8ccd4a63SDavid du Colombier typedef struct	MSchapreply	MSchapreply;
14*8ccd4a63SDavid du Colombier typedef struct	UserPasswd	UserPasswd;
15*8ccd4a63SDavid du Colombier typedef struct	AuthRpc		AuthRpc;
16*8ccd4a63SDavid du Colombier 
17*8ccd4a63SDavid du Colombier enum
18*8ccd4a63SDavid du Colombier {
19*8ccd4a63SDavid du Colombier 	MAXCHLEN=	256,		/* max challenge length	*/
20*8ccd4a63SDavid du Colombier 	MAXNAMELEN=	256,		/* maximum name length */
21*8ccd4a63SDavid du Colombier 	MD5LEN=		16,
22*8ccd4a63SDavid du Colombier 
23*8ccd4a63SDavid du Colombier 	ARok = 0,			/* rpc return values */
24*8ccd4a63SDavid du Colombier 	ARdone,
25*8ccd4a63SDavid du Colombier 	ARerror,
26*8ccd4a63SDavid du Colombier 	ARneedkey,
27*8ccd4a63SDavid du Colombier 	ARbadkey,
28*8ccd4a63SDavid du Colombier 	ARwritenext,
29*8ccd4a63SDavid du Colombier 	ARtoosmall,
30*8ccd4a63SDavid du Colombier 	ARtoobig,
31*8ccd4a63SDavid du Colombier 	ARrpcfailure,
32*8ccd4a63SDavid du Colombier 	ARphase,
33*8ccd4a63SDavid du Colombier 
34*8ccd4a63SDavid du Colombier 	AuthRpcMax = 4096,
35*8ccd4a63SDavid du Colombier };
36*8ccd4a63SDavid du Colombier 
37*8ccd4a63SDavid du Colombier struct AuthRpc
38*8ccd4a63SDavid du Colombier {
39*8ccd4a63SDavid du Colombier 	int afd;
40*8ccd4a63SDavid du Colombier 	char ibuf[AuthRpcMax];
41*8ccd4a63SDavid du Colombier 	char obuf[AuthRpcMax];
42*8ccd4a63SDavid du Colombier 	char *arg;
43*8ccd4a63SDavid du Colombier 	uint narg;
44*8ccd4a63SDavid du Colombier };
45*8ccd4a63SDavid du Colombier 
46*8ccd4a63SDavid du Colombier struct AuthInfo
47*8ccd4a63SDavid du Colombier {
48*8ccd4a63SDavid du Colombier 	char	*cuid;		/* caller id */
49*8ccd4a63SDavid du Colombier 	char	*suid;		/* server id */
50*8ccd4a63SDavid du Colombier 	char	*cap;		/* capability (only valid on server side) */
51*8ccd4a63SDavid du Colombier 	int	nsecret;	/* length of secret */
52*8ccd4a63SDavid du Colombier 	uchar	*secret;	/* secret */
53*8ccd4a63SDavid du Colombier };
54*8ccd4a63SDavid du Colombier 
55*8ccd4a63SDavid du Colombier struct Chalstate
56*8ccd4a63SDavid du Colombier {
57*8ccd4a63SDavid du Colombier 	char	*user;
58*8ccd4a63SDavid du Colombier 	char	chal[MAXCHLEN];
59*8ccd4a63SDavid du Colombier 	int	nchal;
60*8ccd4a63SDavid du Colombier 	void	*resp;
61*8ccd4a63SDavid du Colombier 	int	nresp;
62*8ccd4a63SDavid du Colombier 
63*8ccd4a63SDavid du Colombier /* for implementation only */
64*8ccd4a63SDavid du Colombier 	int	afd;			/* to factotum */
65*8ccd4a63SDavid du Colombier 	AuthRpc	*rpc;			/* to factotum */
66*8ccd4a63SDavid du Colombier 	char	userbuf[MAXNAMELEN];	/* temp space if needed */
67*8ccd4a63SDavid du Colombier 	int	userinchal;		/* user was sent to obtain challenge */
68*8ccd4a63SDavid du Colombier };
69*8ccd4a63SDavid du Colombier 
70*8ccd4a63SDavid du Colombier struct	Chapreply		/* for protocol "chap" */
71*8ccd4a63SDavid du Colombier {
72*8ccd4a63SDavid du Colombier 	uchar	id;
73*8ccd4a63SDavid du Colombier 	char	resp[MD5LEN];
74*8ccd4a63SDavid du Colombier };
75*8ccd4a63SDavid du Colombier 
76*8ccd4a63SDavid du Colombier struct	MSchapreply	/* for protocol "mschap" */
77*8ccd4a63SDavid du Colombier {
78*8ccd4a63SDavid du Colombier 	char	LMresp[24];		/* Lan Manager response */
79*8ccd4a63SDavid du Colombier 	char	NTresp[24];		/* NT response */
80*8ccd4a63SDavid du Colombier };
81*8ccd4a63SDavid du Colombier 
82*8ccd4a63SDavid du Colombier struct	UserPasswd
83*8ccd4a63SDavid du Colombier {
84*8ccd4a63SDavid du Colombier 	char	*user;
85*8ccd4a63SDavid du Colombier 	char	*passwd;
86*8ccd4a63SDavid du Colombier };
87*8ccd4a63SDavid du Colombier 
88*8ccd4a63SDavid du Colombier extern	int	newns(char*, char*);
89*8ccd4a63SDavid du Colombier extern	int	addns(char*, char*);
90*8ccd4a63SDavid du Colombier 
91*8ccd4a63SDavid du Colombier extern	int	noworld(char*);
92*8ccd4a63SDavid du Colombier extern	int	amount(int, char*, int, char*);
93*8ccd4a63SDavid du Colombier 
94*8ccd4a63SDavid du Colombier /* these two may get generalized away -rsc */
95*8ccd4a63SDavid du Colombier extern	int	login(char*, char*, char*);
96*8ccd4a63SDavid du Colombier extern	int	httpauth(char*, char*);
97*8ccd4a63SDavid du Colombier 
98*8ccd4a63SDavid du Colombier typedef struct Attr Attr;
99*8ccd4a63SDavid du Colombier typedef struct String String;
100*8ccd4a63SDavid du Colombier enum {
101*8ccd4a63SDavid du Colombier 	AttrNameval,		/* name=val -- when matching, must have name=val */
102*8ccd4a63SDavid du Colombier 	AttrQuery,		/* name? -- when matching, must be present */
103*8ccd4a63SDavid du Colombier 	AttrDefault,		/* name:=val -- when matching, if present must match INTERNAL */
104*8ccd4a63SDavid du Colombier };
105*8ccd4a63SDavid du Colombier struct Attr
106*8ccd4a63SDavid du Colombier {
107*8ccd4a63SDavid du Colombier 	int type;
108*8ccd4a63SDavid du Colombier 	Attr *next;
109*8ccd4a63SDavid du Colombier 	char *name;
110*8ccd4a63SDavid du Colombier 	char *val;
111*8ccd4a63SDavid du Colombier };
112*8ccd4a63SDavid du Colombier 
113*8ccd4a63SDavid du Colombier typedef int AuthGetkey(char*);
114*8ccd4a63SDavid du Colombier 
115*8ccd4a63SDavid du Colombier int	_attrfmt(Fmt*);
116*8ccd4a63SDavid du Colombier Attr	*_copyattr(Attr*);
117*8ccd4a63SDavid du Colombier Attr	*_delattr(Attr*, char*);
118*8ccd4a63SDavid du Colombier Attr	*_findattr(Attr*, char*);
119*8ccd4a63SDavid du Colombier void	_freeattr(Attr*);
120*8ccd4a63SDavid du Colombier Attr	*_mkattr(int, char*, char*, Attr*);
121*8ccd4a63SDavid du Colombier Attr	*_parseattr(char*);
122*8ccd4a63SDavid du Colombier char	*_strfindattr(Attr*, char*);
123*8ccd4a63SDavid du Colombier #ifdef VARARGCK
124*8ccd4a63SDavid du Colombier #pragma varargck type "A" Attr*
125*8ccd4a63SDavid du Colombier #endif
126*8ccd4a63SDavid du Colombier 
127*8ccd4a63SDavid du Colombier extern AuthInfo*	fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params);
128*8ccd4a63SDavid du Colombier extern AuthInfo*	auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...);
129*8ccd4a63SDavid du Colombier extern int		auth_getkey(char*);
130*8ccd4a63SDavid du Colombier extern int		(*amount_getkey)(char*);
131*8ccd4a63SDavid du Colombier extern void		auth_freeAI(AuthInfo *ai);
132*8ccd4a63SDavid du Colombier extern int		auth_chuid(AuthInfo *ai, char *ns);
133*8ccd4a63SDavid du Colombier extern Chalstate	*auth_challenge(char*, ...);
134*8ccd4a63SDavid du Colombier extern AuthInfo*	auth_response(Chalstate*);
135*8ccd4a63SDavid du Colombier extern int		auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...);
136*8ccd4a63SDavid du Colombier extern void		auth_freechal(Chalstate*);
137*8ccd4a63SDavid du Colombier extern AuthInfo*	auth_userpasswd(char *user, char *passwd);
138*8ccd4a63SDavid du Colombier extern UserPasswd*	auth_getuserpasswd(AuthGetkey *getkey, char*, ...);
139*8ccd4a63SDavid du Colombier extern AuthInfo*	auth_getinfo(AuthRpc *rpc);
140*8ccd4a63SDavid du Colombier extern AuthRpc*		auth_allocrpc(int afd);
141*8ccd4a63SDavid du Colombier extern Attr*		auth_attr(AuthRpc *rpc);
142*8ccd4a63SDavid du Colombier extern void		auth_freerpc(AuthRpc *rpc);
143*8ccd4a63SDavid du Colombier extern uint		auth_rpc(AuthRpc *rpc, char *verb, void *a, int n);
144*8ccd4a63SDavid du Colombier extern int		auth_wep(char*, char*, ...);
145*8ccd4a63SDavid du Colombier 
146*8ccd4a63SDavid du Colombier #ifdef VARARGCK
147*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_proxy 3
148*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_challenge 1
149*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_respond 3
150*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2
151*8ccd4a63SDavid du Colombier #endif
152