windows-updates-20010108
[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_UserAuthenticateGeneral2 (
283   afs_int32 flags,
284   char *name,
285   char *instance,
286   char *realm,
287   char *password,
288   char *smbname,
289   Date lifetime,
290   afs_int32 *password_expires,
291   afs_int32 spare2,
292   char **reasonP
293 );
294 extern afs_int32 ka_UserAuthenticate (
295   char *name,
296   char *instance,
297   char *realm,
298   char *password,
299   int   doSetPAG,
300   char **reasonP
301 );
302
303 extern afs_int32 ka_UserReadPassword (
304   char *prompt,
305   char *password,
306   int   plen,
307   char **reasonP
308 );
309
310 extern afs_int32 ka_VerifyUserPassword(
311      afs_int32 version,
312      char *name,
313      char *instance,
314      char *realm,
315      char *password,
316      int spare,
317      char **reasonP
318 );
319 #define KA_USERAUTH_VERSION 1
320 #define KA_USERAUTH_VERSION_MASK        0x00ffff
321 #define KA_USERAUTH_DOSETPAG            0x010000
322 #define KA_USERAUTH_DOSETPAG2           0x020000
323 #define KA_USERAUTH_ONLY_VERIFY         0x040000
324 #define KA_USERAUTH_AUTHENT_LOGON       0x100000
325 #define ka_UserAuthenticate(n,i,r,p,d,rP) \
326     ka_UserAuthenticateGeneral \
327         (KA_USERAUTH_VERSION + ((d) ? KA_USERAUTH_DOSETPAG : 0), \
328          n,i,r,p, /*lifetime*/0, /*spare1,2*/0,0, rP)
329 #define ka_UserAuthenticateLife(f,n,i,r,p,l,rP) \
330     ka_UserAuthenticateGeneral \
331         (KA_USERAUTH_VERSION + (f), n,i,r,p,l, /*spare1,2*/0,0, rP)
332
333 extern afs_int32 KAM_CreateUser();
334 extern afs_int32 KAM_DeleteUser();
335 extern afs_int32 KAA_ChangePassword();
336 extern afs_int32 KAM_SetPassword();
337 extern afs_int32 KAA_Authenticate(), KAA_AuthenticateV2();
338 extern afs_int32 KAT_GetTicket();
339 extern afs_int32 KAM_SetFields();
340 #define KA_REUSEPW 1
341 #define KA_NOREUSEPW 2
342 #define KA_ISLOCKED 4                
343
344 extern afs_int32 KAM_GetEntry();
345 extern afs_int32 KAM_ListEntry();
346 extern afs_int32 KAM_GetStats();
347 extern afs_int32 KAM_GetPassword();
348 extern afs_int32 KAM_GetRandomKey();
349 extern afs_int32 KAM_Debug();
350 extern afs_int32 KAM_Unlock();
351 extern afs_int32 KAM_LockStatus();
352
353 #define KA_AUTHENTICATION_SERVICE 731
354 #define KA_TICKET_GRANTING_SERVICE 732
355 #define KA_MAINTENANCE_SERVICE 733
356
357 #define RX_SCINDEX_NULL 0               /* No security */
358 #define RX_SCINDEX_VAB  1               /* vice tokens, with bcrypt */
359 #define RX_SCINDEX_KAD  2               /* Kerberos/DES */
360
361 #define KA_TGS_NAME "krbtgt"
362         /* realm is TGS instance */
363 #define KA_ADMIN_NAME "AuthServer"
364 #define KA_ADMIN_INST "Admin"
365
366 #define KA_LABELSIZE 4
367 #define KA_GETTGT_REQ_LABEL "gTGS"
368 #define KA_GETTGT_ANS_LABEL "tgsT"
369 #define KA_GETADM_REQ_LABEL "gADM"
370 #define KA_GETADM_ANS_LABEL "admT"
371 #define KA_CPW_REQ_LABEL "CPWl"
372 #define KA_CPW_ANS_LABEL "Pass"
373 #define KA_GETTICKET_ANS_LABEL "gtkt"
374
375 struct ka_gettgtRequest {                       /* format of request */
376     Date time;                          /* time of request */
377     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
378 };
379
380 /* old interface: see ka_ticketAnswer instead */
381 struct ka_gettgtAnswer {                /* format of response */
382     Date time;                          /* the time of the request plus one */
383     struct ktc_encryptionKey
384          sessionkey;                    /* the session key in the ticket */
385     afs_int32 kvno;                             /* version # of tkt encrypting key */
386     afs_int32 ticket_len;                       /* the ticket's length */
387     char ticket[MAXKTCTICKETLEN];       /* the ticket itself (no padding) */
388     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
389 };
390
391 struct ka_ticketAnswer {                /* format of response */
392     afs_int32 cksum;                            /* function to be defined */
393     Date challenge;                     /* the time of the request plus one */
394     struct ktc_encryptionKey
395          sessionKey;                    /* the session key in the ticket */
396     Date startTime;
397     Date endTime;
398     afs_int32 kvno;                             /* version of ticket encrypting key */
399     afs_int32 ticketLen;                        /* the ticket's length */
400     char name[MAXKTCNAMELEN];
401     char instance[MAXKTCNAMELEN];
402     char cell[MAXKTCNAMELEN];
403     char sname[MAXKTCNAMELEN];
404     char sinstance[MAXKTCNAMELEN];
405     char ticket[MAXKTCTICKETLEN];       /* the ticket (no extra chars) */
406     char label[KA_LABELSIZE];           /* for detecting decryption errors */
407 };
408
409 struct ka_cpwRequest {                  /* format of request */
410     Date time;                          /* time of request */
411     struct ktc_encryptionKey
412          newpw;                         /* new key */
413     afs_int32 kvno;                             /* version number of key */
414     afs_int32 spare;                            /* must be zero */
415     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
416 };
417
418 struct ka_cpwAnswer {                   /* format of response */
419     Date time;                          /* the time of the request plus one */
420     char label[KA_LABELSIZE];           /* label to verify correct decrypt */
421 };
422
423 struct ka_getTicketTimes {
424     Date start;
425     Date end;
426 };
427
428 /* old interface: see ka_ticketAnswer instead */
429 struct ka_getTicketAnswer {
430     struct ktc_encryptionKey sessionKey;
431     Date startTime;
432     Date endTime;
433     afs_int32 kvno;
434     afs_int32 ticketLen;
435     char name[MAXKTCNAMELEN];
436     char instance[MAXKTCNAMELEN];
437     char cell[MAXKTCNAMELEN];
438     char sname[MAXKTCNAMELEN];
439     char sinstance[MAXKTCNAMELEN];
440     char ticket[MAXKTCTICKETLEN];
441 };
442
443 #ifndef ERROR_TABLE_BASE_KA
444 #define ka_ErrorString error_message
445 #undef  KAMINERROR
446 #define KAMINERROR ERROR_TABLE_BASE_KA
447 #define KAMAXERROR (KAMINERROR+255)
448 #endif
449
450 #endif