r5037: got rid of all of the TALLOC_DEPRECATED stuff. My apologies for the
[nivanova/samba-autobuild/.git] / source4 / rpc_server / drsuapi / dcesrv_drsuapi.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    endpoint server for the drsuapi pipe
5
6    Copyright (C) Stefan Metzmacher 2004
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 2 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, write to the Free Software
20    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23 #include "includes.h"
24 #include "librpc/gen_ndr/ndr_drsuapi.h"
25 #include "rpc_server/dcerpc_server.h"
26 #include "rpc_server/common/common.h"
27 #include "rpc_server/drsuapi/dcesrv_drsuapi.h"
28
29 /* 
30   drsuapi_DsBind 
31 */
32 static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
33                        struct drsuapi_DsBind *r)
34 {
35         struct drsuapi_bind_state *b_state;
36         struct dcesrv_handle *handle;
37         struct drsuapi_DsBindInfoCtr *bind_info;
38         struct GUID site_guid;
39
40         r->out.bind_info = NULL;
41         ZERO_STRUCTP(r->out.bind_handle);
42
43         b_state = talloc(dce_call->conn, struct drsuapi_bind_state);
44         WERR_TALLOC_CHECK(b_state);
45
46         b_state->sam_ctx = samdb_connect(b_state);
47         if (!b_state->sam_ctx) {
48                 talloc_free(b_state);
49                 return WERR_FOOBAR;
50         }
51
52         handle = dcesrv_handle_new(dce_call->context, DRSUAPI_BIND_HANDLE);
53         if (!handle) {
54                 talloc_free(b_state);
55                 return WERR_NOMEM;
56         }
57
58         handle->data = talloc_steal(handle, b_state);
59
60         bind_info = talloc(mem_ctx, struct drsuapi_DsBindInfoCtr);
61         WERR_TALLOC_CHECK(bind_info);
62
63         ZERO_STRUCT(site_guid);
64
65         bind_info->length                               = 28;
66         bind_info->info.info28.supported_extensions     = 0;
67         bind_info->info.info28.site_guid                = site_guid;
68         bind_info->info.info28.u1                       = 0;
69         bind_info->info.info28.repl_epoch               = 0;
70
71         r->out.bind_info = bind_info;
72         *r->out.bind_handle = handle->wire_handle;
73
74         return WERR_OK;
75 }
76
77
78 /* 
79   drsuapi_DsUnbind 
80 */
81 static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
82                                struct drsuapi_DsUnbind *r)
83 {
84         struct dcesrv_handle *h;
85
86         *r->out.bind_handle = *r->in.bind_handle;
87
88         DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE);
89
90         talloc_free(h);
91
92         ZERO_STRUCTP(r->out.bind_handle);
93
94         return WERR_OK;
95 }
96
97
98 /* 
99   drsuapi_DsReplicaSync 
100 */
101 static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
102                        struct drsuapi_DsReplicaSync *r)
103 {
104         /* TODO: implement this call correct!
105          *       for now we just say yes,
106          *       because we have no output parameter
107          */
108         return WERR_OK;
109 }
110
111
112 /* 
113   DRSUAPI_GET_NC_CHANGES 
114 */
115 static WERROR DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
116                        struct DRSUAPI_GET_NC_CHANGES *r)
117 {
118         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
119 }
120
121
122 /* 
123   DRSUAPI_UPDATE_REFS 
124 */
125 static WERROR DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
126                        struct DRSUAPI_UPDATE_REFS *r)
127 {
128         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
129 }
130
131
132 /* 
133   DRSUAPI_REPLICA_ADD 
134 */
135 static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
136                        struct DRSUAPI_REPLICA_ADD *r)
137 {
138         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
139 }
140
141
142 /* 
143   DRSUAPI_REPLICA_DEL 
144 */
145 static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
146                        struct DRSUAPI_REPLICA_DEL *r)
147 {
148         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
149 }
150
151
152 /* 
153   DRSUAPI_REPLICA_MODIFY 
154 */
155 static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
156                        struct DRSUAPI_REPLICA_MODIFY *r)
157 {
158         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
159 }
160
161
162 /* 
163   DRSUAPI_VERIFY_NAMES 
164 */
165 static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
166                        struct DRSUAPI_VERIFY_NAMES *r)
167 {
168         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
169 }
170
171
172 /* 
173   DRSUAPI_GET_MEMBERSHIPS 
174 */
175 static WERROR DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
176                        struct DRSUAPI_GET_MEMBERSHIPS *r)
177 {
178         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
179 }
180
181
182 /* 
183   DRSUAPI_INTER_DOMAIN_MOVE 
184 */
185 static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
186                        struct DRSUAPI_INTER_DOMAIN_MOVE *r)
187 {
188         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
189 }
190
191
192 /* 
193   DRSUAPI_GET_NT4_CHANGELOG 
194 */
195 static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
196                        struct DRSUAPI_GET_NT4_CHANGELOG *r)
197 {
198         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
199 }
200
201
202 /* 
203   drsuapi_DsCrackNames => drsuapip_cracknames.c
204 */
205 static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
206                        struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames;
207
208 /* 
209   drsuapi_DsWriteAccountSpn 
210 */
211 static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
212                        struct drsuapi_DsWriteAccountSpn *r)
213 {
214         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
215 }
216
217
218 /* 
219   DRSUAPI_REMOVE_DS_SERVER 
220 */
221 static WERROR DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
222                        struct DRSUAPI_REMOVE_DS_SERVER *r)
223 {
224         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
225 }
226
227
228 /* 
229   DRSUAPI_REMOVE_DS_DOMAIN 
230 */
231 static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
232                        struct DRSUAPI_REMOVE_DS_DOMAIN *r)
233 {
234         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
235 }
236
237
238 /* 
239   drsuapi_DsGetDomainControllerInfo 
240 */
241 static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
242                        struct drsuapi_DsGetDomainControllerInfo *r)
243 {
244         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
245 }
246
247
248 /* 
249   DRSUAPI_ADD_ENTRY 
250 */
251 static WERROR DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
252                        struct DRSUAPI_ADD_ENTRY *r)
253 {
254         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
255 }
256
257
258 /* 
259   DRSUAPI_EXECUTE_KCC 
260 */
261 static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
262                        struct DRSUAPI_EXECUTE_KCC *r)
263 {
264         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
265 }
266
267
268 /* 
269   drsuapi_DsReplicaGetInfo 
270 */
271 static WERROR drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
272                        struct drsuapi_DsReplicaGetInfo *r)
273 {
274         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
275 }
276
277
278 /* 
279   DRSUAPI_ADD_SID_HISTORY 
280 */
281 static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
282                        struct DRSUAPI_ADD_SID_HISTORY *r)
283 {
284         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
285 }
286
287
288 /* 
289   DRSUAPI_GET_MEMBERSHIPS2 
290 */
291 static WERROR DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
292                        struct DRSUAPI_GET_MEMBERSHIPS2 *r)
293 {
294         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
295 }
296
297
298 /* 
299   DRSUAPI_REPLICA_VERIFY_OBJECTS 
300 */
301 static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
302                        struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r)
303 {
304         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
305 }
306
307
308 /* 
309   DRSUAPI_GET_OBJECT_EXISTENCE 
310 */
311 static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
312                        struct DRSUAPI_GET_OBJECT_EXISTENCE *r)
313 {
314         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
315 }
316
317
318 /* 
319   DRSUAPI_QUERY_SITES_BY_COST 
320 */
321 static WERROR DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
322                        struct DRSUAPI_QUERY_SITES_BY_COST *r)
323 {
324         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
325 }
326
327
328 /* include the generated boilerplate */
329 #include "librpc/gen_ndr/ndr_drsuapi_s.c"