xref: /titanic_54/usr/src/lib/krb5/kdb/kdb5.h (revision 54925bf60766fbb4f1f2d7c843721406a7b7a3fb)
1*54925bf6Swillf #ifndef _KRB5_KDB5_H_
2*54925bf6Swillf #define _KRB5_KDB5_H_
3*54925bf6Swillf 
4*54925bf6Swillf #pragma ident	"%Z%%M%	%I%	%E% SMI"
5*54925bf6Swillf 
6*54925bf6Swillf #if HAVE_UNISTD_H
7*54925bf6Swillf #include <unistd.h>
8*54925bf6Swillf #endif
9*54925bf6Swillf 
10*54925bf6Swillf #include <errno.h>
11*54925bf6Swillf #include <utime.h>
12*54925bf6Swillf #include <utime.h>
13*54925bf6Swillf #include <k5-int.h>
14*54925bf6Swillf #include "kdb.h"
15*54925bf6Swillf 
16*54925bf6Swillf #define KDB_MAX_DB_NAME 128
17*54925bf6Swillf #define KDB_REALM_SECTION  "realms"
18*54925bf6Swillf #define KDB_MODULE_POINTER "database_module"
19*54925bf6Swillf #define KDB_MODULE_DEF_SECTION "dbdefaults"
20*54925bf6Swillf #define KDB_MODULE_SECTION "dbmodules"
21*54925bf6Swillf #define KDB_LIB_POINTER    "db_library"
22*54925bf6Swillf #define KDB_DATABASE_CONF_FILE  DEFAULT_SECURE_PROFILE_PATH
23*54925bf6Swillf #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV
24*54925bf6Swillf 
25*54925bf6Swillf #define KRB5_DB_GET_DB_CONTEXT(kcontext) (((kdb5_dal_handle*) (kcontext)->db_context)->db_context)
26*54925bf6Swillf #define KRB5_DB_GET_PROFILE(kcontext)  ((kcontext)->profile)
27*54925bf6Swillf #define KRB5_DB_GET_REALM(kcontext)    ((kcontext)->default_realm)
28*54925bf6Swillf 
29*54925bf6Swillf typedef struct _kdb_vftabl{
30*54925bf6Swillf     short int maj_ver;
31*54925bf6Swillf     short int min_ver;
32*54925bf6Swillf     int       iprop_supported;
33*54925bf6Swillf 
34*54925bf6Swillf     krb5_error_code (*init_library)();
35*54925bf6Swillf     krb5_error_code (*fini_library)();
36*54925bf6Swillf     krb5_error_code (*init_module) (krb5_context kcontext,
37*54925bf6Swillf 				    char * conf_section,
38*54925bf6Swillf 				    char ** db_args,
39*54925bf6Swillf 				    int mode);
40*54925bf6Swillf 
41*54925bf6Swillf     krb5_error_code (*fini_module) (krb5_context kcontext);
42*54925bf6Swillf 
43*54925bf6Swillf     krb5_error_code (*db_create) (krb5_context kcontext,
44*54925bf6Swillf 				  char * conf_section,
45*54925bf6Swillf 				  char ** db_args);
46*54925bf6Swillf 
47*54925bf6Swillf     krb5_error_code (*db_destroy) (krb5_context kcontext,
48*54925bf6Swillf 				   char *conf_section,
49*54925bf6Swillf 				   char ** db_args);
50*54925bf6Swillf 
51*54925bf6Swillf     krb5_error_code (*db_get_age) (krb5_context kcontext,
52*54925bf6Swillf 				   char *db_name,
53*54925bf6Swillf 				   time_t *age);
54*54925bf6Swillf 
55*54925bf6Swillf     krb5_error_code (*db_set_option) (krb5_context kcontext,
56*54925bf6Swillf 				      int option,
57*54925bf6Swillf 				      void *value);
58*54925bf6Swillf 
59*54925bf6Swillf     krb5_error_code (*db_lock) (krb5_context kcontext,
60*54925bf6Swillf 				int mode);
61*54925bf6Swillf 
62*54925bf6Swillf     krb5_error_code (*db_unlock) (krb5_context kcontext);
63*54925bf6Swillf 
64*54925bf6Swillf     krb5_error_code (*db_get_principal) (krb5_context kcontext,
65*54925bf6Swillf 					 krb5_const_principal search_for,
66*54925bf6Swillf 					 krb5_db_entry *entries,
67*54925bf6Swillf 					 int *nentries,
68*54925bf6Swillf 					 krb5_boolean *more);
69*54925bf6Swillf 
70*54925bf6Swillf     krb5_error_code (*db_get_principal_nolock) (krb5_context kcontext,
71*54925bf6Swillf 					 krb5_const_principal search_for,
72*54925bf6Swillf 					 krb5_db_entry *entries,
73*54925bf6Swillf 					 int *nentries,
74*54925bf6Swillf 					 krb5_boolean *more);
75*54925bf6Swillf 
76*54925bf6Swillf     krb5_error_code (*db_free_principal) (krb5_context kcontext,
77*54925bf6Swillf 					  krb5_db_entry *entry,
78*54925bf6Swillf 					  int count);
79*54925bf6Swillf 
80*54925bf6Swillf     krb5_error_code (*db_put_principal) (krb5_context kcontext,
81*54925bf6Swillf 					 krb5_db_entry *entries,
82*54925bf6Swillf 					 int *nentries,
83*54925bf6Swillf 					 char **db_args);
84*54925bf6Swillf 
85*54925bf6Swillf     krb5_error_code (*db_delete_principal) (krb5_context kcontext,
86*54925bf6Swillf 					    krb5_const_principal search_for,
87*54925bf6Swillf 					    int *nentries);
88*54925bf6Swillf 
89*54925bf6Swillf     krb5_error_code (*db_iterate) (krb5_context kcontext,
90*54925bf6Swillf 				   char *match_entry,
91*54925bf6Swillf 				   int (*func) (krb5_pointer, krb5_db_entry *),
92*54925bf6Swillf 				   krb5_pointer func_arg);
93*54925bf6Swillf 
94*54925bf6Swillf     krb5_error_code (*db_create_policy) (krb5_context kcontext,
95*54925bf6Swillf 					 osa_policy_ent_t policy);
96*54925bf6Swillf 
97*54925bf6Swillf     krb5_error_code (*db_get_policy) (krb5_context kcontext,
98*54925bf6Swillf 				      char *name,
99*54925bf6Swillf 				      osa_policy_ent_t *policy,
100*54925bf6Swillf 				      int *cnt);
101*54925bf6Swillf 
102*54925bf6Swillf     krb5_error_code (*db_put_policy) (krb5_context kcontext,
103*54925bf6Swillf 				      osa_policy_ent_t policy);
104*54925bf6Swillf 
105*54925bf6Swillf     krb5_error_code (*db_iter_policy) (krb5_context kcontext,
106*54925bf6Swillf 				       char *match_entry,
107*54925bf6Swillf 				       osa_adb_iter_policy_func func,
108*54925bf6Swillf 				       void *data);
109*54925bf6Swillf 
110*54925bf6Swillf 
111*54925bf6Swillf     krb5_error_code (*db_delete_policy) (krb5_context kcontext,
112*54925bf6Swillf 					 char *policy);
113*54925bf6Swillf 
114*54925bf6Swillf     void (*db_free_policy) (krb5_context kcontext,
115*54925bf6Swillf 			    osa_policy_ent_t val);
116*54925bf6Swillf 
117*54925bf6Swillf     krb5_error_code (*db_supported_realms) (krb5_context kcontext,
118*54925bf6Swillf 					    char **realms);
119*54925bf6Swillf 
120*54925bf6Swillf     krb5_error_code (*db_free_supported_realms) (krb5_context kcontext,
121*54925bf6Swillf 						 char **realms);
122*54925bf6Swillf 
123*54925bf6Swillf 
124*54925bf6Swillf     const char * (*errcode_2_string) (krb5_context kcontext,
125*54925bf6Swillf 				      long err_code);
126*54925bf6Swillf     void (*release_errcode_string) (krb5_context kcontext, const char *msg);
127*54925bf6Swillf 
128*54925bf6Swillf     void * (*db_alloc) (krb5_context kcontext, void *ptr, size_t size);
129*54925bf6Swillf     void   (*db_free)  (krb5_context kcontext, void *ptr);
130*54925bf6Swillf 
131*54925bf6Swillf 
132*54925bf6Swillf 
133*54925bf6Swillf     /* optional functions */
134*54925bf6Swillf     krb5_error_code (*set_master_key) (krb5_context kcontext,
135*54925bf6Swillf 				       char *pwd,
136*54925bf6Swillf 				       krb5_keyblock *key);
137*54925bf6Swillf 
138*54925bf6Swillf     krb5_error_code (*get_master_key) (krb5_context kcontext,
139*54925bf6Swillf 				       krb5_keyblock **key);
140*54925bf6Swillf 
141*54925bf6Swillf 
142*54925bf6Swillf     krb5_error_code (*setup_master_key_name) (krb5_context kcontext,
143*54925bf6Swillf 					      char *keyname,
144*54925bf6Swillf 					      char *realm,
145*54925bf6Swillf 					      char **fullname,
146*54925bf6Swillf 					      krb5_principal  *principal);
147*54925bf6Swillf 
148*54925bf6Swillf     krb5_error_code (*store_master_key) (krb5_context kcontext,
149*54925bf6Swillf 					 char *db_arg,
150*54925bf6Swillf 					 krb5_principal mname,
151*54925bf6Swillf 					 krb5_keyblock *key,
152*54925bf6Swillf 					 char *master_pwd);
153*54925bf6Swillf 
154*54925bf6Swillf     krb5_error_code (*fetch_master_key) (krb5_context kcontext,
155*54925bf6Swillf 					 krb5_principal mname,
156*54925bf6Swillf 					 krb5_keyblock *key,
157*54925bf6Swillf 					 int *kvno,
158*54925bf6Swillf 					 char *db_args);
159*54925bf6Swillf 
160*54925bf6Swillf     krb5_error_code (*verify_master_key) (krb5_context kcontext,
161*54925bf6Swillf 					  krb5_principal mprinc,
162*54925bf6Swillf 					  krb5_keyblock *mkey);
163*54925bf6Swillf 
164*54925bf6Swillf     krb5_error_code (*dbe_search_enctype) (krb5_context kcontext,
165*54925bf6Swillf 					   krb5_db_entry *dbentp,
166*54925bf6Swillf 					   krb5_int32 *start,
167*54925bf6Swillf 					   krb5_int32 ktype,
168*54925bf6Swillf 					   krb5_int32 stype,
169*54925bf6Swillf 					   krb5_int32 kvno,
170*54925bf6Swillf 					   krb5_key_data **kdatap);
171*54925bf6Swillf 
172*54925bf6Swillf 
173*54925bf6Swillf     krb5_error_code
174*54925bf6Swillf     (*db_change_pwd) (krb5_context	  context,
175*54925bf6Swillf 		      krb5_keyblock     * master_key,
176*54925bf6Swillf 		      krb5_key_salt_tuple * ks_tuple,
177*54925bf6Swillf 		      int		  ks_tuple_count,
178*54925bf6Swillf 		      char 		* passwd,
179*54925bf6Swillf 		      int		  new_kvno,
180*54925bf6Swillf 		      krb5_boolean	  keepold,
181*54925bf6Swillf 		      krb5_db_entry	* db_entry);
182*54925bf6Swillf 
183*54925bf6Swillf     /* Promote a temporary database to be the live one.  */
184*54925bf6Swillf     krb5_error_code (*promote_db) (krb5_context context,
185*54925bf6Swillf 				   char *conf_section,
186*54925bf6Swillf 				   char **db_args);
187*54925bf6Swillf 
188*54925bf6Swillf } kdb_vftabl;
189*54925bf6Swillf 
190*54925bf6Swillf typedef struct _db_library {
191*54925bf6Swillf     char name[KDB_MAX_DB_NAME];
192*54925bf6Swillf     int reference_cnt;
193*54925bf6Swillf     struct plugin_dir_handle dl_dir_handle;
194*54925bf6Swillf     kdb_vftabl vftabl;
195*54925bf6Swillf     struct _db_library *next, *prev;
196*54925bf6Swillf } *db_library;
197*54925bf6Swillf 
198*54925bf6Swillf typedef struct _kdb5_dal_handle
199*54925bf6Swillf {
200*54925bf6Swillf     /* Helps us to change db_library without affecting modules to some
201*54925bf6Swillf        extent.  */
202*54925bf6Swillf     void *db_context;
203*54925bf6Swillf     db_library lib_handle;
204*54925bf6Swillf } kdb5_dal_handle;
205*54925bf6Swillf 
206*54925bf6Swillf #endif  /* end of _KRB5_KDB5_H_ */
207