dsdb: acl_read fix a missed talloc_steal
[kai/samba.git] / source4 / cluster / cluster.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    core clustering code
5
6    Copyright (C) Andrew Tridgell 2006
7    
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12    
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17    
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include "includes.h"
23 #include "cluster/cluster.h"
24 #include "cluster/cluster_private.h"
25 #include "librpc/gen_ndr/misc.h"
26 #include "librpc/gen_ndr/server_id4.h"
27
28 static struct cluster_ops *ops;
29
30 /* set cluster operations */
31 void cluster_set_ops(struct cluster_ops *new_ops)
32 {
33         ops = new_ops;
34 }
35
36 /*
37   an ugly way of getting at the backend handle (eg. ctdb context) via the cluster API
38 */
39 void *cluster_backend_handle(void)
40 {
41         return ops->backend_handle(ops);
42 }
43
44 /* by default use the local ops */
45 static void cluster_init(void)
46 {
47         if (ops == NULL) cluster_local_init();
48 }
49
50 /*
51   create a server_id for the local node
52 */
53 struct server_id cluster_id(uint64_t id, uint32_t id2)
54 {
55         cluster_init();
56         return ops->cluster_id(ops, id, id2);
57 }
58
59
60 /*
61   return a server_id as a string
62 */
63 const char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id)
64 {
65         cluster_init();
66         return ops->cluster_id_string(ops, mem_ctx, id);
67 }
68
69
70 /*
71   open a temporary tdb in a cluster friendly manner
72 */
73 struct tdb_wrap *cluster_tdb_tmp_open(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *dbname, int flags)
74 {
75         cluster_init();
76         return ops->cluster_tdb_tmp_open(ops, mem_ctx, lp_ctx, dbname, flags);
77 }
78
79
80 /*
81   register a callback function for a messaging endpoint
82 */
83 NTSTATUS cluster_message_init(struct messaging_context *msg, struct server_id server,
84                               cluster_message_fn_t handler)
85 {
86         cluster_init();
87         return ops->message_init(ops, msg, server, handler);
88 }
89
90 /*
91   send a message to another node in the cluster
92 */
93 NTSTATUS cluster_message_send(struct server_id server, DATA_BLOB *data)
94 {
95         cluster_init();
96         return ops->message_send(ops, server, data);
97 }