c1d6d6ad69206294007b73258a1108de482b18ee
[ira/wip.git] / source4 / rpc_server / winreg / rpc_winreg.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    endpoint server for the winreg pipe
5
6    Copyright (C) Jelmer Vernooij 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
25 enum handle_types { HTYPE_REGKEY, HTYPE_REGVAL };
26
27 struct _privatedata {
28         REG_HANDLE *registry;
29 };
30
31
32 /* this function is called when the client disconnects the endpoint */
33 static void winreg_unbind(struct dcesrv_connection *dc, const struct dcesrv_interface *di) 
34 {
35         struct _privatedata *data = dc->private;
36         if (data) reg_free(data->registry);
37 }
38
39 static NTSTATUS winreg_bind(struct dcesrv_call_state *dc, const struct dcesrv_interface *di) 
40 {
41         struct _privatedata *data;
42         data = talloc(dc->mem_ctx, sizeof(struct _privatedata));
43         data->registry = reg_open(lp_parm_string(-1,"winreg","subsystem"),lp_parm_string(-1,"winreg", "file"), False);
44         if(!data->registry) return NT_STATUS_UNSUCCESSFUL;
45         dc->conn->private = data;
46         return NT_STATUS_OK;
47 }
48
49 #define DCESRV_INTERFACE_WINREG_BIND winreg_bind
50 #define DCESRV_INTERFACE_WINREG_UNBIND winreg_unbind
51
52 /* 
53   winreg_OpenHKCR 
54 */
55 static NTSTATUS winreg_OpenHKCR(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
56                        struct winreg_OpenHKCR *r)
57 {
58         
59         return NT_STATUS_NOT_IMPLEMENTED;
60 }
61
62
63 /* 
64   winreg_OpenHKCU 
65 */
66 static NTSTATUS winreg_OpenHKCU(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
67                        struct winreg_OpenHKCU *r)
68 {
69         struct _privatedata *data = dce_call->conn->private;
70         REG_KEY *root = reg_get_root(data->registry);
71         REG_KEY *k = reg_open_key(root, "\\HKEY_CURRENT_USER");
72
73         if(!k) {
74                 r->out.result = WERR_BADFILE;
75         } else {
76                 struct dcesrv_handle *h = dcesrv_handle_new(dce_call->conn, HTYPE_REGKEY);
77                 h->data = k;
78                 r->out.handle = &h->wire_handle;
79         }
80
81         r->out.result = WERR_OK;
82
83         return NT_STATUS_OK;
84 }
85
86
87 /* 
88   winreg_OpenHKLM 
89 */
90 static NTSTATUS winreg_OpenHKLM(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
91                        struct winreg_OpenHKLM *r)
92 {
93         return NT_STATUS_NOT_IMPLEMENTED;
94 }
95
96
97 /* 
98   winreg_OpenHKPD 
99 */
100 static NTSTATUS winreg_OpenHKPD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
101                        struct winreg_OpenHKPD *r)
102 {
103         return NT_STATUS_NOT_IMPLEMENTED;
104 }
105
106
107 /* 
108   winreg_OpenHKU 
109 */
110 static NTSTATUS winreg_OpenHKU(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
111                        struct winreg_OpenHKU *r)
112 {
113         return NT_STATUS_NOT_IMPLEMENTED;
114 }
115
116
117 /* 
118   winreg_CloseKey 
119 */
120 static NTSTATUS winreg_CloseKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
121                        struct winreg_CloseKey *r)
122 {
123         return NT_STATUS_NOT_IMPLEMENTED;
124 }
125
126
127 /* 
128   winreg_CreateKey 
129 */
130 static NTSTATUS winreg_CreateKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
131                        struct winreg_CreateKey *r)
132 {
133         return NT_STATUS_NOT_IMPLEMENTED;
134 }
135
136
137 /* 
138   winreg_DeleteKey 
139 */
140 static NTSTATUS winreg_DeleteKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
141                        struct winreg_DeleteKey *r)
142 {
143         return NT_STATUS_NOT_IMPLEMENTED;
144 }
145
146
147 /* 
148   winreg_DeleteValue 
149 */
150 static NTSTATUS winreg_DeleteValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
151                        struct winreg_DeleteValue *r)
152 {
153         return NT_STATUS_NOT_IMPLEMENTED;
154 }
155
156
157 /* 
158   winreg_EnumKey 
159 */
160 static NTSTATUS winreg_EnumKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
161                        struct winreg_EnumKey *r)
162 {
163         return NT_STATUS_NOT_IMPLEMENTED;
164 }
165
166
167 /* 
168   winreg_EnumValue 
169 */
170 static NTSTATUS winreg_EnumValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
171                        struct winreg_EnumValue *r)
172 {
173         return NT_STATUS_NOT_IMPLEMENTED;
174 }
175
176
177 /* 
178   winreg_FlushKey 
179 */
180 static NTSTATUS winreg_FlushKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
181                        struct winreg_FlushKey *r)
182 {
183         return NT_STATUS_NOT_IMPLEMENTED;
184 }
185
186
187 /* 
188   winreg_GetKeySecurity 
189 */
190 static NTSTATUS winreg_GetKeySecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
191                        struct winreg_GetKeySecurity *r)
192 {
193         return NT_STATUS_NOT_IMPLEMENTED;
194 }
195
196
197 /* 
198   winreg_LoadKey 
199 */
200 static NTSTATUS winreg_LoadKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
201                        struct winreg_LoadKey *r)
202 {
203         return NT_STATUS_NOT_IMPLEMENTED;
204 }
205
206
207 /* 
208   winreg_NotifyChangeKeyValue 
209 */
210 static NTSTATUS winreg_NotifyChangeKeyValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
211                        struct winreg_NotifyChangeKeyValue *r)
212 {
213         return NT_STATUS_NOT_IMPLEMENTED;
214 }
215
216
217 /* 
218   winreg_OpenKey 
219 */
220 static NTSTATUS winreg_OpenKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
221                        struct winreg_OpenKey *r)
222 {
223         struct dcesrv_handle *h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
224         if(!h) {
225                 return NT_STATUS_INVALID_HANDLE;
226         }
227         
228         return NT_STATUS_NOT_IMPLEMENTED;
229 }
230
231
232 /* 
233   winreg_QueryInfoKey 
234 */
235 static NTSTATUS winreg_QueryInfoKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
236                        struct winreg_QueryInfoKey *r)
237 {
238         return NT_STATUS_NOT_IMPLEMENTED;
239 }
240
241
242 /* 
243   winreg_QueryValue 
244 */
245 static NTSTATUS winreg_QueryValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
246                        struct winreg_QueryValue *r)
247 {
248         return NT_STATUS_NOT_IMPLEMENTED;
249 }
250
251
252 /* 
253   winreg_ReplaceKey 
254 */
255 static NTSTATUS winreg_ReplaceKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
256                        struct winreg_ReplaceKey *r)
257 {
258         return NT_STATUS_NOT_IMPLEMENTED;
259 }
260
261
262 /* 
263   winreg_RestoreKey 
264 */
265 static NTSTATUS winreg_RestoreKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
266                        struct winreg_RestoreKey *r)
267 {
268         return NT_STATUS_NOT_IMPLEMENTED;
269 }
270
271
272 /* 
273   winreg_SaveKey 
274 */
275 static NTSTATUS winreg_SaveKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
276                        struct winreg_SaveKey *r)
277 {
278         return NT_STATUS_NOT_IMPLEMENTED;
279 }
280
281
282 /* 
283   winreg_SetKeySecurity 
284 */
285 static NTSTATUS winreg_SetKeySecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
286                        struct winreg_SetKeySecurity *r)
287 {
288         return NT_STATUS_NOT_IMPLEMENTED;
289 }
290
291
292 /* 
293   winreg_SetValue 
294 */
295 static NTSTATUS winreg_SetValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
296                        struct winreg_SetValue *r)
297 {
298         return NT_STATUS_NOT_IMPLEMENTED;
299 }
300
301
302 /* 
303   winreg_UnLoadKey 
304 */
305 static NTSTATUS winreg_UnLoadKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
306                        struct winreg_UnLoadKey *r)
307 {
308         return NT_STATUS_NOT_IMPLEMENTED;
309 }
310
311
312 /* 
313   winreg_InitiateSystemShutdown 
314 */
315 static NTSTATUS winreg_InitiateSystemShutdown(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
316                        struct winreg_InitiateSystemShutdown *r)
317 {
318         return NT_STATUS_NOT_IMPLEMENTED;
319 }
320
321
322 /* 
323   winreg_AbortSystemShutdown 
324 */
325 static NTSTATUS winreg_AbortSystemShutdown(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
326                        struct winreg_AbortSystemShutdown *r)
327 {
328         return NT_STATUS_NOT_IMPLEMENTED;
329 }
330
331
332 /* 
333   winreg_GetVersion 
334 */
335 static NTSTATUS winreg_GetVersion(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
336                        struct winreg_GetVersion *r)
337 {
338         return NT_STATUS_NOT_IMPLEMENTED;
339 }
340
341
342 /* 
343   winreg_OpenHKCC 
344 */
345 static NTSTATUS winreg_OpenHKCC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
346                        struct winreg_OpenHKCC *r)
347 {
348         return NT_STATUS_NOT_IMPLEMENTED;
349 }
350
351
352 /* 
353   winreg_OpenHKDD 
354 */
355 static NTSTATUS winreg_OpenHKDD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
356                        struct winreg_OpenHKDD *r)
357 {
358         return NT_STATUS_NOT_IMPLEMENTED;
359 }
360
361
362 /* 
363   winreg_QueryMultipleValues 
364 */
365 static NTSTATUS winreg_QueryMultipleValues(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
366                        struct winreg_QueryMultipleValues *r)
367 {
368         return NT_STATUS_NOT_IMPLEMENTED;
369 }
370
371
372 /* 
373   winreg_InitiateSystemShutdownEx 
374 */
375 static NTSTATUS winreg_InitiateSystemShutdownEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
376                        struct winreg_InitiateSystemShutdownEx *r)
377 {
378         return NT_STATUS_NOT_IMPLEMENTED;
379 }
380
381
382 /* 
383   winreg_SaveKeyEx 
384 */
385 static NTSTATUS winreg_SaveKeyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
386                        struct winreg_SaveKeyEx *r)
387 {
388         return NT_STATUS_NOT_IMPLEMENTED;
389 }
390
391
392 /* 
393   winreg_OpenHKPT 
394 */
395 static NTSTATUS winreg_OpenHKPT(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
396                        struct winreg_OpenHKPT *r)
397 {
398         return NT_STATUS_NOT_IMPLEMENTED;
399 }
400
401
402 /* 
403   winreg_OpenHKPN 
404 */
405 static NTSTATUS winreg_OpenHKPN(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
406                        struct winreg_OpenHKPN *r)
407 {
408         return NT_STATUS_NOT_IMPLEMENTED;
409 }
410
411
412 /* 
413   winreg_QueryMultipleValues2 
414 */
415 static NTSTATUS winreg_QueryMultipleValues2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
416                        struct winreg_QueryMultipleValues2 *r)
417 {
418         return NT_STATUS_NOT_IMPLEMENTED;
419 }
420
421
422 /* include the generated boilerplate */
423 #include "librpc/gen_ndr/ndr_winreg_s.c"