comerr-behave-like-the-rest-of-the-world-20010918
[openafs.git] / src / kauth / kautils.p.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  * Revision 2.2  1990/09/27  13:51:37
12  * Declare (char *) returning function ka_timestr().
13  * Cleanups.
14  *
15  * Revision 2.1  90/08/07  19:11:51
16  * Start with clean version to sync test and dev trees.
17  * */
18
19 #ifndef __KAUTILS__
20 #define __KAUTILS__
21
22 #if !defined(UKERNEL)
23 #include <des.h>
24 #include <afs/auth.h>
25
26 #ifndef KAMAJORVERSION
27     /* just to be on the safe side, get these two first */
28 #include <sys/types.h>
29 #include <rx/xdr.h>
30
31     /* get installed .h file only if not included already from local dir */
32 #ifndef _RXGEN_KAUTH_
33 #include <afs/kauth.h>
34 #endif
35
36 #endif
37
38 #include <ubik.h>
39 #include <afs/cellconfig.h>
40 #include <afs/afsutil.h>
41
42 #else
43 #include "../afs/ubik.h"
44 #include "../afs/auth.h"
45 #include "../afs/cellconfig.h"
46 #endif /* !defined(UKERNEL) */
47
48
49 #define KA_TIMESTR_LEN 30
50 #define Date afs_uint32
51
52 /*
53  * Public function prototypes
54  */
55
56 extern afs_int32 ka_GetAuthToken (
57   char *name,
58   char *instance,
59   char *cell,
60   struct ktc_encryptionKey *key,
61   afs_int32  lifetime,
62   afs_int32  *pwexpires
63 );
64
65 extern afs_int32 ka_GetServerToken (
66   char *name,
67   char *instance,
68   char *cell,
69   Date  lifetime,
70   struct ktc_token *token,
71   int   newer,
72   int   dosetpag
73 );
74
75 extern afs_int32 ka_GetAdminToken (
76   char *name,
77   char *instance,
78   char *cell,
79   struct ktc_encryptionKey *key,
80   afs_int32  lifetime,
81   struct ktc_token *token,
82   int   newer
83 );
84
85 extern afs_int32 ka_VerifyUserToken(
86   char *name,
87   char *instance,
88   char *cell,
89   struct ktc_encryptionKey *key
90 );
91
92 extern void ka_ExplicitCell (
93   char *cell,
94   afs_int32 serverList[]
95 );
96
97 extern afs_int32 ka_GetServers (
98   char *cell,
99   struct afsconf_cell *cellinfo
100 );
101
102 extern afs_int32 ka_GetSecurity (
103   int   service,
104   struct ktc_token *token,
105   struct rx_securityClass **scP,
106   int  *siP
107 );
108
109 extern afs_int32 ka_SingleServerConn (
110   char *cell,
111   char *server,
112   int   service,
113   struct ktc_token *token,
114   struct ubik_client **conn
115 );
116
117 extern afs_int32 ka_AuthSpecificServersConn (
118   int                  service,
119   struct ktc_token    *token,
120   struct afsconf_cell *cellinfo,
121   struct ubik_client **conn
122 );
123
124 extern afs_int32 ka_AuthServerConn (
125   char                *cell,
126   int                  service,
127   struct ktc_token    *token,
128   struct ubik_client **conn
129 );
130
131 extern afs_int32 ka_Authenticate (
132   char *name,
133   char *instance,
134   char *cell,
135   struct ubik_client *conn,
136   int   service,
137   struct ktc_encryptionKey *key,
138   Date  start,
139   Date end,
140   struct ktc_token *token,
141   afs_int32 *pwexpires
142 );
143
144 extern afs_int32 ka_GetToken (
145   char               *name,
146   char               *instance,
147   char               *cell,
148   char               *cname,
149   char               *cinst,
150   struct ubik_client *conn,
151   Date                start,
152   Date                end,
153   struct ktc_token   *auth_token,
154   char               *auth_domain,
155   struct ktc_token   *token
156 );
157
158 extern afs_int32 ka_ChangePassword (
159   char               *name,
160   char               *instance,
161   struct ubik_client *conn,
162   struct ktc_encryptionKey *oldkey,
163   struct ktc_encryptionKey *newkey
164 );
165
166 extern void ka_StringToKey (
167   char          *str,
168   char          *cell,
169   struct ktc_encryptionKey *key
170 );
171
172 extern afs_int32 ka_ReadPassword (
173   char          *prompt,
174   int            verify,
175   char          *cell,
176   struct ktc_encryptionKey *key
177 );
178
179 extern afs_int32 ka_ParseLoginName (
180   char *login,
181   char  name[MAXKTCNAMELEN],
182   char  inst[MAXKTCNAMELEN],
183   char  cell[MAXKTCREALMLEN]
184 );
185
186 #ifdef _MFC_VER
187 extern "C" {
188 #endif /* _MFC_VER */
189 extern afs_int32 ka_Init(
190   int flags
191 );
192 #ifdef _MFC_VER
193 }
194 #endif /* _MFC_VER */
195
196 extern int ka_CellConfig (
197   const char *dir
198 );
199
200 extern char *ka_LocalCell (
201   void
202 );
203
204 extern int ka_ExpandCell (
205   char *cell,
206   char *fullCell,
207   int  *alocal
208 );
209
210 extern int ka_CellToRealm (
211   char *cell,
212   char *realm,
213   int  *local
214 );
215
216 extern void ka_PrintUserID (
217   char *prefix,
218   char *name,
219   char *instance,
220   char *postfix
221 );
222
223 extern void ka_PrintBytes (
224   char bs[],
225   int  bl
226 );
227
228 extern int ka_ConvertBytes (
229   char *ascii,
230   int   alen,
231   char  bs[],
232   int   bl
233 );
234
235 extern int ka_ReadBytes (
236   char *ascii,
237   char *binary,
238   int   blen
239 );
240
241 extern int umin (
242   afs_uint32 a,
243   afs_uint32 b
244 );
245
246 extern afs_int32 ka_KeyCheckSum (
247   char *key,
248   afs_uint32 *cksumP
249 );
250
251 extern int ka_KeyIsZero(
252   register char *akey,
253   register int alen
254 );
255
256 extern void ka_timestr (
257   afs_int32 time,
258   char *tstr,
259   afs_int32 tlen
260 );
261
262 extern afs_int32 ka_GetAFSTicket (
263   char *name,
264   char *instance,
265   char *realm,
266   Date lifetime,
267   afs_int32 flags
268 );
269
270 extern afs_int32 ka_UserAuthenticateGeneral (
271   afs_int32 flags,
272   char *name,
273   char *instance,
274   char *realm,
275   char *password,
276   Date lifetime,
277   afs_int32 *password_expires,
278   afs_int32 spare2,
279   char **reasonP
280 );
281
282 extern afs_int32 ka_UserAuthenticate (
283   char *name,
284   char *instance,
285   char *realm,
286   char *password,
287   int   doSetPAG,
288   char **reasonP
289 );
290
291 extern afs_int32 ka_UserReadPassword (
292   char *prompt,
293   char *password,
294   int   plen,
295   char **reasonP
296 );
297
298 extern afs_int32 ka_VerifyUserPassword(
299      afs_int32 version,
300      char *name,
301      char *instance,
302      char *realm,
303      char *password,
304      int spare,
305      char **reasonP
306 );
307 #define KA_USERAUTH_VERSION 1
308 #define KA_USERAUTH_VERSION_MASK        0x00ffff
309 #define KA_USERAUTH_DOSETPAG            0x010000
310 #define KA_USERAUTH_DOSETPAG2           0x020000
311 #define KA_USERAUTH_ONLY_VERIFY         0x040000
312 #define KA_USERAUTH_AUTHENT_LOGON       0x100000
313 #define ka_UserAuthenticate(n,i,r,p,d,rP) \
314     ka_UserAuthenticateGeneral \
315         (KA_USERAUTH_VERSION + ((d) ? KA_USERAUTH_DOSETPAG : 0), \
316          n,i,r,p, /*lifetime*/0, /*spare1,2*/0,0, rP)
317 #define ka_UserAuthenticateLife(f,n,i,r,p,l,rP) \
318     ka_UserAuthenticateGeneral \
319         (KA_USERAUTH_VERSION + (f), n,i,r,p,l, /*spare1,2*/0,0, rP)
320
321 extern afs_int32 KAM_CreateUser();
322 extern afs_int32 KAM_DeleteUser();
323 extern afs_int32 KAA_ChangePassword();
324 extern afs_int32 KAM_SetPassword();
325 extern afs_int32 KAA_Authenticate(), KAA_AuthenticateV2();
326 extern afs_int32 KAT_GetTicket();
327 extern afs_int32 KAM_SetFields();
328 #define KA_REUSEPW 1
329 #define KA_NOREUSEPW 2
330 #define KA_ISLOCKED 4                
331
332 extern afs_int32 KAM_GetEntry();
333 extern afs_int32 KAM_ListEntry();
334 extern afs_int32 KAM_GetStats();
335 extern afs_int32 KAM_GetPassword();
336 extern afs_int32 KAM_GetRandomKey();
337 extern afs_int32 KAM_Debug();
338 extern afs_int32 KAM_Unlock();
339 extern afs_int32 KAM_LockStatus();
340
341 #define KA_AUTHENTICATION_SERVICE 731
342 #define KA_TICKET_GRANTING_SERVICE 732
343 #define KA_MAINTENANCE_SERVICE 733
344
345 #define RX_SCINDEX_NULL 0               /* No security */
346 #define RX_SCINDEX_VAB  1               /* vice tokens, with bcrypt */
347 #define RX_SCINDEX_KAD  2               /* Kerberos/DES */
348
349 #define KA_TGS_NAME "krbtgt"
350         /* realm is TGS instance */
351 #define KA_ADMIN_NAME "AuthServer"
352 #define KA_ADMIN_INST "Admin"
353
354 #define KA_LABELSIZE 4
355 #define KA_GETTGT_REQ_LABEL "gTGS"
356 #define KA_GETTGT_ANS_LABEL "tgsT"
357 #define KA_GETADM_REQ_LABEL "gADM"
358 #define KA_GETADM_ANS_LABEL "admT"
359 #define KA_CPW_REQ_LABEL "CPWl"
360 #define KA_CPW_ANS_LABEL "Pass"
361 #define KA_GETTICKET_ANS_LABEL "gtkt"
362
363 struct ka_gettgtRequest {                       /* format of request */
364     Date time;                          /* time of request */
365     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
366 };
367
368 /* old interface: see ka_ticketAnswer instead */
369 struct ka_gettgtAnswer {                /* format of response */
370     Date time;                          /* the time of the request plus one */
371     struct ktc_encryptionKey
372          sessionkey;                    /* the session key in the ticket */
373     afs_int32 kvno;                             /* version # of tkt encrypting key */
374     afs_int32 ticket_len;                       /* the ticket's length */
375     char ticket[MAXKTCTICKETLEN];       /* the ticket itself (no padding) */
376     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
377 };
378
379 struct ka_ticketAnswer {                /* format of response */
380     afs_int32 cksum;                            /* function to be defined */
381     Date challenge;                     /* the time of the request plus one */
382     struct ktc_encryptionKey
383          sessionKey;                    /* the session key in the ticket */
384     Date startTime;
385     Date endTime;
386     afs_int32 kvno;                             /* version of ticket encrypting key */
387     afs_int32 ticketLen;                        /* the ticket's length */
388     char name[MAXKTCNAMELEN];
389     char instance[MAXKTCNAMELEN];
390     char cell[MAXKTCNAMELEN];
391     char sname[MAXKTCNAMELEN];
392     char sinstance[MAXKTCNAMELEN];
393     char ticket[MAXKTCTICKETLEN];       /* the ticket (no extra chars) */
394     char label[KA_LABELSIZE];           /* for detecting decryption errors */
395 };
396
397 struct ka_cpwRequest {                  /* format of request */
398     Date time;                          /* time of request */
399     struct ktc_encryptionKey
400          newpw;                         /* new key */
401     afs_int32 kvno;                             /* version number of key */
402     afs_int32 spare;                            /* must be zero */
403     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
404 };
405
406 struct ka_cpwAnswer {                   /* format of response */
407     Date time;                          /* the time of the request plus one */
408     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
409 };
410
411 struct ka_getTicketTimes {
412     Date start;
413     Date end;
414 };
415
416 /* old interface: see ka_ticketAnswer instead */
417 struct ka_getTicketAnswer {
418     struct ktc_encryptionKey sessionKey;
419     Date startTime;
420     Date endTime;
421     afs_int32 kvno;
422     afs_int32 ticketLen;
423     char name[MAXKTCNAMELEN];
424     char instance[MAXKTCNAMELEN];
425     char cell[MAXKTCNAMELEN];
426     char sname[MAXKTCNAMELEN];
427     char sinstance[MAXKTCNAMELEN];
428     char ticket[MAXKTCTICKETLEN];
429 };
430
431 #ifndef ERROR_TABLE_BASE_KA
432 #define ka_ErrorString error_message
433 #undef  KAMINERROR
434 #define KAMINERROR ERROR_TABLE_BASE_KA
435 #define KAMAXERROR (KAMINERROR+255)
436 #endif
437
438 #endif