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