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