|  | #ifndef __AUTH_H__ | 
|  | #define __AUTH_H__ 1 | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  | /* | 
|  | #pragma	src	"/sys/src/libauth" | 
|  | #pragma	lib	"libauth.a" | 
|  | */ | 
|  | AUTOLIB(auth) | 
|  |  | 
|  | /* | 
|  | * Interface for typical callers. | 
|  | */ | 
|  |  | 
|  | typedef struct	AuthInfo	AuthInfo; | 
|  | typedef struct	Chalstate	Chalstate; | 
|  | typedef struct	Chapreply	Chapreply; | 
|  | typedef struct	MSchapreply	MSchapreply; | 
|  | typedef struct	UserPasswd	UserPasswd; | 
|  | typedef struct	AuthRpc		AuthRpc; | 
|  |  | 
|  | struct CFid; | 
|  |  | 
|  | enum | 
|  | { | 
|  | MAXCHLEN=	256,		/* max challenge length	*/ | 
|  | MAXNAMELEN=	256,		/* maximum name length */ | 
|  | MD5LEN=		16, | 
|  |  | 
|  | ARok = 0,			/* rpc return values */ | 
|  | ARdone, | 
|  | ARerror, | 
|  | ARneedkey, | 
|  | ARbadkey, | 
|  | ARwritenext, | 
|  | ARtoosmall, | 
|  | ARtoobig, | 
|  | ARrpcfailure, | 
|  | ARphase, | 
|  |  | 
|  | AuthRpcMax = 4096 | 
|  | }; | 
|  |  | 
|  | struct AuthRpc | 
|  | { | 
|  | int afd; | 
|  | struct CFid *afid; | 
|  | char ibuf[AuthRpcMax]; | 
|  | char obuf[AuthRpcMax]; | 
|  | char *arg; | 
|  | uint narg; | 
|  | }; | 
|  |  | 
|  | struct AuthInfo | 
|  | { | 
|  | char	*cuid;		/* caller id */ | 
|  | char	*suid;		/* server id */ | 
|  | char	*cap;		/* capability (only valid on server side) */ | 
|  | int	nsecret;	/* length of secret */ | 
|  | uchar	*secret;	/* secret */ | 
|  | }; | 
|  |  | 
|  | struct Chalstate | 
|  | { | 
|  | char	*user; | 
|  | char	chal[MAXCHLEN]; | 
|  | int	nchal; | 
|  | void	*resp; | 
|  | int	nresp; | 
|  |  | 
|  | /* for implementation only */ | 
|  | AuthRpc	*rpc;			/* to factotum */ | 
|  | char	userbuf[MAXNAMELEN];	/* temp space if needed */ | 
|  | int	userinchal;		/* user was sent to obtain challenge */ | 
|  | }; | 
|  |  | 
|  | struct	Chapreply		/* for protocol "chap" */ | 
|  | { | 
|  | uchar	id; | 
|  | char	resp[MD5LEN]; | 
|  | }; | 
|  |  | 
|  | struct	MSchapreply	/* for protocol "mschap" */ | 
|  | { | 
|  | char	LMresp[24];		/* Lan Manager response */ | 
|  | char	NTresp[24];		/* NT response */ | 
|  | }; | 
|  |  | 
|  | struct	UserPasswd | 
|  | { | 
|  | char	*user; | 
|  | char	*passwd; | 
|  | }; | 
|  |  | 
|  | extern	int	newns(char*, char*); | 
|  | extern	int	addns(char*, char*); | 
|  |  | 
|  | extern	int	noworld(char*); | 
|  | extern	int	amount(int, char*, int, char*); | 
|  |  | 
|  | /* these two may get generalized away -rsc */ | 
|  | extern	int	login(char*, char*, char*); | 
|  | extern	int	httpauth(char*, char*); | 
|  |  | 
|  | typedef struct Attr Attr; | 
|  | enum { | 
|  | AttrNameval,		/* name=val -- when matching, must have name=val */ | 
|  | AttrQuery,		/* name? -- when matching, must be present */ | 
|  | AttrDefault		/* name:=val -- when matching, if present must match INTERNAL */ | 
|  | }; | 
|  | struct Attr | 
|  | { | 
|  | int type; | 
|  | Attr *next; | 
|  | char *name; | 
|  | char *val; | 
|  | }; | 
|  |  | 
|  | typedef int AuthGetkey(char*); | 
|  |  | 
|  | int	_attrfmt(Fmt*); | 
|  | Attr	*_copyattr(Attr*); | 
|  | Attr	*_delattr(Attr*, char*); | 
|  | Attr	*_findattr(Attr*, char*); | 
|  | void	_freeattr(Attr*); | 
|  | Attr	*_mkattr(int, char*, char*, Attr*); | 
|  | Attr	*_parseattr(char*); | 
|  | char	*_strfindattr(Attr*, char*); | 
|  | /* | 
|  | #pragma varargck type "A" Attr* | 
|  | */ | 
|  |  | 
|  | extern AuthInfo*	fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params); | 
|  | extern AuthInfo*	auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...); | 
|  | extern AuthInfo*	fsfauth_proxy(struct CFid*, AuthRpc *rpc, AuthGetkey *getkey, char *params); | 
|  | extern AuthInfo*	fsauth_proxy(struct CFid*, AuthGetkey *getkey, char *fmt, ...); | 
|  | extern int		auth_getkey(char*); | 
|  | extern int		(*amount_getkey)(char*); | 
|  | extern void		auth_freeAI(AuthInfo *ai); | 
|  | extern int		auth_chuid(AuthInfo *ai, char *ns); | 
|  | extern Chalstate	*auth_challenge(char*, ...); | 
|  | extern AuthInfo*	auth_response(Chalstate*); | 
|  | extern int		auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...); | 
|  | extern void		auth_freechal(Chalstate*); | 
|  | extern AuthInfo*	auth_userpasswd(char *user, char *passwd); | 
|  | extern UserPasswd*	auth_getuserpasswd(AuthGetkey *getkey, char*, ...); | 
|  | extern AuthInfo*	auth_getinfo(AuthRpc *rpc); | 
|  | extern AuthRpc*		auth_allocrpc(void); | 
|  | extern Attr*		auth_attr(AuthRpc *rpc); | 
|  | extern void		auth_freerpc(AuthRpc *rpc); | 
|  | extern uint		auth_rpc(AuthRpc *rpc, char *verb, void *a, int n); | 
|  | extern int		auth_wep(char*, char*, ...); | 
|  |  | 
|  | extern struct CFsys*	fsamount(int fd, char *aname); | 
|  | extern struct CFsys* nsamount(char *name, char *aname); | 
|  |  | 
|  |  | 
|  | /* | 
|  | #pragma varargck argpos auth_proxy 3 | 
|  | #pragma varargck argpos auth_challenge 1 | 
|  | #pragma varargck argpos auth_respond 3 | 
|  | #pragma varargck argpos auth_getuserpasswd 2 | 
|  | */ | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  | #endif |