2 Unix SMB/CIFS implementation.
4 endpoint server for the srvsvc pipe
6 Copyright (C) Stefan (metze) Metzmacher 2004-2006
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 "ntvfs/ntvfs.h"
25 #include "rpc_server/dcerpc_server.h"
26 #include "librpc/gen_ndr/ndr_srvsvc.h"
27 #include "rpc_server/common/common.h"
28 #include "auth/auth.h"
29 #include "libcli/security/security.h"
30 #include "system/time.h"
31 #include "rpc_server/srvsvc/proto.h"
33 #define SRVSVC_CHECK_ADMIN_ACCESS do { \
34 struct security_token *t = dce_call->conn->auth_state.session_info->security_token; \
35 if (!security_token_has_builtin_administrators(t) && \
36 !security_token_has_sid_string(t, SID_BUILTIN_SERVER_OPERATORS)) { \
37 return WERR_ACCESS_DENIED; \
44 static WERROR srvsvc_NetCharDevEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
45 struct srvsvc_NetCharDevEnum *r)
47 r->out.level = r->in.level;
48 r->out.totalentries = 0;
49 r->out.resume_handle = NULL;
51 switch (r->in.level) {
53 r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr0);
54 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
56 r->out.ctr.ctr0->count = 0;
57 r->out.ctr.ctr0->array = NULL;
59 return WERR_NOT_SUPPORTED;
62 r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevCtr1);
63 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
65 r->out.ctr.ctr1->count = 0;
66 r->out.ctr.ctr1->array = NULL;
68 return WERR_NOT_SUPPORTED;
71 return WERR_UNKNOWN_LEVEL;
79 srvsvc_NetCharDevGetInfo
81 static WERROR srvsvc_NetCharDevGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
82 struct srvsvc_NetCharDevGetInfo *r)
86 switch (r->in.level) {
89 return WERR_NOT_SUPPORTED;
93 return WERR_NOT_SUPPORTED;
96 return WERR_UNKNOWN_LEVEL;
99 return WERR_UNKNOWN_LEVEL;
104 srvsvc_NetCharDevControl
106 static WERROR srvsvc_NetCharDevControl(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
107 struct srvsvc_NetCharDevControl *r)
109 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
114 srvsvc_NetCharDevQEnum
116 static WERROR srvsvc_NetCharDevQEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
117 struct srvsvc_NetCharDevQEnum *r)
119 r->out.level = r->in.level;
120 r->out.totalentries = 0;
121 r->out.resume_handle = NULL;
123 switch (r->in.level) {
126 r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr0);
127 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
129 r->out.ctr.ctr0->count = 0;
130 r->out.ctr.ctr0->array = NULL;
132 return WERR_NOT_SUPPORTED;
136 r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetCharDevQCtr1);
137 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
139 r->out.ctr.ctr1->count = 0;
140 r->out.ctr.ctr1->array = NULL;
142 return WERR_NOT_SUPPORTED;
145 return WERR_UNKNOWN_LEVEL;
148 return WERR_UNKNOWN_LEVEL;
153 srvsvc_NetCharDevQGetInfo
155 static WERROR srvsvc_NetCharDevQGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
156 struct srvsvc_NetCharDevQGetInfo *r)
160 switch (r->in.level) {
163 return WERR_NOT_SUPPORTED;
167 return WERR_NOT_SUPPORTED;
170 return WERR_UNKNOWN_LEVEL;
173 return WERR_UNKNOWN_LEVEL;
178 srvsvc_NetCharDevQSetInfo
180 static WERROR srvsvc_NetCharDevQSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
181 struct srvsvc_NetCharDevQSetInfo *r)
183 switch (r->in.level) {
186 if (r->in.parm_error) {
187 r->out.parm_error = r->in.parm_error;
189 return WERR_NOT_SUPPORTED;
193 if (r->in.parm_error) {
194 r->out.parm_error = r->in.parm_error;
196 return WERR_NOT_SUPPORTED;
199 return WERR_UNKNOWN_LEVEL;
202 return WERR_UNKNOWN_LEVEL;
207 srvsvc_NetCharDevQPurge
209 static WERROR srvsvc_NetCharDevQPurge(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
210 struct srvsvc_NetCharDevQPurge *r)
212 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
217 srvsvc_NetCharDevQPurgeSelf
219 static WERROR srvsvc_NetCharDevQPurgeSelf(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
220 struct srvsvc_NetCharDevQPurgeSelf *r)
222 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
229 static WERROR srvsvc_NetConnEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
230 struct srvsvc_NetConnEnum *r)
232 r->out.level = r->in.level;
233 r->out.totalentries = 0;
234 r->out.resume_handle = NULL;
236 switch (r->in.level) {
239 r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetConnCtr0);
240 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
242 r->out.ctr.ctr0->count = 0;
243 r->out.ctr.ctr0->array = NULL;
245 return WERR_NOT_SUPPORTED;
249 r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetConnCtr1);
250 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
252 r->out.ctr.ctr1->count = 0;
253 r->out.ctr.ctr1->array = NULL;
255 return WERR_NOT_SUPPORTED;
258 return WERR_UNKNOWN_LEVEL;
261 return WERR_UNKNOWN_LEVEL;
268 static WERROR srvsvc_NetFileEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
269 struct srvsvc_NetFileEnum *r)
271 r->out.level = r->in.level;
272 r->out.totalentries = 0;
273 r->out.resume_handle = NULL;
275 switch (r->in.level) {
278 r->out.ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetFileCtr2);
279 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr2);
281 r->out.ctr.ctr2->count = 0;
282 r->out.ctr.ctr2->array = NULL;
284 return WERR_NOT_SUPPORTED;
288 r->out.ctr.ctr3 = talloc(mem_ctx, struct srvsvc_NetFileCtr3);
289 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr3);
291 r->out.ctr.ctr3->count = 0;
292 r->out.ctr.ctr3->array = NULL;
294 return WERR_NOT_SUPPORTED;
297 return WERR_UNKNOWN_LEVEL;
300 return WERR_UNKNOWN_LEVEL;
305 srvsvc_NetFileGetInfo
307 static WERROR srvsvc_NetFileGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
308 struct srvsvc_NetFileGetInfo *r)
312 switch (r->in.level) {
315 return WERR_NOT_SUPPORTED;
319 return WERR_NOT_SUPPORTED;
322 return WERR_UNKNOWN_LEVEL;
325 return WERR_UNKNOWN_LEVEL;
332 static WERROR srvsvc_NetFileClose(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
333 struct srvsvc_NetFileClose *r)
335 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
342 static WERROR srvsvc_NetSessEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
343 struct srvsvc_NetSessEnum *r)
345 r->out.level = r->in.level;
346 r->out.totalentries = 0;
347 r->out.resume_handle = NULL;
349 switch (r->in.level) {
352 r->out.ctr.ctr0 = talloc(mem_ctx, struct srvsvc_NetSessCtr0);
353 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr0);
355 r->out.ctr.ctr0->count = 0;
356 r->out.ctr.ctr0->array = NULL;
358 return WERR_NOT_SUPPORTED;
362 r->out.ctr.ctr1 = talloc(mem_ctx, struct srvsvc_NetSessCtr1);
363 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr1);
365 r->out.ctr.ctr1->count = 0;
366 r->out.ctr.ctr1->array = NULL;
368 return WERR_NOT_SUPPORTED;
372 r->out.ctr.ctr2 = talloc(mem_ctx, struct srvsvc_NetSessCtr2);
373 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr2);
375 r->out.ctr.ctr2->count = 0;
376 r->out.ctr.ctr2->array = NULL;
378 return WERR_NOT_SUPPORTED;
382 r->out.ctr.ctr10 = talloc(mem_ctx, struct srvsvc_NetSessCtr10);
383 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr10);
385 r->out.ctr.ctr2->count = 0;
386 r->out.ctr.ctr2->array = NULL;
388 return WERR_NOT_SUPPORTED;
392 r->out.ctr.ctr502 = talloc(mem_ctx, struct srvsvc_NetSessCtr502);
393 W_ERROR_HAVE_NO_MEMORY(r->out.ctr.ctr502);
395 r->out.ctr.ctr2->count = 0;
396 r->out.ctr.ctr2->array = NULL;
398 return WERR_NOT_SUPPORTED;
401 return WERR_UNKNOWN_LEVEL;
404 return WERR_UNKNOWN_LEVEL;
411 static WERROR srvsvc_NetSessDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
412 struct srvsvc_NetSessDel *r)
414 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
421 static WERROR srvsvc_NetShareAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
422 struct srvsvc_NetShareAdd *r)
424 switch (r->in.level) {
427 if (r->in.parm_error) {
428 r->out.parm_error = r->in.parm_error;
430 return WERR_NOT_SUPPORTED;
434 if (r->in.parm_error) {
435 r->out.parm_error = r->in.parm_error;
437 return WERR_NOT_SUPPORTED;
441 if (r->in.parm_error) {
442 r->out.parm_error = r->in.parm_error;
444 return WERR_NOT_SUPPORTED;
448 if (r->in.parm_error) {
449 r->out.parm_error = r->in.parm_error;
451 return WERR_NOT_SUPPORTED;
455 if (r->in.parm_error) {
456 r->out.parm_error = r->in.parm_error;
458 return WERR_NOT_SUPPORTED;
461 return WERR_UNKNOWN_LEVEL;
464 return WERR_UNKNOWN_LEVEL;
467 static WERROR srvsvc_fiel_ShareInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
468 struct share_config *scfg, uint32_t level,
469 union srvsvc_NetShareInfo *info)
471 struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
476 info->info0->name = talloc_strdup(mem_ctx, scfg->name);
477 W_ERROR_HAVE_NO_MEMORY(info->info0->name);
483 info->info1->name = talloc_strdup(mem_ctx, scfg->name);
484 W_ERROR_HAVE_NO_MEMORY(info->info1->name);
485 info->info1->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
486 info->info1->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, ""));
487 W_ERROR_HAVE_NO_MEMORY(info->info1->comment);
493 info->info2->name = talloc_strdup(mem_ctx, scfg->name);
494 W_ERROR_HAVE_NO_MEMORY(info->info2->name);
495 info->info2->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
496 info->info2->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, ""));
497 W_ERROR_HAVE_NO_MEMORY(info->info2->comment);
498 info->info2->permissions = dcesrv_common_get_share_permissions(mem_ctx, dce_ctx, scfg);
499 info->info2->max_users = share_int_option(scfg, SHARE_MAX_CONNECTIONS, SHARE_MAX_CONNECTIONS_DEFAULT);
500 info->info2->current_users = dcesrv_common_get_share_current_users(mem_ctx, dce_ctx, scfg);
501 info->info2->path = dcesrv_common_get_share_path(mem_ctx, dce_ctx, scfg);
502 W_ERROR_HAVE_NO_MEMORY(info->info2->path);
503 info->info2->password = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PASSWORD, NULL));
509 info->info501->name = talloc_strdup(mem_ctx, scfg->name);
510 W_ERROR_HAVE_NO_MEMORY(info->info501->name);
511 info->info501->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
512 info->info501->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, ""));
513 W_ERROR_HAVE_NO_MEMORY(info->info501->comment);
514 info->info501->csc_policy = share_int_option(scfg, SHARE_CSC_POLICY, SHARE_CSC_POLICY_DEFAULT);
520 info->info502->name = talloc_strdup(mem_ctx, scfg->name);
521 W_ERROR_HAVE_NO_MEMORY(info->info502->name);
522 info->info502->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
523 info->info502->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, ""));
524 W_ERROR_HAVE_NO_MEMORY(info->info502->comment);
525 info->info502->permissions = dcesrv_common_get_share_permissions(mem_ctx, dce_ctx, scfg);
526 info->info502->max_users = share_int_option(scfg, SHARE_MAX_CONNECTIONS, SHARE_MAX_CONNECTIONS_DEFAULT);
527 info->info502->current_users = dcesrv_common_get_share_current_users(mem_ctx, dce_ctx, scfg);
528 info->info502->path = dcesrv_common_get_share_path(mem_ctx, dce_ctx, scfg);
529 W_ERROR_HAVE_NO_MEMORY(info->info502->path);
530 info->info502->password = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PASSWORD, NULL));
531 info->info502->unknown = dcesrv_common_get_share_unknown(mem_ctx, dce_ctx, scfg);
532 info->info502->sd = dcesrv_common_get_security_descriptor(mem_ctx, dce_ctx, scfg);
538 info->info1005->dfs_flags = dcesrv_common_get_share_dfs_flags(mem_ctx, dce_ctx, scfg);
543 return WERR_UNKNOWN_LEVEL;
546 return WERR_UNKNOWN_LEVEL;
550 srvsvc_NetShareEnumAll
552 static WERROR srvsvc_NetShareEnumAll(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
553 struct srvsvc_NetShareEnumAll *r)
558 struct share_context *sctx;
559 struct share_config *scfg;
561 r->out.level = r->in.level;
562 ZERO_STRUCT(r->out.ctr);
563 r->out.totalentries = 0;
564 r->out.resume_handle = NULL;
566 /* TODO: - paging of results
569 nterr = share_get_context(mem_ctx, &sctx);
570 if (!NT_STATUS_IS_OK(nterr)) {
571 return ntstatus_to_werror(nterr);
574 nterr = share_list_all(mem_ctx, sctx, &numshares, &snames);
575 if (!NT_STATUS_IS_OK(nterr)) {
576 return ntstatus_to_werror(nterr);
579 switch (r->in.level) {
583 struct srvsvc_NetShareCtr0 *ctr0;
585 ctr0 = talloc(mem_ctx, struct srvsvc_NetShareCtr0);
586 W_ERROR_HAVE_NO_MEMORY(ctr0);
588 ctr0->count = numshares;
591 if (ctr0->count == 0) {
592 r->out.ctr.ctr0 = ctr0;
596 ctr0->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo0, ctr0->count);
597 W_ERROR_HAVE_NO_MEMORY(ctr0->array);
599 for (i = 0; i < ctr0->count; i++) {
601 union srvsvc_NetShareInfo info;
603 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
604 if (!NT_STATUS_IS_OK(nterr)) {
605 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
606 return WERR_GENERAL_FAILURE;
608 info.info0 = &ctr0->array[i];
609 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
610 if (!W_ERROR_IS_OK(status)) {
617 r->out.ctr.ctr0 = ctr0;
618 r->out.totalentries = r->out.ctr.ctr0->count;
624 struct srvsvc_NetShareCtr1 *ctr1;
626 ctr1 = talloc(mem_ctx, struct srvsvc_NetShareCtr1);
627 W_ERROR_HAVE_NO_MEMORY(ctr1);
629 ctr1->count = numshares;
632 if (ctr1->count == 0) {
633 r->out.ctr.ctr1 = ctr1;
637 ctr1->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo1, ctr1->count);
638 W_ERROR_HAVE_NO_MEMORY(ctr1->array);
640 for (i=0; i < ctr1->count; i++) {
642 union srvsvc_NetShareInfo info;
644 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
645 if (!NT_STATUS_IS_OK(nterr)) {
646 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
647 return WERR_GENERAL_FAILURE;
649 info.info1 = &ctr1->array[i];
650 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
651 if (!W_ERROR_IS_OK(status)) {
658 r->out.ctr.ctr1 = ctr1;
659 r->out.totalentries = r->out.ctr.ctr1->count;
665 struct srvsvc_NetShareCtr2 *ctr2;
667 SRVSVC_CHECK_ADMIN_ACCESS;
669 ctr2 = talloc(mem_ctx, struct srvsvc_NetShareCtr2);
670 W_ERROR_HAVE_NO_MEMORY(ctr2);
672 ctr2->count = numshares;
675 if (ctr2->count == 0) {
676 r->out.ctr.ctr2 = ctr2;
680 ctr2->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo2, ctr2->count);
681 W_ERROR_HAVE_NO_MEMORY(ctr2->array);
683 for (i=0; i < ctr2->count; i++) {
685 union srvsvc_NetShareInfo info;
687 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
688 if (!NT_STATUS_IS_OK(nterr)) {
689 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
690 return WERR_GENERAL_FAILURE;
692 info.info2 = &ctr2->array[i];
693 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
694 if (!W_ERROR_IS_OK(status)) {
701 r->out.ctr.ctr2 = ctr2;
702 r->out.totalentries = r->out.ctr.ctr2->count;
708 struct srvsvc_NetShareCtr501 *ctr501;
710 SRVSVC_CHECK_ADMIN_ACCESS;
712 ctr501 = talloc(mem_ctx, struct srvsvc_NetShareCtr501);
713 W_ERROR_HAVE_NO_MEMORY(ctr501);
715 ctr501->count = numshares;
716 ctr501->array = NULL;
718 if (ctr501->count == 0) {
719 r->out.ctr.ctr501 = ctr501;
723 ctr501->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo501, ctr501->count);
724 W_ERROR_HAVE_NO_MEMORY(ctr501->array);
726 for (i=0; i < ctr501->count; i++) {
728 union srvsvc_NetShareInfo info;
730 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
731 if (!NT_STATUS_IS_OK(nterr)) {
732 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
733 return WERR_GENERAL_FAILURE;
735 info.info501 = &ctr501->array[i];
736 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
737 if (!W_ERROR_IS_OK(status)) {
744 r->out.ctr.ctr501 = ctr501;
745 r->out.totalentries = r->out.ctr.ctr501->count;
751 struct srvsvc_NetShareCtr502 *ctr502;
753 SRVSVC_CHECK_ADMIN_ACCESS;
755 ctr502 = talloc(mem_ctx, struct srvsvc_NetShareCtr502);
756 W_ERROR_HAVE_NO_MEMORY(ctr502);
758 ctr502->count = numshares;
759 ctr502->array = NULL;
761 if (ctr502->count == 0) {
762 r->out.ctr.ctr502 = ctr502;
766 ctr502->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo502, ctr502->count);
767 W_ERROR_HAVE_NO_MEMORY(ctr502->array);
769 for (i=0; i < ctr502->count; i++) {
771 union srvsvc_NetShareInfo info;
773 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
774 if (!NT_STATUS_IS_OK(nterr)) {
775 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
776 return WERR_GENERAL_FAILURE;
778 info.info502 = &ctr502->array[i];
779 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
780 if (!W_ERROR_IS_OK(status)) {
787 r->out.ctr.ctr502 = ctr502;
788 r->out.totalentries = r->out.ctr.ctr502->count;
792 return WERR_UNKNOWN_LEVEL;
795 return WERR_UNKNOWN_LEVEL;
800 srvsvc_NetShareGetInfo
802 static WERROR srvsvc_NetShareGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
803 struct srvsvc_NetShareGetInfo *r)
806 struct share_context *sctx = NULL;
807 struct share_config *scfg = NULL;
811 /* TODO: - access check
814 if (strcmp("", r->in.share_name) == 0) {
815 return WERR_INVALID_PARAM;
818 nterr = share_get_context(mem_ctx, &sctx);
819 if (!NT_STATUS_IS_OK(nterr)) {
820 return ntstatus_to_werror(nterr);
823 nterr = share_get_config(mem_ctx, sctx, r->in.share_name, &scfg);
824 if (!NT_STATUS_IS_OK(nterr)) {
825 return ntstatus_to_werror(nterr);
828 switch (r->in.level) {
832 union srvsvc_NetShareInfo info;
834 info.info0 = talloc(mem_ctx, struct srvsvc_NetShareInfo0);
835 W_ERROR_HAVE_NO_MEMORY(info.info0);
837 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
838 if (!W_ERROR_IS_OK(status)) {
842 r->out.info.info0 = info.info0;
848 union srvsvc_NetShareInfo info;
850 info.info1 = talloc(mem_ctx, struct srvsvc_NetShareInfo1);
851 W_ERROR_HAVE_NO_MEMORY(info.info1);
853 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
854 if (!W_ERROR_IS_OK(status)) {
858 r->out.info.info1 = info.info1;
864 union srvsvc_NetShareInfo info;
866 SRVSVC_CHECK_ADMIN_ACCESS;
868 info.info2 = talloc(mem_ctx, struct srvsvc_NetShareInfo2);
869 W_ERROR_HAVE_NO_MEMORY(info.info2);
871 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
872 if (!W_ERROR_IS_OK(status)) {
876 r->out.info.info2 = info.info2;
882 union srvsvc_NetShareInfo info;
884 info.info501 = talloc(mem_ctx, struct srvsvc_NetShareInfo501);
885 W_ERROR_HAVE_NO_MEMORY(info.info501);
887 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
888 if (!W_ERROR_IS_OK(status)) {
892 r->out.info.info501 = info.info501;
898 union srvsvc_NetShareInfo info;
900 SRVSVC_CHECK_ADMIN_ACCESS;
902 info.info502 = talloc(mem_ctx, struct srvsvc_NetShareInfo502);
903 W_ERROR_HAVE_NO_MEMORY(info.info502);
905 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
906 if (!W_ERROR_IS_OK(status)) {
910 r->out.info.info502 = info.info502;
916 union srvsvc_NetShareInfo info;
918 info.info1005 = talloc(mem_ctx, struct srvsvc_NetShareInfo1005);
919 W_ERROR_HAVE_NO_MEMORY(info.info1005);
921 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
922 if (!W_ERROR_IS_OK(status)) {
926 r->out.info.info1005 = info.info1005;
930 return WERR_UNKNOWN_LEVEL;
933 return WERR_UNKNOWN_LEVEL;
938 srvsvc_NetShareSetInfo
940 static WERROR srvsvc_NetShareSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
941 struct srvsvc_NetShareSetInfo *r)
943 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
948 srvsvc_NetShareDelSticky
950 static WERROR srvsvc_NetShareDelSticky(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
951 struct srvsvc_NetShareDelSticky *r)
953 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
960 static WERROR srvsvc_NetShareCheck(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
961 struct srvsvc_NetShareCheck *r)
965 /* TODO: - access check
968 if (strcmp("", r->in.device_name) == 0) {
969 r->out.type = STYPE_IPC;
973 if (strcmp("C:\\", r->in.device_name) == 0) {
974 r->out.type = STYPE_DISKTREE;
978 /* TODO: - lookup the share be devicename (path) */
979 return WERR_DEVICE_NOT_SHARED;
986 static WERROR srvsvc_NetSrvGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
987 struct srvsvc_NetSrvGetInfo *r)
989 struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
993 switch (r->in.level) {
996 struct srvsvc_NetSrvInfo100 *info100;
998 info100 = talloc(mem_ctx, struct srvsvc_NetSrvInfo100);
999 W_ERROR_HAVE_NO_MEMORY(info100);
1001 info100->platform_id = dcesrv_common_get_platform_id(mem_ctx, dce_ctx);
1002 info100->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, r->in.server_unc);
1003 W_ERROR_HAVE_NO_MEMORY(info100->server_name);
1005 r->out.info.info100 = info100;
1010 struct srvsvc_NetSrvInfo101 *info101;
1012 info101 = talloc(mem_ctx, struct srvsvc_NetSrvInfo101);
1013 W_ERROR_HAVE_NO_MEMORY(info101);
1015 info101->platform_id = dcesrv_common_get_platform_id(mem_ctx, dce_ctx);
1016 info101->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, r->in.server_unc);
1017 W_ERROR_HAVE_NO_MEMORY(info101->server_name);
1019 info101->version_major = dcesrv_common_get_version_major(mem_ctx, dce_ctx);
1020 info101->version_minor = dcesrv_common_get_version_minor(mem_ctx, dce_ctx);
1021 info101->server_type = dcesrv_common_get_server_type(mem_ctx, dce_ctx);
1022 info101->comment = talloc_strdup(mem_ctx, lp_serverstring());
1023 W_ERROR_HAVE_NO_MEMORY(info101->comment);
1025 r->out.info.info101 = info101;
1029 return WERR_UNKNOWN_LEVEL;
1032 return WERR_UNKNOWN_LEVEL;
1037 srvsvc_NetSrvSetInfo
1039 static WERROR srvsvc_NetSrvSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1040 struct srvsvc_NetSrvSetInfo *r)
1042 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1049 static WERROR srvsvc_NetDiskEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1050 struct srvsvc_NetDiskEnum *r)
1052 r->out.disks.discs = NULL;
1053 r->out.disks.count = 0;
1054 r->out.totalentries = 0;
1055 r->out.resume_handle = NULL;
1057 switch (r->in.level) {
1060 return WERR_NOT_SUPPORTED;
1063 return WERR_UNKNOWN_LEVEL;
1066 return WERR_UNKNOWN_LEVEL;
1071 srvsvc_NetServerStatisticsGet
1073 static WERROR srvsvc_NetServerStatisticsGet(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1074 struct srvsvc_NetServerStatisticsGet *r)
1076 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1081 srvsvc_NetTransportAdd
1083 static WERROR srvsvc_NetTransportAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1084 struct srvsvc_NetTransportAdd *r)
1086 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1091 srvsvc_NetTransportEnum
1093 static WERROR srvsvc_NetTransportEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1094 struct srvsvc_NetTransportEnum *r)
1096 r->out.level = r->in.level;
1097 r->out.totalentries = 0;
1098 r->out.resume_handle = NULL;
1100 switch (r->in.level) {
1103 r->out.transports.ctr0 = talloc(mem_ctx, struct srvsvc_NetTransportCtr0);
1104 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr0);
1106 r->out.transports.ctr0->count = 0;
1107 r->out.transports.ctr0->array = NULL;
1109 return WERR_NOT_SUPPORTED;
1113 r->out.transports.ctr1 = talloc(mem_ctx, struct srvsvc_NetTransportCtr1);
1114 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr1);
1116 r->out.transports.ctr1->count = 0;
1117 r->out.transports.ctr1->array = NULL;
1119 return WERR_NOT_SUPPORTED;
1123 r->out.transports.ctr2 = talloc(mem_ctx, struct srvsvc_NetTransportCtr2);
1124 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr2);
1126 r->out.transports.ctr2->count = 0;
1127 r->out.transports.ctr2->array = NULL;
1129 return WERR_NOT_SUPPORTED;
1133 r->out.transports.ctr3 = talloc(mem_ctx, struct srvsvc_NetTransportCtr3);
1134 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr3);
1136 r->out.transports.ctr3->count = 0;
1137 r->out.transports.ctr3->array = NULL;
1139 return WERR_NOT_SUPPORTED;
1142 return WERR_UNKNOWN_LEVEL;
1145 return WERR_UNKNOWN_LEVEL;
1149 srvsvc_NetTransportDel
1151 static WERROR srvsvc_NetTransportDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1152 struct srvsvc_NetTransportDel *r)
1154 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1161 static WERROR srvsvc_NetRemoteTOD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1162 struct srvsvc_NetRemoteTOD *r)
1164 struct timeval tval;
1168 r->out.info = talloc(mem_ctx, struct srvsvc_NetRemoteTODInfo);
1169 W_ERROR_HAVE_NO_MEMORY(r->out.info);
1171 GetTimeOfDay(&tval);
1176 r->out.info->elapsed = t;
1177 /* TODO: fake the uptime: just return the milliseconds till 0:00:00 today */
1178 r->out.info->msecs = (tm.tm_hour*60*60*1000)
1179 + (tm.tm_min*60*1000)
1181 + (tval.tv_usec/1000);
1182 r->out.info->hours = tm.tm_hour;
1183 r->out.info->mins = tm.tm_min;
1184 r->out.info->secs = tm.tm_sec;
1185 r->out.info->hunds = tval.tv_usec/10000;
1186 r->out.info->timezone = get_time_zone(t)/60;
1187 r->out.info->tinterval = 310; /* just return the same as windows */
1188 r->out.info->day = tm.tm_mday;
1189 r->out.info->month = tm.tm_mon + 1;
1190 r->out.info->year = tm.tm_year + 1900;
1191 r->out.info->weekday = tm.tm_wday;
1199 static WERROR srvsvc_NetPathType(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1200 struct srvsvc_NetPathType *r)
1202 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1207 srvsvc_NetPathCanonicalize
1209 static WERROR srvsvc_NetPathCanonicalize(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1210 struct srvsvc_NetPathCanonicalize *r)
1212 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1217 srvsvc_NetPathCompare
1219 static WERROR srvsvc_NetPathCompare(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1220 struct srvsvc_NetPathCompare *r)
1222 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1227 srvsvc_NetNameValidate
1229 static WERROR srvsvc_NetNameValidate(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1230 struct srvsvc_NetNameValidate *r)
1232 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1237 srvsvc_NetPRNameCompare
1239 static WERROR srvsvc_NetPRNameCompare(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1240 struct srvsvc_NetPRNameCompare *r)
1242 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1249 static WERROR srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1250 struct srvsvc_NetShareEnum *r)
1254 const char **snames;
1255 struct share_context *sctx;
1256 struct share_config *scfg;
1257 struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
1259 r->out.level = r->in.level;
1260 ZERO_STRUCT(r->out.ctr);
1261 r->out.totalentries = 0;
1262 r->out.resume_handle = NULL;
1264 /* TODO: - paging of results
1267 nterr = share_get_context(mem_ctx, &sctx);
1268 if (!NT_STATUS_IS_OK(nterr)) {
1269 return ntstatus_to_werror(nterr);
1272 nterr = share_list_all(mem_ctx, sctx, &numshares, &snames);
1273 if (!NT_STATUS_IS_OK(nterr)) {
1274 return ntstatus_to_werror(nterr);
1277 switch (r->in.level) {
1282 struct srvsvc_NetShareCtr0 *ctr0;
1284 ctr0 = talloc(mem_ctx, struct srvsvc_NetShareCtr0);
1285 W_ERROR_HAVE_NO_MEMORY(ctr0);
1288 ctr0->count = count;
1291 if (ctr0->count == 0) {
1292 r->out.ctr.ctr0 = ctr0;
1296 ctr0->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo0, count);
1297 W_ERROR_HAVE_NO_MEMORY(ctr0->array);
1299 for (i=0; i < count; i++) {
1301 union srvsvc_NetShareInfo info;
1302 enum srvsvc_ShareType type;
1304 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1305 if (!NT_STATUS_IS_OK(nterr)) {
1306 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1307 return WERR_GENERAL_FAILURE;
1310 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1311 if (type & STYPE_HIDDEN) {
1317 info.info0 = &ctr0->array[y];
1318 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1319 W_ERROR_NOT_OK_RETURN(status);
1323 talloc_free(snames);
1325 r->out.ctr.ctr0 = ctr0;
1326 r->out.totalentries = r->out.ctr.ctr0->count;
1333 struct srvsvc_NetShareCtr1 *ctr1;
1335 ctr1 = talloc(mem_ctx, struct srvsvc_NetShareCtr1);
1336 W_ERROR_HAVE_NO_MEMORY(ctr1);
1339 ctr1->count = count;
1342 if (ctr1->count == 0) {
1343 r->out.ctr.ctr1 = ctr1;
1347 ctr1->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo1, count);
1348 W_ERROR_HAVE_NO_MEMORY(ctr1->array);
1350 for (i=0; i < count; i++) {
1352 union srvsvc_NetShareInfo info;
1353 enum srvsvc_ShareType type;
1355 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1356 if (!NT_STATUS_IS_OK(nterr)) {
1357 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1358 return WERR_GENERAL_FAILURE;
1361 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1362 if (type & STYPE_HIDDEN) {
1368 info.info1 = &ctr1->array[y];
1369 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1370 W_ERROR_NOT_OK_RETURN(status);
1374 talloc_free(snames);
1376 r->out.ctr.ctr1 = ctr1;
1377 r->out.totalentries = r->out.ctr.ctr1->count;
1384 struct srvsvc_NetShareCtr2 *ctr2;
1386 SRVSVC_CHECK_ADMIN_ACCESS;
1388 ctr2 = talloc(mem_ctx, struct srvsvc_NetShareCtr2);
1389 W_ERROR_HAVE_NO_MEMORY(ctr2);
1392 ctr2->count = count;
1395 if (ctr2->count == 0) {
1396 r->out.ctr.ctr2 = ctr2;
1400 ctr2->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo2, count);
1401 W_ERROR_HAVE_NO_MEMORY(ctr2->array);
1403 for (i=0; i < count; i++) {
1405 union srvsvc_NetShareInfo info;
1406 enum srvsvc_ShareType type;
1408 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1409 if (!NT_STATUS_IS_OK(nterr)) {
1410 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1411 return WERR_GENERAL_FAILURE;
1414 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1415 if (type & STYPE_HIDDEN) {
1421 info.info2 = &ctr2->array[y];
1422 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1423 W_ERROR_NOT_OK_RETURN(status);
1427 talloc_free(snames);
1429 r->out.ctr.ctr2 = ctr2;
1430 r->out.totalentries = r->out.ctr.ctr2->count;
1437 struct srvsvc_NetShareCtr502 *ctr502;
1439 SRVSVC_CHECK_ADMIN_ACCESS;
1441 ctr502 = talloc(mem_ctx, struct srvsvc_NetShareCtr502);
1442 W_ERROR_HAVE_NO_MEMORY(ctr502);
1445 ctr502->count = count;
1446 ctr502->array = NULL;
1448 if (ctr502->count == 0) {
1449 r->out.ctr.ctr502 = ctr502;
1453 ctr502->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo502, count);
1454 W_ERROR_HAVE_NO_MEMORY(ctr502->array);
1456 for (i=0; i < count; i++) {
1458 union srvsvc_NetShareInfo info;
1459 enum srvsvc_ShareType type;
1461 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1462 if (!NT_STATUS_IS_OK(nterr)) {
1463 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1464 return WERR_GENERAL_FAILURE;
1467 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1468 if (type & STYPE_HIDDEN) {
1474 info.info502 = &ctr502->array[y];
1475 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1476 W_ERROR_NOT_OK_RETURN(status);
1480 talloc_free(snames);
1482 r->out.ctr.ctr502 = ctr502;
1483 r->out.totalentries = r->out.ctr.ctr502->count;
1487 return WERR_UNKNOWN_LEVEL;
1490 return WERR_UNKNOWN_LEVEL;
1495 srvsvc_NetShareDelStart
1497 static WERROR srvsvc_NetShareDelStart(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1498 struct srvsvc_NetShareDelStart *r)
1500 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1505 srvsvc_NetShareDelCommit
1507 static WERROR srvsvc_NetShareDelCommit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1508 struct srvsvc_NetShareDelCommit *r)
1510 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1515 srvsvc_NetGetFileSecurity
1517 static WERROR srvsvc_NetGetFileSecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1518 struct srvsvc_NetGetFileSecurity *r)
1520 struct sec_desc_buf *sd_buf;
1521 struct ntvfs_context *ntvfs_ctx = NULL;
1522 struct ntvfs_request *ntvfs_req;
1523 union smb_fileinfo *io;
1526 nt_status = srvsvc_create_ntvfs_context(dce_call, mem_ctx, r->in.share, &ntvfs_ctx);
1527 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1529 ntvfs_req = ntvfs_request_create(ntvfs_ctx, mem_ctx,
1530 dce_call->conn->auth_state.session_info,
1534 W_ERROR_HAVE_NO_MEMORY(ntvfs_req);
1536 sd_buf = talloc(mem_ctx, struct sec_desc_buf);
1537 W_ERROR_HAVE_NO_MEMORY(sd_buf);
1539 io = talloc(mem_ctx, union smb_fileinfo);
1540 W_ERROR_HAVE_NO_MEMORY(io);
1542 io->query_secdesc.level = RAW_FILEINFO_SEC_DESC;
1543 io->query_secdesc.in.file.path = r->in.file;
1544 io->query_secdesc.in.secinfo_flags = r->in.securityinformation;
1546 nt_status = ntvfs_qpathinfo(ntvfs_req, io);
1547 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1549 sd_buf->sd = io->query_secdesc.out.sd;
1551 r->out.sd_buf = sd_buf;
1557 srvsvc_NetSetFileSecurity
1559 static WERROR srvsvc_NetSetFileSecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1560 struct srvsvc_NetSetFileSecurity *r)
1562 struct ntvfs_context *ntvfs_ctx;
1563 struct ntvfs_request *ntvfs_req;
1564 union smb_setfileinfo *io;
1567 nt_status = srvsvc_create_ntvfs_context(dce_call, mem_ctx, r->in.share, &ntvfs_ctx);
1568 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1570 ntvfs_req = ntvfs_request_create(ntvfs_ctx, mem_ctx,
1571 dce_call->conn->auth_state.session_info,
1575 W_ERROR_HAVE_NO_MEMORY(ntvfs_req);
1577 io = talloc(mem_ctx, union smb_setfileinfo);
1578 W_ERROR_HAVE_NO_MEMORY(io);
1580 io->set_secdesc.level = RAW_FILEINFO_SEC_DESC;
1581 io->set_secdesc.in.file.path = r->in.file;
1582 io->set_secdesc.in.secinfo_flags = r->in.securityinformation;
1583 io->set_secdesc.in.sd = r->in.sd_buf.sd;
1585 nt_status = ntvfs_setpathinfo(ntvfs_req, io);
1586 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1593 srvsvc_NetServerTransportAddEx
1595 static WERROR srvsvc_NetServerTransportAddEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1596 struct srvsvc_NetServerTransportAddEx *r)
1598 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1603 srvsvc_NetServerSetServiceBitsEx
1605 static WERROR srvsvc_NetServerSetServiceBitsEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1606 struct srvsvc_NetServerSetServiceBitsEx *r)
1608 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1613 srvsvc_NETRDFSGETVERSION
1615 static WERROR srvsvc_NETRDFSGETVERSION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1616 struct srvsvc_NETRDFSGETVERSION *r)
1618 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1623 srvsvc_NETRDFSCREATELOCALPARTITION
1625 static WERROR srvsvc_NETRDFSCREATELOCALPARTITION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1626 struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
1628 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1633 srvsvc_NETRDFSDELETELOCALPARTITION
1635 static WERROR srvsvc_NETRDFSDELETELOCALPARTITION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1636 struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
1638 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1643 srvsvc_NETRDFSSETLOCALVOLUMESTATE
1645 static WERROR srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1646 struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
1648 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1653 srvsvc_NETRDFSSETSERVERINFO
1655 static WERROR srvsvc_NETRDFSSETSERVERINFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1656 struct srvsvc_NETRDFSSETSERVERINFO *r)
1658 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1663 srvsvc_NETRDFSCREATEEXITPOINT
1665 static WERROR srvsvc_NETRDFSCREATEEXITPOINT(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1666 struct srvsvc_NETRDFSCREATEEXITPOINT *r)
1668 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1673 srvsvc_NETRDFSDELETEEXITPOINT
1675 static WERROR srvsvc_NETRDFSDELETEEXITPOINT(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1676 struct srvsvc_NETRDFSDELETEEXITPOINT *r)
1678 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1683 srvsvc_NETRDFSMODIFYPREFIX
1685 static WERROR srvsvc_NETRDFSMODIFYPREFIX(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1686 struct srvsvc_NETRDFSMODIFYPREFIX *r)
1688 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1693 srvsvc_NETRDFSFIXLOCALVOLUME
1695 static WERROR srvsvc_NETRDFSFIXLOCALVOLUME(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1696 struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
1698 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1703 srvsvc_NETRDFSMANAGERREPORTSITEINFO
1705 static WERROR srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1706 struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
1708 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1713 srvsvc_NETRSERVERTRANSPORTDELEX
1715 static WERROR srvsvc_NETRSERVERTRANSPORTDELEX(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1716 struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
1718 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1724 static WERROR srvsvc_NetShareDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1725 struct srvsvc_NetShareDel *r)
1727 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1731 srvsvc_NetSetServiceBits
1733 static WERROR srvsvc_NetSetServiceBits(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1734 struct srvsvc_NetSetServiceBits *r)
1736 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1740 srvsvc_NETRPRNAMECANONICALIZE
1742 static WERROR srvsvc_NETRPRNAMECANONICALIZE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1743 struct srvsvc_NETRPRNAMECANONICALIZE *r)
1745 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1748 /* include the generated boilerplate */
1749 #include "librpc/gen_ndr/ndr_srvsvc_s.c"