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;
1030 struct srvsvc_NetSrvInfo102 *info102;
1032 info102 = talloc(mem_ctx, struct srvsvc_NetSrvInfo102);
1033 W_ERROR_HAVE_NO_MEMORY(info102);
1035 info102->platform_id = dcesrv_common_get_platform_id(mem_ctx, dce_ctx);
1036 info102->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, r->in.server_unc);
1037 W_ERROR_HAVE_NO_MEMORY(info102->server_name);
1039 info102->version_major = dcesrv_common_get_version_major(mem_ctx, dce_ctx);
1040 info102->version_minor = dcesrv_common_get_version_minor(mem_ctx, dce_ctx);
1041 info102->server_type = dcesrv_common_get_server_type(mem_ctx, dce_ctx);
1042 info102->comment = talloc_strdup(mem_ctx, lp_serverstring());
1043 W_ERROR_HAVE_NO_MEMORY(info102->comment);
1045 info102->users = dcesrv_common_get_users(mem_ctx, dce_ctx);
1046 info102->disc = dcesrv_common_get_disc(mem_ctx, dce_ctx);
1047 info102->hidden = dcesrv_common_get_hidden(mem_ctx, dce_ctx);
1048 info102->announce = dcesrv_common_get_announce(mem_ctx, dce_ctx);
1049 info102->anndelta = dcesrv_common_get_anndelta(mem_ctx, dce_ctx);
1050 info102->licenses = dcesrv_common_get_licenses(mem_ctx, dce_ctx);
1051 info102->userpath = dcesrv_common_get_userpath(mem_ctx, dce_ctx);
1052 W_ERROR_HAVE_NO_MEMORY(info102->userpath);
1054 r->out.info.info102 = info102;
1058 return WERR_UNKNOWN_LEVEL;
1061 return WERR_UNKNOWN_LEVEL;
1066 srvsvc_NetSrvSetInfo
1068 static WERROR srvsvc_NetSrvSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1069 struct srvsvc_NetSrvSetInfo *r)
1071 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1078 static WERROR srvsvc_NetDiskEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1079 struct srvsvc_NetDiskEnum *r)
1081 r->out.info.disks = NULL;
1082 r->out.info.count = 0;
1083 r->out.totalentries = 0;
1084 r->out.resume_handle = NULL;
1086 switch (r->in.level) {
1089 /* we can safely hardcode the reply and report we have only one disk (C:) */
1090 /* for some reason Windows wants 2 entries with the second being empty */
1091 r->out.info.disks = talloc_array(mem_ctx, struct srvsvc_NetDiskInfo0, 2);
1092 W_ERROR_HAVE_NO_MEMORY(r->out.info.disks);
1093 r->out.info.count = 2;
1095 r->out.info.disks[0].disk = talloc_strdup(mem_ctx, "C:");
1096 W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[0].disk);
1098 r->out.info.disks[1].disk = talloc_strdup(mem_ctx, "");
1099 W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[1].disk);
1101 r->out.totalentries = 1;
1102 r->out.resume_handle = r->in.resume_handle;
1107 return WERR_UNKNOWN_LEVEL;
1110 return WERR_UNKNOWN_LEVEL;
1115 srvsvc_NetServerStatisticsGet
1117 static WERROR srvsvc_NetServerStatisticsGet(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1118 struct srvsvc_NetServerStatisticsGet *r)
1120 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1125 srvsvc_NetTransportAdd
1127 static WERROR srvsvc_NetTransportAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1128 struct srvsvc_NetTransportAdd *r)
1130 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1135 srvsvc_NetTransportEnum
1137 static WERROR srvsvc_NetTransportEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1138 struct srvsvc_NetTransportEnum *r)
1140 r->out.level = r->in.level;
1141 r->out.totalentries = 0;
1142 r->out.resume_handle = NULL;
1144 switch (r->in.level) {
1147 r->out.transports.ctr0 = talloc(mem_ctx, struct srvsvc_NetTransportCtr0);
1148 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr0);
1150 r->out.transports.ctr0->count = 0;
1151 r->out.transports.ctr0->array = NULL;
1153 return WERR_NOT_SUPPORTED;
1157 r->out.transports.ctr1 = talloc(mem_ctx, struct srvsvc_NetTransportCtr1);
1158 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr1);
1160 r->out.transports.ctr1->count = 0;
1161 r->out.transports.ctr1->array = NULL;
1163 return WERR_NOT_SUPPORTED;
1167 r->out.transports.ctr2 = talloc(mem_ctx, struct srvsvc_NetTransportCtr2);
1168 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr2);
1170 r->out.transports.ctr2->count = 0;
1171 r->out.transports.ctr2->array = NULL;
1173 return WERR_NOT_SUPPORTED;
1177 r->out.transports.ctr3 = talloc(mem_ctx, struct srvsvc_NetTransportCtr3);
1178 W_ERROR_HAVE_NO_MEMORY(r->out.transports.ctr3);
1180 r->out.transports.ctr3->count = 0;
1181 r->out.transports.ctr3->array = NULL;
1183 return WERR_NOT_SUPPORTED;
1186 return WERR_UNKNOWN_LEVEL;
1189 return WERR_UNKNOWN_LEVEL;
1193 srvsvc_NetTransportDel
1195 static WERROR srvsvc_NetTransportDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1196 struct srvsvc_NetTransportDel *r)
1198 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1205 static WERROR srvsvc_NetRemoteTOD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1206 struct srvsvc_NetRemoteTOD *r)
1208 struct timeval tval;
1212 r->out.info = talloc(mem_ctx, struct srvsvc_NetRemoteTODInfo);
1213 W_ERROR_HAVE_NO_MEMORY(r->out.info);
1215 GetTimeOfDay(&tval);
1220 r->out.info->elapsed = t;
1221 /* TODO: fake the uptime: just return the milliseconds till 0:00:00 today */
1222 r->out.info->msecs = (tm.tm_hour*60*60*1000)
1223 + (tm.tm_min*60*1000)
1225 + (tval.tv_usec/1000);
1226 r->out.info->hours = tm.tm_hour;
1227 r->out.info->mins = tm.tm_min;
1228 r->out.info->secs = tm.tm_sec;
1229 r->out.info->hunds = tval.tv_usec/10000;
1230 r->out.info->timezone = get_time_zone(t)/60;
1231 r->out.info->tinterval = 310; /* just return the same as windows */
1232 r->out.info->day = tm.tm_mday;
1233 r->out.info->month = tm.tm_mon + 1;
1234 r->out.info->year = tm.tm_year + 1900;
1235 r->out.info->weekday = tm.tm_wday;
1243 static WERROR srvsvc_NetPathType(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1244 struct srvsvc_NetPathType *r)
1246 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1251 srvsvc_NetPathCanonicalize
1253 static WERROR srvsvc_NetPathCanonicalize(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1254 struct srvsvc_NetPathCanonicalize *r)
1256 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1261 srvsvc_NetPathCompare
1263 static WERROR srvsvc_NetPathCompare(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1264 struct srvsvc_NetPathCompare *r)
1266 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1271 srvsvc_NetNameValidate
1273 static WERROR srvsvc_NetNameValidate(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1274 struct srvsvc_NetNameValidate *r)
1278 if ((r->in.flags != 0x0) && (r->in.flags != 0x80000000)) {
1279 return WERR_INVALID_NAME;
1282 switch (r->in.name_type) {
1291 return WERR_NOT_SUPPORTED;
1293 case 9: /* validate share name */
1295 len = strlen_m(r->in.name);
1296 if ((r->in.flags == 0x0) && (len > 81)) {
1297 return WERR_INVALID_NAME;
1299 if ((r->in.flags == 0x80000000) && (len > 13)) {
1300 return WERR_INVALID_NAME;
1302 if (! dcesrv_common_validate_share_name(mem_ctx, r->in.name)) {
1303 return WERR_INVALID_NAME;
1311 return WERR_NOT_SUPPORTED;
1313 return WERR_INVALID_PARAM;
1316 return WERR_INVALID_PARAM;
1321 srvsvc_NetPRNameCompare
1323 static WERROR srvsvc_NetPRNameCompare(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1324 struct srvsvc_NetPRNameCompare *r)
1326 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1333 static WERROR srvsvc_NetShareEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1334 struct srvsvc_NetShareEnum *r)
1338 const char **snames;
1339 struct share_context *sctx;
1340 struct share_config *scfg;
1341 struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
1343 r->out.level = r->in.level;
1344 ZERO_STRUCT(r->out.ctr);
1345 r->out.totalentries = 0;
1346 r->out.resume_handle = NULL;
1348 /* TODO: - paging of results
1351 nterr = share_get_context(mem_ctx, &sctx);
1352 if (!NT_STATUS_IS_OK(nterr)) {
1353 return ntstatus_to_werror(nterr);
1356 nterr = share_list_all(mem_ctx, sctx, &numshares, &snames);
1357 if (!NT_STATUS_IS_OK(nterr)) {
1358 return ntstatus_to_werror(nterr);
1361 switch (r->in.level) {
1366 struct srvsvc_NetShareCtr0 *ctr0;
1368 ctr0 = talloc(mem_ctx, struct srvsvc_NetShareCtr0);
1369 W_ERROR_HAVE_NO_MEMORY(ctr0);
1372 ctr0->count = count;
1375 if (ctr0->count == 0) {
1376 r->out.ctr.ctr0 = ctr0;
1380 ctr0->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo0, count);
1381 W_ERROR_HAVE_NO_MEMORY(ctr0->array);
1383 for (i=0; i < count; i++) {
1385 union srvsvc_NetShareInfo info;
1386 enum srvsvc_ShareType type;
1388 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1389 if (!NT_STATUS_IS_OK(nterr)) {
1390 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1391 return WERR_GENERAL_FAILURE;
1394 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1395 if (type & STYPE_HIDDEN) {
1401 info.info0 = &ctr0->array[y];
1402 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1403 W_ERROR_NOT_OK_RETURN(status);
1407 talloc_free(snames);
1409 r->out.ctr.ctr0 = ctr0;
1410 r->out.totalentries = r->out.ctr.ctr0->count;
1417 struct srvsvc_NetShareCtr1 *ctr1;
1419 ctr1 = talloc(mem_ctx, struct srvsvc_NetShareCtr1);
1420 W_ERROR_HAVE_NO_MEMORY(ctr1);
1423 ctr1->count = count;
1426 if (ctr1->count == 0) {
1427 r->out.ctr.ctr1 = ctr1;
1431 ctr1->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo1, count);
1432 W_ERROR_HAVE_NO_MEMORY(ctr1->array);
1434 for (i=0; i < count; i++) {
1436 union srvsvc_NetShareInfo info;
1437 enum srvsvc_ShareType type;
1439 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1440 if (!NT_STATUS_IS_OK(nterr)) {
1441 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1442 return WERR_GENERAL_FAILURE;
1445 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1446 if (type & STYPE_HIDDEN) {
1452 info.info1 = &ctr1->array[y];
1453 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1454 W_ERROR_NOT_OK_RETURN(status);
1458 talloc_free(snames);
1460 r->out.ctr.ctr1 = ctr1;
1461 r->out.totalentries = r->out.ctr.ctr1->count;
1468 struct srvsvc_NetShareCtr2 *ctr2;
1470 SRVSVC_CHECK_ADMIN_ACCESS;
1472 ctr2 = talloc(mem_ctx, struct srvsvc_NetShareCtr2);
1473 W_ERROR_HAVE_NO_MEMORY(ctr2);
1476 ctr2->count = count;
1479 if (ctr2->count == 0) {
1480 r->out.ctr.ctr2 = ctr2;
1484 ctr2->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo2, count);
1485 W_ERROR_HAVE_NO_MEMORY(ctr2->array);
1487 for (i=0; i < count; i++) {
1489 union srvsvc_NetShareInfo info;
1490 enum srvsvc_ShareType type;
1492 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1493 if (!NT_STATUS_IS_OK(nterr)) {
1494 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1495 return WERR_GENERAL_FAILURE;
1498 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1499 if (type & STYPE_HIDDEN) {
1505 info.info2 = &ctr2->array[y];
1506 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1507 W_ERROR_NOT_OK_RETURN(status);
1511 talloc_free(snames);
1513 r->out.ctr.ctr2 = ctr2;
1514 r->out.totalentries = r->out.ctr.ctr2->count;
1521 struct srvsvc_NetShareCtr502 *ctr502;
1523 SRVSVC_CHECK_ADMIN_ACCESS;
1525 ctr502 = talloc(mem_ctx, struct srvsvc_NetShareCtr502);
1526 W_ERROR_HAVE_NO_MEMORY(ctr502);
1529 ctr502->count = count;
1530 ctr502->array = NULL;
1532 if (ctr502->count == 0) {
1533 r->out.ctr.ctr502 = ctr502;
1537 ctr502->array = talloc_array(mem_ctx, struct srvsvc_NetShareInfo502, count);
1538 W_ERROR_HAVE_NO_MEMORY(ctr502->array);
1540 for (i=0; i < count; i++) {
1542 union srvsvc_NetShareInfo info;
1543 enum srvsvc_ShareType type;
1545 nterr = share_get_config(mem_ctx, sctx, snames[i], &scfg);
1546 if (!NT_STATUS_IS_OK(nterr)) {
1547 DEBUG(1, ("ERROR: Service [%s] disappeared after enumeration", snames[i]));
1548 return WERR_GENERAL_FAILURE;
1551 type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg);
1552 if (type & STYPE_HIDDEN) {
1558 info.info502 = &ctr502->array[y];
1559 status = srvsvc_fiel_ShareInfo(dce_call, mem_ctx, scfg, r->in.level, &info);
1560 W_ERROR_NOT_OK_RETURN(status);
1564 talloc_free(snames);
1566 r->out.ctr.ctr502 = ctr502;
1567 r->out.totalentries = r->out.ctr.ctr502->count;
1571 return WERR_UNKNOWN_LEVEL;
1574 return WERR_UNKNOWN_LEVEL;
1579 srvsvc_NetShareDelStart
1581 static WERROR srvsvc_NetShareDelStart(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1582 struct srvsvc_NetShareDelStart *r)
1584 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1589 srvsvc_NetShareDelCommit
1591 static WERROR srvsvc_NetShareDelCommit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1592 struct srvsvc_NetShareDelCommit *r)
1594 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1599 srvsvc_NetGetFileSecurity
1601 static WERROR srvsvc_NetGetFileSecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1602 struct srvsvc_NetGetFileSecurity *r)
1604 struct sec_desc_buf *sd_buf;
1605 struct ntvfs_context *ntvfs_ctx = NULL;
1606 struct ntvfs_request *ntvfs_req;
1607 union smb_fileinfo *io;
1610 nt_status = srvsvc_create_ntvfs_context(dce_call, mem_ctx, r->in.share, &ntvfs_ctx);
1611 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1613 ntvfs_req = ntvfs_request_create(ntvfs_ctx, mem_ctx,
1614 dce_call->conn->auth_state.session_info,
1618 W_ERROR_HAVE_NO_MEMORY(ntvfs_req);
1620 sd_buf = talloc(mem_ctx, struct sec_desc_buf);
1621 W_ERROR_HAVE_NO_MEMORY(sd_buf);
1623 io = talloc(mem_ctx, union smb_fileinfo);
1624 W_ERROR_HAVE_NO_MEMORY(io);
1626 io->query_secdesc.level = RAW_FILEINFO_SEC_DESC;
1627 io->query_secdesc.in.file.path = r->in.file;
1628 io->query_secdesc.in.secinfo_flags = r->in.securityinformation;
1630 nt_status = ntvfs_qpathinfo(ntvfs_req, io);
1631 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1633 sd_buf->sd = io->query_secdesc.out.sd;
1635 r->out.sd_buf = sd_buf;
1641 srvsvc_NetSetFileSecurity
1643 static WERROR srvsvc_NetSetFileSecurity(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1644 struct srvsvc_NetSetFileSecurity *r)
1646 struct ntvfs_context *ntvfs_ctx;
1647 struct ntvfs_request *ntvfs_req;
1648 union smb_setfileinfo *io;
1651 nt_status = srvsvc_create_ntvfs_context(dce_call, mem_ctx, r->in.share, &ntvfs_ctx);
1652 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1654 ntvfs_req = ntvfs_request_create(ntvfs_ctx, mem_ctx,
1655 dce_call->conn->auth_state.session_info,
1659 W_ERROR_HAVE_NO_MEMORY(ntvfs_req);
1661 io = talloc(mem_ctx, union smb_setfileinfo);
1662 W_ERROR_HAVE_NO_MEMORY(io);
1664 io->set_secdesc.level = RAW_FILEINFO_SEC_DESC;
1665 io->set_secdesc.in.file.path = r->in.file;
1666 io->set_secdesc.in.secinfo_flags = r->in.securityinformation;
1667 io->set_secdesc.in.sd = r->in.sd_buf.sd;
1669 nt_status = ntvfs_setpathinfo(ntvfs_req, io);
1670 if (!NT_STATUS_IS_OK(nt_status)) return ntstatus_to_werror(nt_status);
1677 srvsvc_NetServerTransportAddEx
1679 static WERROR srvsvc_NetServerTransportAddEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1680 struct srvsvc_NetServerTransportAddEx *r)
1682 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1687 srvsvc_NetServerSetServiceBitsEx
1689 static WERROR srvsvc_NetServerSetServiceBitsEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1690 struct srvsvc_NetServerSetServiceBitsEx *r)
1692 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1697 srvsvc_NETRDFSGETVERSION
1699 static WERROR srvsvc_NETRDFSGETVERSION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1700 struct srvsvc_NETRDFSGETVERSION *r)
1702 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1707 srvsvc_NETRDFSCREATELOCALPARTITION
1709 static WERROR srvsvc_NETRDFSCREATELOCALPARTITION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1710 struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
1712 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1717 srvsvc_NETRDFSDELETELOCALPARTITION
1719 static WERROR srvsvc_NETRDFSDELETELOCALPARTITION(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1720 struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
1722 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1727 srvsvc_NETRDFSSETLOCALVOLUMESTATE
1729 static WERROR srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1730 struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
1732 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1737 srvsvc_NETRDFSSETSERVERINFO
1739 static WERROR srvsvc_NETRDFSSETSERVERINFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1740 struct srvsvc_NETRDFSSETSERVERINFO *r)
1742 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1747 srvsvc_NETRDFSCREATEEXITPOINT
1749 static WERROR srvsvc_NETRDFSCREATEEXITPOINT(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1750 struct srvsvc_NETRDFSCREATEEXITPOINT *r)
1752 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1757 srvsvc_NETRDFSDELETEEXITPOINT
1759 static WERROR srvsvc_NETRDFSDELETEEXITPOINT(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1760 struct srvsvc_NETRDFSDELETEEXITPOINT *r)
1762 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1767 srvsvc_NETRDFSMODIFYPREFIX
1769 static WERROR srvsvc_NETRDFSMODIFYPREFIX(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1770 struct srvsvc_NETRDFSMODIFYPREFIX *r)
1772 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1777 srvsvc_NETRDFSFIXLOCALVOLUME
1779 static WERROR srvsvc_NETRDFSFIXLOCALVOLUME(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1780 struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
1782 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1787 srvsvc_NETRDFSMANAGERREPORTSITEINFO
1789 static WERROR srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1790 struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
1792 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1797 srvsvc_NETRSERVERTRANSPORTDELEX
1799 static WERROR srvsvc_NETRSERVERTRANSPORTDELEX(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1800 struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
1802 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1808 static WERROR srvsvc_NetShareDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1809 struct srvsvc_NetShareDel *r)
1811 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1815 srvsvc_NetSetServiceBits
1817 static WERROR srvsvc_NetSetServiceBits(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1818 struct srvsvc_NetSetServiceBits *r)
1820 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1824 srvsvc_NETRPRNAMECANONICALIZE
1826 static WERROR srvsvc_NETRPRNAMECANONICALIZE(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1827 struct srvsvc_NETRPRNAMECANONICALIZE *r)
1829 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1832 /* include the generated boilerplate */
1833 #include "librpc/gen_ndr/ndr_srvsvc_s.c"