s4:torture: Adapt KDC canon test to Heimdal upstream changes
[samba.git] / source4 / heimdal / lib / kadm5 / private.h
1 /*
2  * Copyright (c) 1997-2000 Kungliga Tekniska Högskolan
3  * (Royal Institute of Technology, Stockholm, Sweden).
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the Institute nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 /* $Id$ */
35
36 #ifndef __kadm5_privatex_h__
37 #define __kadm5_privatex_h__
38
39 #include "kadm5-hook.h"
40
41 #ifdef HAVE_SYS_UN_H
42 #include <sys/un.h>
43 #endif
44
45 struct kadm_func {
46     kadm5_ret_t (*chpass_principal) (void *, krb5_principal, int,
47                                      int, krb5_key_salt_tuple*, const char*);
48     kadm5_ret_t (*create_principal) (void*, kadm5_principal_ent_t, uint32_t,
49                                      int, krb5_key_salt_tuple *,
50                                      const char*);
51     kadm5_ret_t (*delete_principal) (void*, krb5_principal);
52     kadm5_ret_t (*destroy) (void*);
53     kadm5_ret_t (*flush) (void*);
54     kadm5_ret_t (*get_principal) (void*, krb5_principal,
55                                   kadm5_principal_ent_t, uint32_t);
56     kadm5_ret_t (*get_principals) (void*, const char*, char***, int*);
57     kadm5_ret_t (*get_privs) (void*, uint32_t*);
58     kadm5_ret_t (*modify_principal) (void*, kadm5_principal_ent_t, uint32_t);
59     kadm5_ret_t (*randkey_principal) (void*, krb5_principal, krb5_boolean, int,
60                                       krb5_key_salt_tuple*, krb5_keyblock**,
61                                       int*);
62     kadm5_ret_t (*rename_principal) (void*, krb5_principal, krb5_principal);
63     kadm5_ret_t (*chpass_principal_with_key) (void *, krb5_principal, int,
64                                               int, krb5_key_data *);
65     kadm5_ret_t (*lock) (void *);
66     kadm5_ret_t (*unlock) (void *);
67     kadm5_ret_t (*setkey_principal_3) (void *, krb5_principal, krb5_boolean,
68                                        int, krb5_key_salt_tuple *,
69                                        krb5_keyblock *, int);
70     kadm5_ret_t (*prune_principal) (void *, krb5_principal, int);
71 };
72
73 typedef struct kadm5_hook_context {
74     void *dsohandle;
75     const kadm5_hook_ftable *hook;
76     void *data;
77 } kadm5_hook_context;
78
79 /* XXX should be integrated */
80 typedef struct kadm5_common_context {
81     krb5_context context;
82     krb5_boolean my_context;
83     struct kadm_func funcs;
84     void *data;
85 } kadm5_common_context;
86
87 typedef struct kadm5_log_peer {
88     int fd;
89     char *name;
90     krb5_auth_context ac;
91     struct kadm5_log_peer *next;
92 } kadm5_log_peer;
93
94 typedef struct kadm5_log_context {
95     char *log_file;
96     int log_fd;
97     int read_only;
98     int lock_mode;
99     uint32_t version;
100     time_t last_time;
101 #ifndef NO_UNIX_SOCKETS
102     struct sockaddr_un socket_name;
103 #else
104     struct addrinfo *socket_info;
105 #endif
106     krb5_socket_t socket_fd;
107 } kadm5_log_context;
108
109 typedef struct kadm5_server_context {
110     krb5_context context;
111     krb5_boolean my_context;
112     struct kadm_func funcs;
113     /* */
114     kadm5_config_params config;
115     HDB *db;
116     int keep_open;
117     krb5_principal caller;
118     unsigned acl_flags;
119     kadm5_log_context log_context;
120     size_t num_hooks;
121     kadm5_hook_context **hooks;
122 } kadm5_server_context;
123
124 typedef struct kadm5_client_context {
125     krb5_context context;
126     krb5_boolean my_context;
127     struct kadm_func funcs;
128     /* */
129     krb5_auth_context ac;
130     char *realm;
131     char *admin_server;
132     int kadmind_port;
133     krb5_socket_t sock;
134     char *client_name;
135     char *service_name;
136     krb5_prompter_fct prompter;
137     const char *keytab;
138     krb5_ccache ccache;
139     kadm5_config_params *realm_params;
140     char *readonly_admin_server;
141     int readonly_kadmind_port;
142     unsigned int want_write:1;
143     unsigned int connected_to_writable:1;
144 } kadm5_client_context;
145
146 typedef struct kadm5_ad_context {
147     krb5_context context;
148     krb5_boolean my_context;
149     struct kadm_func funcs;
150     /* */
151     kadm5_config_params config;
152     krb5_principal caller;
153     krb5_ccache ccache;
154     char *client_name;
155     char *realm;
156     void *ldap_conn;
157     char *base_dn;
158 } kadm5_ad_context;
159
160 /*
161  * This enum is used in the iprop log file and on the wire in the iprop
162  * protocol.  DO NOT CHANGE, except to add new op types at the end, and
163  * look for places in lib/kadm5/log.c to update.
164  */
165 enum kadm_ops {
166     kadm_get,
167     kadm_delete,
168     kadm_create,
169     kadm_rename,
170     kadm_chpass,
171     kadm_modify,
172     kadm_randkey,
173     kadm_get_privs,
174     kadm_get_princs,
175     kadm_chpass_with_key,
176     kadm_nop,
177     kadm_prune,
178     kadm_first = kadm_get,
179     kadm_last = kadm_prune
180 };
181
182 /* FIXME nop types are currently not implemented */
183 enum kadm_nop_type {
184     kadm_nop_plain, /* plain nop, not relevance except as uberblock */
185     kadm_nop_trunc, /* indicates that the master truncated the log  */
186     kadm_nop_close  /* indicates that the master closed this log    */
187 };
188
189 enum kadm_iter_opts {
190     kadm_forward        = 1,
191     kadm_backward       = 2,
192     kadm_confirmed      = 4,
193     kadm_unconfirmed    = 8
194 };
195
196 enum kadm_recover_mode {
197     kadm_recover_commit,
198     kadm_recover_replay
199 };
200
201 #define KADMIN_APPL_VERSION "KADM0.1"
202 #define KADMIN_OLD_APPL_VERSION "KADM0.0"
203
204 extern struct heim_plugin_data kadm5_hook_plugin_data;
205
206 #include "kadm5-private.h"
207
208 #endif /* __kadm5_privatex_h__ */