2 Unix SMB/CIFS implementation.
4 endpoint server for the drsuapi pipe
6 Copyright (C) Stefan Metzmacher 2004
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.
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.
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.
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"
30 destroy a general handle.
32 static void drsuapi_handle_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h)
40 static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
41 struct drsuapi_DsBind *r)
43 struct drsuapi_bind_state *b_state;
44 struct dcesrv_handle *handle;
45 struct drsuapi_DsBindInfoCtr *bind_info;
46 struct GUID site_guid;
48 r->out.bind_info = NULL;
49 ZERO_STRUCTP(r->out.bind_handle);
51 b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state);
52 WERR_TALLOC_CHECK(b_state);
54 b_state->sam_ctx = samdb_connect(b_state);
55 if (!b_state->sam_ctx) {
60 handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE);
66 handle->data = b_state;
67 handle->destroy = drsuapi_handle_destroy;
69 bind_info = talloc_p(mem_ctx, struct drsuapi_DsBindInfoCtr);
70 WERR_TALLOC_CHECK(bind_info);
72 ZERO_STRUCT(site_guid);
74 bind_info->length = 28;
75 bind_info->info.info28.supported_extensions = 0;
76 bind_info->info.info28.site_guid = site_guid;
77 bind_info->info.info28.u1 = 0;
78 bind_info->info.info28.repl_epoch = 0;
80 r->out.bind_info = bind_info;
81 *r->out.bind_handle = handle->wire_handle;
90 static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
91 struct drsuapi_DsUnbind *r)
93 struct dcesrv_handle *h;
95 *r->out.bind_handle = *r->in.bind_handle;
97 DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE);
99 /* this causes the callback drsuapi_handle_destroy() to be called by
100 the handle destroy code which destroys the state associated
102 dcesrv_handle_destroy(dce_call->conn, h);
104 ZERO_STRUCTP(r->out.bind_handle);
111 drsuapi_DsReplicaSync
113 static WERROR drsuapi_DsReplicaSync(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
114 struct drsuapi_DsReplicaSync *r)
116 /* TODO: implement this call correct!
117 * for now we just say yes,
118 * because we have no output parameter
125 DRSUAPI_GET_NC_CHANGES
127 static WERROR DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
128 struct DRSUAPI_GET_NC_CHANGES *r)
130 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
137 static WERROR DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
138 struct DRSUAPI_UPDATE_REFS *r)
140 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
147 static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
148 struct DRSUAPI_REPLICA_ADD *r)
150 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
157 static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
158 struct DRSUAPI_REPLICA_DEL *r)
160 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
165 DRSUAPI_REPLICA_MODIFY
167 static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
168 struct DRSUAPI_REPLICA_MODIFY *r)
170 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
177 static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
178 struct DRSUAPI_VERIFY_NAMES *r)
180 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
185 DRSUAPI_GET_MEMBERSHIPS
187 static WERROR DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
188 struct DRSUAPI_GET_MEMBERSHIPS *r)
190 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
195 DRSUAPI_INTER_DOMAIN_MOVE
197 static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
198 struct DRSUAPI_INTER_DOMAIN_MOVE *r)
200 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
205 DRSUAPI_GET_NT4_CHANGELOG
207 static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
208 struct DRSUAPI_GET_NT4_CHANGELOG *r)
210 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
215 drsuapi_DsCrackNames => drsuapip_cracknames.c
217 static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
218 struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames;
221 drsuapi_DsWriteAccountSpn
223 static WERROR drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
224 struct drsuapi_DsWriteAccountSpn *r)
226 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
231 DRSUAPI_REMOVE_DS_SERVER
233 static WERROR DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
234 struct DRSUAPI_REMOVE_DS_SERVER *r)
236 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
241 DRSUAPI_REMOVE_DS_DOMAIN
243 static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
244 struct DRSUAPI_REMOVE_DS_DOMAIN *r)
246 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
251 drsuapi_DsGetDomainControllerInfo
253 static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
254 struct drsuapi_DsGetDomainControllerInfo *r)
256 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
263 static WERROR DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
264 struct DRSUAPI_ADD_ENTRY *r)
266 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
273 static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
274 struct DRSUAPI_EXECUTE_KCC *r)
276 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
281 drsuapi_DsReplicaGetInfo
283 static WERROR drsuapi_DsReplicaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
284 struct drsuapi_DsReplicaGetInfo *r)
286 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
291 DRSUAPI_ADD_SID_HISTORY
293 static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
294 struct DRSUAPI_ADD_SID_HISTORY *r)
296 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
301 DRSUAPI_GET_MEMBERSHIPS2
303 static WERROR DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
304 struct DRSUAPI_GET_MEMBERSHIPS2 *r)
306 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
311 DRSUAPI_REPLICA_VERIFY_OBJECTS
313 static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
314 struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r)
316 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
321 DRSUAPI_GET_OBJECT_EXISTENCE
323 static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
324 struct DRSUAPI_GET_OBJECT_EXISTENCE *r)
326 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
331 DRSUAPI_QUERY_SITES_BY_COST
333 static WERROR DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
334 struct DRSUAPI_QUERY_SITES_BY_COST *r)
336 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
340 /* include the generated boilerplate */
341 #include "librpc/gen_ndr/ndr_drsuapi_s.c"