r3468: split out dcerpc_server.h
[ira/wip.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   destroy a general handle. 
31 */
32 static void drsuapi_handle_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h)
33 {
34         talloc_free(h->data);
35 }
36
37 /* 
38   drsuapi_DsBind 
39 */
40 static WERROR drsuapi_DsBind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
41                        struct drsuapi_DsBind *r)
42 {
43         struct drsuapi_bind_state *b_state;
44         struct dcesrv_handle *handle;
45
46         r->out.bind_info = NULL;
47         ZERO_STRUCTP(r->out.bind_handle);
48
49         b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state);
50         WERR_TALLOC_CHECK(b_state);
51
52         /* TODO: fill b_state here */
53
54         handle = dcesrv_handle_new(dce_call->conn, DRSUAPI_BIND_HANDLE);
55         if (!handle) {
56                 talloc_free(b_state);
57                 return WERR_NOMEM;
58         }
59
60         handle->data = b_state;
61         handle->destroy = drsuapi_handle_destroy;
62
63         *r->out.bind_handle = handle->wire_handle;
64
65         return WERR_OK;
66 }
67
68
69 /* 
70   drsuapi_DsUnbind 
71 */
72 static WERROR drsuapi_DsUnbind(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
73                        struct drsuapi_DsUnbind *r)
74 {
75         struct dcesrv_handle *h;
76
77         *r->out.bind_handle = *r->in.bind_handle;
78
79         DCESRV_PULL_HANDLE_WERR(h, r->in.bind_handle, DRSUAPI_BIND_HANDLE);
80
81         /* this causes the callback drsuapi_handle_destroy() to be called by
82            the handle destroy code which destroys the state associated
83            with the handle */
84         dcesrv_handle_destroy(dce_call->conn, h);
85
86         ZERO_STRUCTP(r->out.bind_handle);
87
88         return WERR_OK;
89 }
90
91
92 /* 
93   DRSUAPI_REPLICA_SYNC 
94 */
95 static WERROR DRSUAPI_REPLICA_SYNC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
96                        struct DRSUAPI_REPLICA_SYNC *r)
97 {
98         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
99 }
100
101
102 /* 
103   DRSUAPI_GET_NC_CHANGES 
104 */
105 static WERROR DRSUAPI_GET_NC_CHANGES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
106                        struct DRSUAPI_GET_NC_CHANGES *r)
107 {
108         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
109 }
110
111
112 /* 
113   DRSUAPI_UPDATE_REFS 
114 */
115 static WERROR DRSUAPI_UPDATE_REFS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
116                        struct DRSUAPI_UPDATE_REFS *r)
117 {
118         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
119 }
120
121
122 /* 
123   DRSUAPI_REPLICA_ADD 
124 */
125 static WERROR DRSUAPI_REPLICA_ADD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
126                        struct DRSUAPI_REPLICA_ADD *r)
127 {
128         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
129 }
130
131
132 /* 
133   DRSUAPI_REPLICA_DEL 
134 */
135 static WERROR DRSUAPI_REPLICA_DEL(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
136                        struct DRSUAPI_REPLICA_DEL *r)
137 {
138         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
139 }
140
141
142 /* 
143   DRSUAPI_REPLICA_MODIFY 
144 */
145 static WERROR DRSUAPI_REPLICA_MODIFY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
146                        struct DRSUAPI_REPLICA_MODIFY *r)
147 {
148         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
149 }
150
151
152 /* 
153   DRSUAPI_VERIFY_NAMES 
154 */
155 static WERROR DRSUAPI_VERIFY_NAMES(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
156                        struct DRSUAPI_VERIFY_NAMES *r)
157 {
158         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
159 }
160
161
162 /* 
163   DRSUAPI_GET_MEMBERSHIPS 
164 */
165 static WERROR DRSUAPI_GET_MEMBERSHIPS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
166                        struct DRSUAPI_GET_MEMBERSHIPS *r)
167 {
168         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
169 }
170
171
172 /* 
173   DRSUAPI_INTER_DOMAIN_MOVE 
174 */
175 static WERROR DRSUAPI_INTER_DOMAIN_MOVE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
176                        struct DRSUAPI_INTER_DOMAIN_MOVE *r)
177 {
178         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
179 }
180
181
182 /* 
183   DRSUAPI_GET_NT4_CHANGELOG 
184 */
185 static WERROR DRSUAPI_GET_NT4_CHANGELOG(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
186                        struct DRSUAPI_GET_NT4_CHANGELOG *r)
187 {
188         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
189 }
190
191
192 /* 
193   drsuapi_DsCrackNames => drsuapip_cracknames.c
194 */
195 static WERROR (*drsuapi_DsCrackNames)(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
196                        struct drsuapi_DsCrackNames *r) = dcesrv_drsuapi_DsCrackNames;
197
198 /* 
199   DRSUAPI_WRITE_SPN 
200 */
201 static WERROR DRSUAPI_WRITE_SPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
202                        struct DRSUAPI_WRITE_SPN *r)
203 {
204         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
205 }
206
207
208 /* 
209   DRSUAPI_REMOVE_DS_SERVER 
210 */
211 static WERROR DRSUAPI_REMOVE_DS_SERVER(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
212                        struct DRSUAPI_REMOVE_DS_SERVER *r)
213 {
214         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
215 }
216
217
218 /* 
219   DRSUAPI_REMOVE_DS_DOMAIN 
220 */
221 static WERROR DRSUAPI_REMOVE_DS_DOMAIN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
222                        struct DRSUAPI_REMOVE_DS_DOMAIN *r)
223 {
224         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
225 }
226
227
228 /* 
229   drsuapi_DsGetDomainControllerInfo 
230 */
231 static WERROR drsuapi_DsGetDomainControllerInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
232                        struct drsuapi_DsGetDomainControllerInfo *r)
233 {
234         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
235 }
236
237
238 /* 
239   DRSUAPI_ADD_ENTRY 
240 */
241 static WERROR DRSUAPI_ADD_ENTRY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
242                        struct DRSUAPI_ADD_ENTRY *r)
243 {
244         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
245 }
246
247
248 /* 
249   DRSUAPI_EXECUTE_KCC 
250 */
251 static WERROR DRSUAPI_EXECUTE_KCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
252                        struct DRSUAPI_EXECUTE_KCC *r)
253 {
254         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
255 }
256
257
258 /* 
259   DRSUAPI_GET_REPL_INFO 
260 */
261 static WERROR DRSUAPI_GET_REPL_INFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
262                        struct DRSUAPI_GET_REPL_INFO *r)
263 {
264         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
265 }
266
267
268 /* 
269   DRSUAPI_ADD_SID_HISTORY 
270 */
271 static WERROR DRSUAPI_ADD_SID_HISTORY(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
272                        struct DRSUAPI_ADD_SID_HISTORY *r)
273 {
274         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
275 }
276
277
278 /* 
279   DRSUAPI_GET_MEMBERSHIPS2 
280 */
281 static WERROR DRSUAPI_GET_MEMBERSHIPS2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
282                        struct DRSUAPI_GET_MEMBERSHIPS2 *r)
283 {
284         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
285 }
286
287
288 /* 
289   DRSUAPI_REPLICA_VERIFY_OBJECTS 
290 */
291 static WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
292                        struct DRSUAPI_REPLICA_VERIFY_OBJECTS *r)
293 {
294         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
295 }
296
297
298 /* 
299   DRSUAPI_GET_OBJECT_EXISTENCE 
300 */
301 static WERROR DRSUAPI_GET_OBJECT_EXISTENCE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
302                        struct DRSUAPI_GET_OBJECT_EXISTENCE *r)
303 {
304         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
305 }
306
307
308 /* 
309   DRSUAPI_QUERY_SITES_BY_COST 
310 */
311 static WERROR DRSUAPI_QUERY_SITES_BY_COST(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
312                        struct DRSUAPI_QUERY_SITES_BY_COST *r)
313 {
314         DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
315 }
316
317
318 /* include the generated boilerplate */
319 #include "librpc/gen_ndr/ndr_drsuapi_s.c"