s4-kdc: Add a kpasswd_samdb_set_password() helper function
[metze/samba/wip.git] / source4 / kdc / kdc-server.h
1 /*
2    Unix SMB/CIFS implementation.
3
4    KDC related functions
5
6    Copyright (c) 2005-2008 Andrew Bartlett <abartlet@samba.org>
7    Copyright (c) 2005             Andrew Tridgell <tridge@samba.org>
8    Copyright (c) 2005             Stefan Metzmacher <metze@samba.org>
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 */
23
24 #ifndef _KDC_SERVER_H
25 #define _KDC_SERVER_H
26
27 #include "system/kerberos.h"
28 #include "auth/kerberos/kerberos.h"
29
30 struct tsocket_address;
31 struct model_ops;
32
33 /*
34  * Context structure for the kdc server
35  */
36 struct kdc_server {
37         struct task_server *task;
38         struct smb_krb5_context *smb_krb5_context;
39         struct samba_kdc_base_context *base_ctx;
40         struct ldb_context *samdb;
41         bool am_rodc;
42         uint32_t proxy_timeout;
43         void *private_data;
44 };
45
46 typedef enum kdc_code_e {
47         KDC_OK = 0,
48         KDC_ERROR,
49         KDC_PROXY_REQUEST
50 } kdc_code;
51
52 typedef kdc_code (*kdc_process_fn_t)(struct kdc_server *kdc,
53                                      TALLOC_CTX *mem_ctx,
54                                      DATA_BLOB *request,
55                                      DATA_BLOB *reply,
56                                      struct tsocket_address *remote_address,
57                                      struct tsocket_address *local_address,
58                                      int datagram);
59
60 /* Information about one kdc socket */
61 struct kdc_socket {
62         struct kdc_server *kdc;
63         struct tsocket_address *local_address;
64         kdc_process_fn_t process;
65 };
66
67 /* Information about one kdc/kpasswd udp socket */
68 struct kdc_udp_socket {
69         struct kdc_socket *kdc_socket;
70         struct tdgram_context *dgram;
71         struct tevent_queue *send_queue;
72 };
73
74 NTSTATUS kdc_add_socket(struct kdc_server *kdc,
75                         const struct model_ops *model_ops,
76                         const char *name,
77                         const char *address,
78                         uint16_t port,
79                         kdc_process_fn_t process,
80                         bool udp_only);
81
82 #endif /* _KDC_SERVER_H */