s4:"dns_update_list" file: install it properly into the private directory
[Samba/cd1.git] / source3 / rpc_server / srv_ntsvcs_nt.c
blobec0c884acf3ac5f62791740dd931a7f35783c07b
1 /*
2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
5 * Copyright (C) Gerald (Jerry) Carter 2005.
6 * Copyright (C) Guenther Deschner 2008,2009.
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 3 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, see <http://www.gnu.org/licenses/>.
22 #include "includes.h"
23 #include "../librpc/gen_ndr/srv_ntsvcs.h"
25 #undef DBGC_CLASS
26 #define DBGC_CLASS DBGC_RPC_SRV
28 /********************************************************************
29 ********************************************************************/
31 static char* get_device_path(TALLOC_CTX *mem_ctx, const char *device )
33 return talloc_asprintf(mem_ctx, "ROOT\\Legacy_%s\\0000", device);
36 /********************************************************************
37 ********************************************************************/
39 WERROR _PNP_GetVersion(pipes_struct *p,
40 struct PNP_GetVersion *r)
42 *r->out.version = 0x0400; /* no idea what this means */
44 return WERR_OK;
47 /********************************************************************
48 ********************************************************************/
50 WERROR _PNP_GetDeviceListSize(pipes_struct *p,
51 struct PNP_GetDeviceListSize *r)
53 char *devicepath;
55 if ((r->in.flags & CM_GETIDLIST_FILTER_SERVICE) &&
56 (!r->in.devicename)) {
57 return WERR_CM_INVALID_POINTER;
60 if (!(devicepath = get_device_path(p->mem_ctx, r->in.devicename))) {
61 return WERR_NOMEM;
64 *r->out.size = strlen(devicepath) + 2;
66 TALLOC_FREE(devicepath);
68 return WERR_OK;
71 /****************************************************************
72 _PNP_GetDeviceList
73 ****************************************************************/
75 WERROR _PNP_GetDeviceList(pipes_struct *p,
76 struct PNP_GetDeviceList *r)
78 char *devicepath;
79 uint32_t size = 0;
80 const char **multi_sz = NULL;
81 DATA_BLOB blob;
83 if ((r->in.flags & CM_GETIDLIST_FILTER_SERVICE) &&
84 (!r->in.filter)) {
85 return WERR_CM_INVALID_POINTER;
88 if (!(devicepath = get_device_path(p->mem_ctx, r->in.filter))) {
89 return WERR_NOMEM;
92 size = strlen(devicepath) + 2;
94 if (*r->in.length < size) {
95 return WERR_CM_BUFFER_SMALL;
98 multi_sz = talloc_zero_array(p->mem_ctx, const char *, 2);
99 if (!multi_sz) {
100 return WERR_NOMEM;
103 multi_sz[0] = devicepath;
105 if (!push_reg_multi_sz(multi_sz, &blob, multi_sz)) {
106 return WERR_NOMEM;
109 if (*r->in.length < blob.length/2) {
110 return WERR_CM_BUFFER_SMALL;
113 memcpy(r->out.buffer, blob.data, blob.length);
115 return WERR_OK;
118 /********************************************************************
119 _PNP_GetDeviceRegProp
120 ********************************************************************/
122 WERROR _PNP_GetDeviceRegProp(pipes_struct *p,
123 struct PNP_GetDeviceRegProp *r)
125 char *ptr;
126 struct regval_ctr *values;
127 struct regval_blob *val;
129 switch( r->in.property ) {
130 case DEV_REGPROP_DESC:
132 /* just parse the service name from the device path and then
133 lookup the display name */
134 if ( !(ptr = strrchr_m( r->in.devicepath, '\\' )) )
135 return WERR_GENERAL_FAILURE;
136 *ptr = '\0';
138 if ( !(ptr = strrchr_m( r->in.devicepath, '_' )) )
139 return WERR_GENERAL_FAILURE;
140 ptr++;
142 if ( !(values = svcctl_fetch_regvalues(
143 ptr, p->server_info->ptok)))
144 return WERR_GENERAL_FAILURE;
146 if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) ) {
147 TALLOC_FREE( values );
148 return WERR_GENERAL_FAILURE;
151 if (*r->in.buffer_size < val->size) {
152 *r->out.needed = val->size;
153 *r->out.buffer_size = 0;
154 TALLOC_FREE( values );
155 return WERR_CM_BUFFER_SMALL;
158 r->out.buffer = (uint8_t *)talloc_memdup(p->mem_ctx, val->data_p, val->size);
159 TALLOC_FREE(values);
160 if (!r->out.buffer) {
161 return WERR_NOMEM;
164 *r->out.reg_data_type = REG_SZ; /* always 1...tested using a remove device manager connection */
165 *r->out.buffer_size = val->size;
166 *r->out.needed = val->size;
168 break;
170 default:
171 *r->out.reg_data_type = 0x00437c98; /* ??? */
172 return WERR_CM_NO_SUCH_VALUE;
175 return WERR_OK;
178 /********************************************************************
179 ********************************************************************/
181 WERROR _PNP_ValidateDeviceInstance(pipes_struct *p,
182 struct PNP_ValidateDeviceInstance *r)
184 /* whatever dude */
185 return WERR_OK;
188 /********************************************************************
189 ********************************************************************/
191 WERROR _PNP_GetHwProfInfo(pipes_struct *p,
192 struct PNP_GetHwProfInfo *r)
194 /* steal the incoming buffer */
196 r->out.info = r->in.info;
198 /* Take the 5th Ammentment */
200 return WERR_CM_NO_MORE_HW_PROFILES;
203 /********************************************************************
204 ********************************************************************/
206 WERROR _PNP_HwProfFlags(pipes_struct *p,
207 struct PNP_HwProfFlags *r)
209 /* just nod your head */
211 return WERR_OK;
214 /****************************************************************
215 ****************************************************************/
217 WERROR _PNP_Disconnect(pipes_struct *p,
218 struct PNP_Disconnect *r)
220 p->rng_fault_state = true;
221 return WERR_NOT_SUPPORTED;
224 /****************************************************************
225 ****************************************************************/
227 WERROR _PNP_Connect(pipes_struct *p,
228 struct PNP_Connect *r)
230 p->rng_fault_state = true;
231 return WERR_NOT_SUPPORTED;
234 /****************************************************************
235 ****************************************************************/
237 WERROR _PNP_GetGlobalState(pipes_struct *p,
238 struct PNP_GetGlobalState *r)
240 p->rng_fault_state = true;
241 return WERR_NOT_SUPPORTED;
244 /****************************************************************
245 ****************************************************************/
247 WERROR _PNP_InitDetection(pipes_struct *p,
248 struct PNP_InitDetection *r)
250 p->rng_fault_state = true;
251 return WERR_NOT_SUPPORTED;
254 /****************************************************************
255 ****************************************************************/
257 WERROR _PNP_ReportLogOn(pipes_struct *p,
258 struct PNP_ReportLogOn *r)
260 p->rng_fault_state = true;
261 return WERR_NOT_SUPPORTED;
264 /****************************************************************
265 ****************************************************************/
267 WERROR _PNP_GetRootDeviceInstance(pipes_struct *p,
268 struct PNP_GetRootDeviceInstance *r)
270 p->rng_fault_state = true;
271 return WERR_NOT_SUPPORTED;
274 /****************************************************************
275 ****************************************************************/
277 WERROR _PNP_GetRelatedDeviceInstance(pipes_struct *p,
278 struct PNP_GetRelatedDeviceInstance *r)
280 p->rng_fault_state = true;
281 return WERR_NOT_SUPPORTED;
284 /****************************************************************
285 ****************************************************************/
287 WERROR _PNP_EnumerateSubKeys(pipes_struct *p,
288 struct PNP_EnumerateSubKeys *r)
290 p->rng_fault_state = true;
291 return WERR_NOT_SUPPORTED;
294 /****************************************************************
295 ****************************************************************/
297 WERROR _PNP_GetDepth(pipes_struct *p,
298 struct PNP_GetDepth *r)
300 p->rng_fault_state = true;
301 return WERR_NOT_SUPPORTED;
304 /****************************************************************
305 ****************************************************************/
307 WERROR _PNP_SetDeviceRegProp(pipes_struct *p,
308 struct PNP_SetDeviceRegProp *r)
310 p->rng_fault_state = true;
311 return WERR_NOT_SUPPORTED;
314 /****************************************************************
315 ****************************************************************/
317 WERROR _PNP_GetClassInstance(pipes_struct *p,
318 struct PNP_GetClassInstance *r)
320 p->rng_fault_state = true;
321 return WERR_NOT_SUPPORTED;
324 /****************************************************************
325 ****************************************************************/
327 WERROR _PNP_CreateKey(pipes_struct *p,
328 struct PNP_CreateKey *r)
330 p->rng_fault_state = true;
331 return WERR_NOT_SUPPORTED;
334 /****************************************************************
335 ****************************************************************/
337 WERROR _PNP_DeleteRegistryKey(pipes_struct *p,
338 struct PNP_DeleteRegistryKey *r)
340 p->rng_fault_state = true;
341 return WERR_NOT_SUPPORTED;
344 /****************************************************************
345 ****************************************************************/
347 WERROR _PNP_GetClassCount(pipes_struct *p,
348 struct PNP_GetClassCount *r)
350 p->rng_fault_state = true;
351 return WERR_NOT_SUPPORTED;
354 /****************************************************************
355 ****************************************************************/
357 WERROR _PNP_GetClassName(pipes_struct *p,
358 struct PNP_GetClassName *r)
360 p->rng_fault_state = true;
361 return WERR_NOT_SUPPORTED;
364 /****************************************************************
365 ****************************************************************/
367 WERROR _PNP_DeleteClassKey(pipes_struct *p,
368 struct PNP_DeleteClassKey *r)
370 p->rng_fault_state = true;
371 return WERR_NOT_SUPPORTED;
374 /****************************************************************
375 ****************************************************************/
377 WERROR _PNP_GetInterfaceDeviceAlias(pipes_struct *p,
378 struct PNP_GetInterfaceDeviceAlias *r)
380 p->rng_fault_state = true;
381 return WERR_NOT_SUPPORTED;
384 /****************************************************************
385 ****************************************************************/
387 WERROR _PNP_GetInterfaceDeviceList(pipes_struct *p,
388 struct PNP_GetInterfaceDeviceList *r)
390 p->rng_fault_state = true;
391 return WERR_NOT_SUPPORTED;
394 /****************************************************************
395 ****************************************************************/
397 WERROR _PNP_GetInterfaceDeviceListSize(pipes_struct *p,
398 struct PNP_GetInterfaceDeviceListSize *r)
400 p->rng_fault_state = true;
401 return WERR_NOT_SUPPORTED;
404 /****************************************************************
405 ****************************************************************/
407 WERROR _PNP_RegisterDeviceClassAssociation(pipes_struct *p,
408 struct PNP_RegisterDeviceClassAssociation *r)
410 p->rng_fault_state = true;
411 return WERR_NOT_SUPPORTED;
414 /****************************************************************
415 ****************************************************************/
417 WERROR _PNP_UnregisterDeviceClassAssociation(pipes_struct *p,
418 struct PNP_UnregisterDeviceClassAssociation *r)
420 p->rng_fault_state = true;
421 return WERR_NOT_SUPPORTED;
424 /****************************************************************
425 ****************************************************************/
427 WERROR _PNP_GetClassRegProp(pipes_struct *p,
428 struct PNP_GetClassRegProp *r)
430 p->rng_fault_state = true;
431 return WERR_NOT_SUPPORTED;
434 /****************************************************************
435 ****************************************************************/
437 WERROR _PNP_SetClassRegProp(pipes_struct *p,
438 struct PNP_SetClassRegProp *r)
440 p->rng_fault_state = true;
441 return WERR_NOT_SUPPORTED;
444 /****************************************************************
445 ****************************************************************/
447 WERROR _PNP_CreateDevInst(pipes_struct *p,
448 struct PNP_CreateDevInst *r)
450 p->rng_fault_state = true;
451 return WERR_NOT_SUPPORTED;
454 /****************************************************************
455 ****************************************************************/
457 WERROR _PNP_DeviceInstanceAction(pipes_struct *p,
458 struct PNP_DeviceInstanceAction *r)
460 p->rng_fault_state = true;
461 return WERR_NOT_SUPPORTED;
464 /****************************************************************
465 ****************************************************************/
467 WERROR _PNP_GetDeviceStatus(pipes_struct *p,
468 struct PNP_GetDeviceStatus *r)
470 p->rng_fault_state = true;
471 return WERR_NOT_SUPPORTED;
474 /****************************************************************
475 ****************************************************************/
477 WERROR _PNP_SetDeviceProblem(pipes_struct *p,
478 struct PNP_SetDeviceProblem *r)
480 p->rng_fault_state = true;
481 return WERR_NOT_SUPPORTED;
484 /****************************************************************
485 ****************************************************************/
487 WERROR _PNP_DisableDevInst(pipes_struct *p,
488 struct PNP_DisableDevInst *r)
490 p->rng_fault_state = true;
491 return WERR_NOT_SUPPORTED;
494 /****************************************************************
495 ****************************************************************/
497 WERROR _PNP_UninstallDevInst(pipes_struct *p,
498 struct PNP_UninstallDevInst *r)
500 p->rng_fault_state = true;
501 return WERR_NOT_SUPPORTED;
504 /****************************************************************
505 ****************************************************************/
507 WERROR _PNP_AddID(pipes_struct *p,
508 struct PNP_AddID *r)
510 p->rng_fault_state = true;
511 return WERR_NOT_SUPPORTED;
514 /****************************************************************
515 ****************************************************************/
517 WERROR _PNP_RegisterDriver(pipes_struct *p,
518 struct PNP_RegisterDriver *r)
520 p->rng_fault_state = true;
521 return WERR_NOT_SUPPORTED;
524 /****************************************************************
525 ****************************************************************/
527 WERROR _PNP_QueryRemove(pipes_struct *p,
528 struct PNP_QueryRemove *r)
530 p->rng_fault_state = true;
531 return WERR_NOT_SUPPORTED;
534 /****************************************************************
535 ****************************************************************/
537 WERROR _PNP_RequestDeviceEject(pipes_struct *p,
538 struct PNP_RequestDeviceEject *r)
540 p->rng_fault_state = true;
541 return WERR_NOT_SUPPORTED;
544 /****************************************************************
545 ****************************************************************/
547 WERROR _PNP_IsDockStationPresent(pipes_struct *p,
548 struct PNP_IsDockStationPresent *r)
550 p->rng_fault_state = true;
551 return WERR_NOT_SUPPORTED;
554 /****************************************************************
555 ****************************************************************/
557 WERROR _PNP_RequestEjectPC(pipes_struct *p,
558 struct PNP_RequestEjectPC *r)
560 p->rng_fault_state = true;
561 return WERR_NOT_SUPPORTED;
564 /****************************************************************
565 ****************************************************************/
567 WERROR _PNP_AddEmptyLogConf(pipes_struct *p,
568 struct PNP_AddEmptyLogConf *r)
570 p->rng_fault_state = true;
571 return WERR_NOT_SUPPORTED;
574 /****************************************************************
575 ****************************************************************/
577 WERROR _PNP_FreeLogConf(pipes_struct *p,
578 struct PNP_FreeLogConf *r)
580 p->rng_fault_state = true;
581 return WERR_NOT_SUPPORTED;
584 /****************************************************************
585 ****************************************************************/
587 WERROR _PNP_GetFirstLogConf(pipes_struct *p,
588 struct PNP_GetFirstLogConf *r)
590 p->rng_fault_state = true;
591 return WERR_NOT_SUPPORTED;
594 /****************************************************************
595 ****************************************************************/
597 WERROR _PNP_GetNextLogConf(pipes_struct *p,
598 struct PNP_GetNextLogConf *r)
600 p->rng_fault_state = true;
601 return WERR_NOT_SUPPORTED;
604 /****************************************************************
605 ****************************************************************/
607 WERROR _PNP_GetLogConfPriority(pipes_struct *p,
608 struct PNP_GetLogConfPriority *r)
610 p->rng_fault_state = true;
611 return WERR_NOT_SUPPORTED;
614 /****************************************************************
615 ****************************************************************/
617 WERROR _PNP_AddResDes(pipes_struct *p,
618 struct PNP_AddResDes *r)
620 p->rng_fault_state = true;
621 return WERR_NOT_SUPPORTED;
624 /****************************************************************
625 ****************************************************************/
627 WERROR _PNP_FreeResDes(pipes_struct *p,
628 struct PNP_FreeResDes *r)
630 p->rng_fault_state = true;
631 return WERR_NOT_SUPPORTED;
634 /****************************************************************
635 ****************************************************************/
637 WERROR _PNP_GetNextResDes(pipes_struct *p,
638 struct PNP_GetNextResDes *r)
640 p->rng_fault_state = true;
641 return WERR_NOT_SUPPORTED;
644 /****************************************************************
645 ****************************************************************/
647 WERROR _PNP_GetResDesData(pipes_struct *p,
648 struct PNP_GetResDesData *r)
650 p->rng_fault_state = true;
651 return WERR_NOT_SUPPORTED;
654 /****************************************************************
655 ****************************************************************/
657 WERROR _PNP_GetResDesDataSize(pipes_struct *p,
658 struct PNP_GetResDesDataSize *r)
660 p->rng_fault_state = true;
661 return WERR_NOT_SUPPORTED;
664 /****************************************************************
665 ****************************************************************/
667 WERROR _PNP_ModifyResDes(pipes_struct *p,
668 struct PNP_ModifyResDes *r)
670 p->rng_fault_state = true;
671 return WERR_NOT_SUPPORTED;
674 /****************************************************************
675 ****************************************************************/
677 WERROR _PNP_DetectResourceLimit(pipes_struct *p,
678 struct PNP_DetectResourceLimit *r)
680 p->rng_fault_state = true;
681 return WERR_NOT_SUPPORTED;
684 /****************************************************************
685 ****************************************************************/
687 WERROR _PNP_QueryResConfList(pipes_struct *p,
688 struct PNP_QueryResConfList *r)
690 p->rng_fault_state = true;
691 return WERR_NOT_SUPPORTED;
694 /****************************************************************
695 ****************************************************************/
697 WERROR _PNP_SetHwProf(pipes_struct *p,
698 struct PNP_SetHwProf *r)
700 p->rng_fault_state = true;
701 return WERR_NOT_SUPPORTED;
704 /****************************************************************
705 ****************************************************************/
707 WERROR _PNP_QueryArbitratorFreeData(pipes_struct *p,
708 struct PNP_QueryArbitratorFreeData *r)
710 p->rng_fault_state = true;
711 return WERR_NOT_SUPPORTED;
714 /****************************************************************
715 ****************************************************************/
717 WERROR _PNP_QueryArbitratorFreeSize(pipes_struct *p,
718 struct PNP_QueryArbitratorFreeSize *r)
720 p->rng_fault_state = true;
721 return WERR_NOT_SUPPORTED;
724 /****************************************************************
725 ****************************************************************/
727 WERROR _PNP_RunDetection(pipes_struct *p,
728 struct PNP_RunDetection *r)
730 p->rng_fault_state = true;
731 return WERR_NOT_SUPPORTED;
734 /****************************************************************
735 ****************************************************************/
737 WERROR _PNP_RegisterNotification(pipes_struct *p,
738 struct PNP_RegisterNotification *r)
740 p->rng_fault_state = true;
741 return WERR_NOT_SUPPORTED;
744 /****************************************************************
745 ****************************************************************/
747 WERROR _PNP_UnregisterNotification(pipes_struct *p,
748 struct PNP_UnregisterNotification *r)
750 p->rng_fault_state = true;
751 return WERR_NOT_SUPPORTED;
754 /****************************************************************
755 ****************************************************************/
757 WERROR _PNP_GetCustomDevProp(pipes_struct *p,
758 struct PNP_GetCustomDevProp *r)
760 p->rng_fault_state = true;
761 return WERR_NOT_SUPPORTED;
764 /****************************************************************
765 ****************************************************************/
767 WERROR _PNP_GetVersionInternal(pipes_struct *p,
768 struct PNP_GetVersionInternal *r)
770 p->rng_fault_state = true;
771 return WERR_NOT_SUPPORTED;
774 /****************************************************************
775 ****************************************************************/
777 WERROR _PNP_GetBlockedDriverInfo(pipes_struct *p,
778 struct PNP_GetBlockedDriverInfo *r)
780 p->rng_fault_state = true;
781 return WERR_NOT_SUPPORTED;
784 /****************************************************************
785 ****************************************************************/
787 WERROR _PNP_GetServerSideDeviceInstallFlags(pipes_struct *p,
788 struct PNP_GetServerSideDeviceInstallFlags *r)
790 p->rng_fault_state = true;
791 return WERR_NOT_SUPPORTED;