2 * Copyright 2000, International Business Machines Corporation and others.
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
11 * Revision 2.1 1990/08/07 19:11:33
12 * Start with clean version to sync test and dev trees.
14 * Revision 1.11 89/02/10 11:56:23
15 * Added union to kaentry structure which allows overloading several
16 * fields depending on which type of user it is.
18 * Revision 1.10 89/02/02 14:24:22
19 * Removed calls to gethostid() which doesn't return IP address on Suns.
21 * Revision 1.9 88/12/22 14:43:48
22 * COUNT_REQ remembers name of last operation.
24 * Revision 1.8 88/12/09 14:42:00
25 * Greatly improved the external key version number management code.
26 * Added new entry type called kaOldKeys.
28 * Revision 1.7 88/11/22 09:30:40
29 * Change RPC statistics to be more robust.
31 * Revision 1.6 88/11/18 09:21:09
32 * Conversion to Rx and the new RxGen.
33 * Key version number is now a long.
34 * Conversion to use of <afs/auth.h> include file.
35 * Changed macros for statistics code since opcode hacking was punted.
37 * Revision 1.5 88/10/12 16:26:34
38 * Added much better (working) support of key version number maintenance.
40 * Revision 1.4 88/09/20 11:53:12
43 * Revision 1.3 88/08/29 12:46:39
44 * This checks in several new modules and many updates. The AuthServer
45 * at this point works more or less as described in the NAFS document
46 * released in at the Aug 23-24 1988 workshop.
47 * Tickets are as described in the kerberos.ticket file.
48 * Intergrated w/ MIT's des implementation and the Andrew one-way password
49 * encryption. Uses bcrypt for RSECURE connections. Uses R not Rx.
51 * Revision 1.2 88/07/19 16:20:33
52 * Added GetEntry and ListEntry; other internal changes.
56 #define KADBVERSION 5 /* the database version */
57 #endif /* KADBVERSION */
59 #define HASHSIZE 8191 /* pick a prime for the length */
63 /* all fields are stored in network (sun or rt) byte order */
65 afs_int32 version
; /* database version number */
66 afs_int32 headerSize
; /* bytes in header, for skipping in bad times */
67 afs_int32 freePtr
; /* first (if any) free entry in freelist */
68 afs_int32 eofPtr
; /* first free byte in file */
69 afs_int32 kvnoPtr
; /* first special name old keys entry */
70 struct kasstats stats
; /* track interesting statistics */
71 afs_int32 admin_accounts
; /* total number of users w/ admin flag set */
72 afs_int32 specialKeysVersion
; /* inc if special name gets new key */
73 afs_int32 hashsize
; /* allocated size of nameHash */
75 afs_int32 spare
[10]; /* allocate some spares next time */
77 afs_int32 nameHash
[HASHSIZE
]; /* hash table for names */
78 afs_int32 checkVersion
; /* database version number, same as first field */
82 #define KA_NPWSUMS (ENTRYSIZE - sizeof(kaident) - sizeof(struct ktc_encryptionKey) - 11*4)
84 /* all fields are stored in network byte order */
86 afs_int32 flags
; /* random flags */
87 afs_int32 next
; /* next block same entry (or freelist) */
88 Date user_expiration
; /* user registration good till then */
89 Date modification_time
; /* time of last update */
90 afs_int32 modification_id
; /* identity of user doing update */
91 Date change_password_time
; /* time user last changed own password */
92 afs_int32 max_ticket_lifetime
; /* maximum lifetime for tickets */
93 afs_int32 key_version
; /* verson number of this key */
94 union { /* overload several miscellaneous fields */
96 afs_int32 nOldKeys
; /* number of outstanding old keys */
97 afs_int32 oldKeys
; /* block containing old keys */
98 } asServer
; /* for principals that are part of the AuthServer itself */
100 afs_int32 maxAssociates
; /* associates this user can create */
101 afs_int32 nInstances
; /* number of instances user's created */
102 } assocRoot
; /* for principals at root of associate tree */
104 afs_int32 root
; /* identity of this instance's root */
106 } associate
; /* associate instance */
108 /* put the strings last to simplify alignment calculations */
109 struct kaident userID
; /* user and instance names */
110 struct ktc_encryptionKey key
; /* the key to use */
111 unsigned char misc_auth_bytes
[4]; /* expires, spare, attempts, locktime */
112 unsigned char pwsums
[KA_NPWSUMS
]; /* pad to 200 bytes */
114 typedef struct kaentry kaentry
;
121 struct kaOldKey
{ /* each old key still remembered */
122 Date superseded
; /* time this key replaced, or zero */
123 afs_int32 version
; /* key's version */
124 struct ktc_encryptionKey key
;
126 #define NOLDKEYS ((ENTRYSIZE-3*sizeof(afs_int32))/sizeof(struct kaOldKey))
129 afs_int32 flags
; /* random flags */
130 afs_int32 next
; /* next block of old keys for all entries (or freelist) */
131 afs_int32 entry
; /* corresponding user entry */
132 struct kaOldKey keys
[NOLDKEYS
]; /* each old key */
133 char padding
[ENTRYSIZE
-
134 ((NOLDKEYS
* sizeof(struct kaOldKey
)) +
135 3 * sizeof(afs_int32
))];
138 #define COUNT_REQ(op) int *this_op = &dynamic_statistics.op.aborts; dynamic_statistics.op.requests++; lastOperation = # op
139 #define COUNT_ABO (*this_op)++
141 /* given the disk offset of a structure, the memory address of the structure
142 and the address of an item within the structure, compute the disk address of
144 #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr))))
146 /* given an index for an entry return its disk address */
147 #define IOFFSET(idx) (sizeof(kaentry)*(idx) + sizeof(cheader))
149 extern struct kaheader cheader
;
150 extern struct kadstats dynamic_statistics
;
151 extern afs_uint32 myHost
;
153 extern int kaux_opendb(char *path
);
155 extern void kaux_closedb(void
158 extern int kaux_read(afs_int32 to
, unsigned int *nfailures
,
159 afs_uint32
* lasttime
);
161 extern int kaux_write(afs_int32 to
, unsigned int nfailures
,
162 afs_uint32 lasttime
);
164 extern void kaux_inc(afs_int32 to
, afs_uint32 locktime
);
166 extern int kaux_islocked(afs_int32 to
, u_int attempts
, u_int locktime
);
168 extern afs_int32 krb4_cross
;
170 extern afs_int32
es_Report(char *fmt
, ...)
171 AFS_ATTRIBUTE_FORMAT(__printf__
, 1, 2);