2 Unix SMB/CIFS implementation.
5 Copyright (C) Andrew Tridgell 1992-1999
6 Copyright (C) Luke Kenneth Casson Leighton 1996 - 1999
7 Copyright (C) Tim Potter 2000,2002
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #include "rpcclient.h"
25 #include "../librpc/gen_ndr/ndr_srvsvc.h"
26 #include "../librpc/gen_ndr/ndr_srvsvc_c.h"
27 #include "../libcli/security/display_sec.h"
29 /* Display server query info */
31 static char *get_server_type_str(uint32_t type
)
33 static fstring typestr
;
36 if (type
== SV_TYPE_ALL
) {
37 fstrcpy(typestr
, "All");
43 for (i
= 0; i
< 32; i
++) {
44 if (type
& ((uint32_t)1 << i
)) {
46 case SV_TYPE_WORKSTATION
:
47 fstrcat(typestr
, "Wk ");
50 fstrcat(typestr
, "Sv ");
52 case SV_TYPE_SQLSERVER
:
53 fstrcat(typestr
, "Sql ");
55 case SV_TYPE_DOMAIN_CTRL
:
56 fstrcat(typestr
, "PDC ");
58 case SV_TYPE_DOMAIN_BAKCTRL
:
59 fstrcat(typestr
, "BDC ");
61 case SV_TYPE_TIME_SOURCE
:
62 fstrcat(typestr
, "Tim ");
65 fstrcat(typestr
, "AFP ");
68 fstrcat(typestr
, "Nov ");
70 case SV_TYPE_DOMAIN_MEMBER
:
71 fstrcat(typestr
, "Dom ");
73 case SV_TYPE_PRINTQ_SERVER
:
74 fstrcat(typestr
, "PrQ ");
76 case SV_TYPE_DIALIN_SERVER
:
77 fstrcat(typestr
, "Din ");
79 case SV_TYPE_SERVER_UNIX
:
80 fstrcat(typestr
, "Unx ");
83 fstrcat(typestr
, "NT ");
86 fstrcat(typestr
, "Wfw ");
88 case SV_TYPE_SERVER_MFPN
:
89 fstrcat(typestr
, "Mfp ");
91 case SV_TYPE_SERVER_NT
:
92 fstrcat(typestr
, "SNT ");
94 case SV_TYPE_POTENTIAL_BROWSER
:
95 fstrcat(typestr
, "PtB ");
97 case SV_TYPE_BACKUP_BROWSER
:
98 fstrcat(typestr
, "BMB ");
100 case SV_TYPE_MASTER_BROWSER
:
101 fstrcat(typestr
, "LMB ");
103 case SV_TYPE_DOMAIN_MASTER
:
104 fstrcat(typestr
, "DMB ");
106 case SV_TYPE_SERVER_OSF
:
107 fstrcat(typestr
, "OSF ");
109 case SV_TYPE_SERVER_VMS
:
110 fstrcat(typestr
, "VMS ");
112 case SV_TYPE_WIN95_PLUS
:
113 fstrcat(typestr
, "W95 ");
115 case SV_TYPE_ALTERNATE_XPORT
:
116 fstrcat(typestr
, "Xpt ");
118 case SV_TYPE_LOCAL_LIST_ONLY
:
119 fstrcat(typestr
, "Dom ");
121 case SV_TYPE_DOMAIN_ENUM
:
122 fstrcat(typestr
, "Loc ");
128 i
= strlen(typestr
) - 1;
130 if (typestr
[i
] == ' ')
136 static void display_server(const char *sname
, uint32_t type
, const char *comment
)
138 printf("\t%-15.15s%-20s %s\n", sname
, get_server_type_str(type
),
142 static void display_srv_info_101(struct srvsvc_NetSrvInfo101
*r
)
144 display_server(r
->server_name
, r
->server_type
, r
->comment
);
146 printf("\tplatform_id :\t%d\n", r
->platform_id
);
147 printf("\tos version :\t%d.%d\n",
148 r
->version_major
, r
->version_minor
);
149 printf("\tserver type :\t0x%x\n", r
->server_type
);
152 static void display_srv_info_102(struct srvsvc_NetSrvInfo102
*r
)
154 display_server(r
->server_name
, r
->server_type
, r
->comment
);
156 printf("\tplatform_id :\t%d\n", r
->platform_id
);
157 printf("\tos version :\t%d.%d\n",
158 r
->version_major
, r
->version_minor
);
159 printf("\tserver type :\t0x%x\n", r
->server_type
);
161 printf("\tusers :\t%x\n", r
->users
);
162 printf("\tdisc, hidden :\t%x, %x\n", r
->disc
, r
->hidden
);
163 printf("\tannounce, delta :\t%d, %d\n", r
->announce
,
165 printf("\tlicenses :\t%d\n", r
->licenses
);
166 printf("\tuser path :\t%s\n", r
->userpath
);
169 /* Server query info */
170 static WERROR
cmd_srvsvc_srv_query_info(struct rpc_pipe_client
*cli
,
172 int argc
, const char **argv
)
174 uint32_t info_level
= 101;
175 union srvsvc_NetSrvInfo info
;
178 const char *server_unc
= cli
->srv_name_slash
;
179 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
182 printf("Usage: %s [infolevel] [server_unc]\n", argv
[0]);
187 info_level
= atoi(argv
[1]);
191 server_unc
= argv
[2];
194 status
= dcerpc_srvsvc_NetSrvGetInfo(b
, mem_ctx
,
199 if (!NT_STATUS_IS_OK(status
)) {
200 return ntstatus_to_werror(status
);
203 if (!W_ERROR_IS_OK(result
)) {
207 /* Display results */
209 switch (info_level
) {
211 display_srv_info_101(info
.info101
);
214 display_srv_info_102(info
.info102
);
217 printf("unsupported info level %d\n", info_level
);
225 static void display_share_info_1(struct srvsvc_NetShareInfo1
*r
)
227 printf("netname: %s\n", r
->name
);
228 printf("\tremark:\t%s\n", r
->comment
);
231 static void display_share_info_2(struct srvsvc_NetShareInfo2
*r
)
233 printf("netname: %s\n", r
->name
);
234 printf("\tremark:\t%s\n", r
->comment
);
235 printf("\tpath:\t%s\n", r
->path
);
236 printf("\tpassword:\t%s\n", r
->password
);
239 static void display_share_info_502(struct srvsvc_NetShareInfo502
*r
)
241 printf("netname: %s\n", r
->name
);
242 printf("\tremark:\t%s\n", r
->comment
);
243 printf("\tpath:\t%s\n", r
->path
);
244 printf("\tpassword:\t%s\n", r
->password
);
246 printf("\ttype:\t0x%x\n", r
->type
);
247 printf("\tperms:\t%d\n", r
->permissions
);
248 printf("\tmax_uses:\t%d\n", r
->max_users
);
249 printf("\tnum_uses:\t%d\n", r
->current_users
);
252 display_sec_desc(r
->sd_buf
.sd
);
256 static void display_share_info_1005(struct srvsvc_NetShareInfo1005
*r
)
258 printf("flags: 0x%x\n", r
->dfs_flags
);
259 printf("csc caching: %u\n",
260 (r
->dfs_flags
& SHARE_1005_CSC_POLICY_MASK
) >>
261 SHARE_1005_CSC_POLICY_SHIFT
);
264 static WERROR
cmd_srvsvc_net_share_enum_int(struct rpc_pipe_client
*cli
,
266 int argc
, const char **argv
,
269 uint32_t info_level
= 2;
270 struct srvsvc_NetShareInfoCtr info_ctr
;
271 struct srvsvc_NetShareCtr0 ctr0
;
272 struct srvsvc_NetShareCtr1 ctr1
;
273 struct srvsvc_NetShareCtr2 ctr2
;
274 struct srvsvc_NetShareCtr501 ctr501
;
275 struct srvsvc_NetShareCtr502 ctr502
;
276 struct srvsvc_NetShareCtr1004 ctr1004
;
277 struct srvsvc_NetShareCtr1005 ctr1005
;
278 struct srvsvc_NetShareCtr1006 ctr1006
;
279 struct srvsvc_NetShareCtr1007 ctr1007
;
280 struct srvsvc_NetShareCtr1501 ctr1501
;
283 uint32_t totalentries
= 0;
285 uint32_t resume_handle
= 0;
286 uint32_t *resume_handle_p
= NULL
;
287 uint32_t preferred_len
= 0xffffffff, i
;
288 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
291 printf("Usage: %s [infolevel] [resume_handle]\n", argv
[0]);
296 info_level
= atoi(argv
[1]);
300 resume_handle
= atoi(argv
[2]);
301 resume_handle_p
= &resume_handle
;
304 ZERO_STRUCT(info_ctr
);
306 info_ctr
.level
= info_level
;
308 switch (info_level
) {
311 info_ctr
.ctr
.ctr0
= &ctr0
;
315 info_ctr
.ctr
.ctr1
= &ctr1
;
319 info_ctr
.ctr
.ctr2
= &ctr2
;
323 info_ctr
.ctr
.ctr501
= &ctr501
;
327 info_ctr
.ctr
.ctr502
= &ctr502
;
330 ZERO_STRUCT(ctr1004
);
331 info_ctr
.ctr
.ctr1004
= &ctr1004
;
334 ZERO_STRUCT(ctr1005
);
335 info_ctr
.ctr
.ctr1005
= &ctr1005
;
338 ZERO_STRUCT(ctr1006
);
339 info_ctr
.ctr
.ctr1006
= &ctr1006
;
342 ZERO_STRUCT(ctr1007
);
343 info_ctr
.ctr
.ctr1007
= &ctr1007
;
346 ZERO_STRUCT(ctr1501
);
347 info_ctr
.ctr
.ctr1501
= &ctr1501
;
352 case NDR_SRVSVC_NETSHAREENUM
:
353 status
= dcerpc_srvsvc_NetShareEnum(b
, mem_ctx
,
361 case NDR_SRVSVC_NETSHAREENUMALL
:
362 status
= dcerpc_srvsvc_NetShareEnumAll(b
, mem_ctx
,
371 return WERR_INVALID_PARAMETER
;
374 if (!NT_STATUS_IS_OK(status
)) {
375 result
= ntstatus_to_werror(status
);
378 if (!W_ERROR_IS_OK(result
)) {
382 /* Display results */
384 switch (info_level
) {
386 count
= info_ctr
.ctr
.ctr1
->count
;
387 for (i
= 0; i
< count
; i
++)
388 display_share_info_1(&info_ctr
.ctr
.ctr1
->array
[i
]);
391 count
= info_ctr
.ctr
.ctr2
->count
;
392 for (i
= 0; i
< count
; i
++)
393 display_share_info_2(&info_ctr
.ctr
.ctr2
->array
[i
]);
396 count
= info_ctr
.ctr
.ctr502
->count
;
397 for (i
= 0; i
< count
; i
++)
398 display_share_info_502(&info_ctr
.ctr
.ctr502
->array
[i
]);
401 printf("unsupported info level %d\n", info_level
);
409 static WERROR
cmd_srvsvc_net_share_enum(struct rpc_pipe_client
*cli
,
411 int argc
, const char **argv
)
413 return cmd_srvsvc_net_share_enum_int(cli
, mem_ctx
,
415 NDR_SRVSVC_NETSHAREENUM
);
418 static WERROR
cmd_srvsvc_net_share_enum_all(struct rpc_pipe_client
*cli
,
420 int argc
, const char **argv
)
422 return cmd_srvsvc_net_share_enum_int(cli
, mem_ctx
,
424 NDR_SRVSVC_NETSHAREENUMALL
);
427 static WERROR
cmd_srvsvc_net_share_get_info(struct rpc_pipe_client
*cli
,
429 int argc
, const char **argv
)
431 uint32_t info_level
= 502;
432 union srvsvc_NetShareInfo info
;
435 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
437 if (argc
< 2 || argc
> 3) {
438 printf("Usage: %s sharename [infolevel 1|2|502|1005]\n",
444 info_level
= atoi(argv
[2]);
446 status
= dcerpc_srvsvc_NetShareGetInfo(b
, mem_ctx
,
453 if (!NT_STATUS_IS_OK(status
)) {
454 result
= ntstatus_to_werror(status
);
457 if (!W_ERROR_IS_OK(result
)) {
461 /* Display results */
463 switch (info_level
) {
465 display_share_info_1(info
.info1
);
468 display_share_info_2(info
.info2
);
471 display_share_info_502(info
.info502
);
474 display_share_info_1005(info
.info1005
);
477 printf("unsupported info level %d\n", info_level
);
485 static WERROR
cmd_srvsvc_net_share_set_info(struct rpc_pipe_client
*cli
,
487 int argc
, const char **argv
)
489 uint32_t info_level
= 502;
490 union srvsvc_NetShareInfo info_get
;
493 uint32_t parm_err
= 0;
494 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
497 printf("Usage: %s [sharename] [comment]\n", argv
[0]);
501 /* retrieve share info */
502 status
= dcerpc_srvsvc_NetShareGetInfo(b
, mem_ctx
,
509 if (!NT_STATUS_IS_OK(status
)) {
510 result
= ntstatus_to_werror(status
);
513 if (!W_ERROR_IS_OK(result
)) {
517 info_get
.info502
->comment
= argv
[2];
520 status
= dcerpc_srvsvc_NetShareSetInfo(b
, mem_ctx
,
528 if (!NT_STATUS_IS_OK(status
)) {
529 result
= ntstatus_to_werror(status
);
532 if (!W_ERROR_IS_OK(result
)) {
536 /* re-retrieve share info and display */
537 status
= dcerpc_srvsvc_NetShareGetInfo(b
, mem_ctx
,
543 if (!NT_STATUS_IS_OK(status
)) {
544 result
= ntstatus_to_werror(status
);
547 if (!W_ERROR_IS_OK(result
)) {
551 display_share_info_502(info_get
.info502
);
557 static WERROR
cmd_srvsvc_net_share_set_dfs_flags(struct rpc_pipe_client
*cli
,
559 int argc
, const char **argv
)
561 struct srvsvc_NetShareInfo1005 info1005
= { 0 };
562 union srvsvc_NetShareInfo info
= { .info1005
= &info1005
};
565 uint32_t parm_err
= 0;
566 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
569 printf("Usage: %s [sharename] [dfsflags]\n", argv
[0]);
574 info
.info1005
->dfs_flags
= strtol(argv
[2], NULL
, 0);
578 status
= dcerpc_srvsvc_NetShareSetInfo(b
, mem_ctx
,
586 if (!NT_STATUS_IS_OK(status
)) {
587 return ntstatus_to_werror(status
);
589 if (!W_ERROR_IS_OK(result
)) {
593 /* re-retrieve share info and display */
594 status
= dcerpc_srvsvc_NetShareGetInfo(b
, mem_ctx
,
600 if (!NT_STATUS_IS_OK(status
)) {
601 return ntstatus_to_werror(status
);
603 if (!W_ERROR_IS_OK(result
)) {
607 display_share_info_1005(info
.info1005
);
612 static WERROR
cmd_srvsvc_net_remote_tod(struct rpc_pipe_client
*cli
,
614 int argc
, const char **argv
)
616 struct srvsvc_NetRemoteTODInfo
*tod
= NULL
;
619 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
622 printf("Usage: %s\n", argv
[0]);
626 status
= dcerpc_srvsvc_NetRemoteTOD(b
, mem_ctx
,
630 if (!NT_STATUS_IS_OK(status
)) {
631 result
= ntstatus_to_werror(status
);
635 if (!W_ERROR_IS_OK(result
))
642 static WERROR
cmd_srvsvc_net_file_enum(struct rpc_pipe_client
*cli
,
644 int argc
, const char **argv
)
646 struct srvsvc_NetFileCtr3 ctr3
= { 0 };
647 struct srvsvc_NetFileInfoCtr info_ctr
= {
655 uint32_t preferred_len
= 0xffff;
656 uint32_t total_entries
= 0;
657 uint32_t resume_handle
= 0;
658 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
661 printf("Usage: %s [infolevel]\n", argv
[0]);
666 info_ctr
.level
= atoi(argv
[1]);
669 status
= dcerpc_srvsvc_NetFileEnum(b
, mem_ctx
,
678 if (!NT_STATUS_IS_OK(status
)) {
679 result
= ntstatus_to_werror(status
);
683 if (!W_ERROR_IS_OK(result
)) {
687 if (info_ctr
.level
== 3) {
688 struct srvsvc_NetFileCtr3
*ret
= info_ctr
.ctr
.ctr3
;
691 for (i
=0; i
<ret
->count
; i
++) {
692 printf("%s\n", ret
->array
[i
].path
);
699 static WERROR
cmd_srvsvc_net_name_validate(struct rpc_pipe_client
*cli
,
701 int argc
, const char **argv
)
705 uint32_t name_type
= 9;
707 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
709 if (argc
< 2 || argc
> 3) {
710 printf("Usage: %s [sharename] [type]\n", argv
[0]);
715 name_type
= atoi(argv
[2]);
718 status
= dcerpc_srvsvc_NetNameValidate(b
, mem_ctx
,
724 if (!NT_STATUS_IS_OK(status
)) {
725 result
= ntstatus_to_werror(status
);
729 if (!W_ERROR_IS_OK(result
))
736 static WERROR
cmd_srvsvc_net_file_get_sec(struct rpc_pipe_client
*cli
,
738 int argc
, const char **argv
)
742 struct sec_desc_buf
*sd_buf
= NULL
;
743 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
745 if (argc
< 2 || argc
> 4) {
746 printf("Usage: %s [sharename] [file]\n", argv
[0]);
750 status
= dcerpc_srvsvc_NetGetFileSecurity(b
, mem_ctx
,
757 if (!NT_STATUS_IS_OK(status
)) {
758 result
= ntstatus_to_werror(status
);
762 if (!W_ERROR_IS_OK(result
)) {
766 display_sec_desc(sd_buf
->sd
);
772 static WERROR
cmd_srvsvc_net_sess_del(struct rpc_pipe_client
*cli
,
774 int argc
, const char **argv
)
778 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
780 if (argc
< 2 || argc
> 4) {
781 printf("Usage: %s [client] [user]\n", argv
[0]);
785 status
= dcerpc_srvsvc_NetSessDel(b
, mem_ctx
,
790 if (!NT_STATUS_IS_OK(status
)) {
791 result
= ntstatus_to_werror(status
);
795 if (!W_ERROR_IS_OK(result
)) {
803 static WERROR
cmd_srvsvc_net_sess_enum(struct rpc_pipe_client
*cli
,
805 int argc
, const char **argv
)
809 struct srvsvc_NetSessInfoCtr info_ctr
;
810 struct srvsvc_NetSessCtr0 ctr0
;
811 struct srvsvc_NetSessCtr1 ctr1
;
812 struct srvsvc_NetSessCtr2 ctr2
;
813 struct srvsvc_NetSessCtr10 ctr10
;
814 struct srvsvc_NetSessCtr502 ctr502
;
815 uint32_t total_entries
= 0;
816 uint32_t resume_handle
= 0;
817 uint32_t *resume_handle_p
= NULL
;
819 const char *client
= NULL
;
820 const char *user
= NULL
;
821 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
824 printf("Usage: %s [client] [user] [level] [resume_handle]\n", argv
[0]);
837 level
= atoi(argv
[3]);
841 resume_handle
= atoi(argv
[4]);
842 resume_handle_p
= &resume_handle
;
845 ZERO_STRUCT(info_ctr
);
847 info_ctr
.level
= level
;
849 d_printf("trying level: %d\n", level
);
854 info_ctr
.ctr
.ctr0
= &ctr0
;
858 info_ctr
.ctr
.ctr1
= &ctr1
;
862 info_ctr
.ctr
.ctr2
= &ctr2
;
866 info_ctr
.ctr
.ctr10
= &ctr10
;
870 info_ctr
.ctr
.ctr502
= &ctr502
;
874 status
= dcerpc_srvsvc_NetSessEnum(b
, mem_ctx
,
884 if (!NT_STATUS_IS_OK(status
)) {
885 result
= ntstatus_to_werror(status
);
889 if (!W_ERROR_IS_OK(result
)) {
893 d_printf("Received %d entries.\n", total_entries
);
899 static WERROR
cmd_srvsvc_net_disk_enum(struct rpc_pipe_client
*cli
,
901 int argc
, const char **argv
)
903 struct srvsvc_NetDiskInfo info
;
906 uint32_t total_entries
= 0;
907 uint32_t resume_handle
= 0;
909 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
912 printf("Usage: %s [level] [resume_handle]\n", argv
[0]);
917 level
= atoi(argv
[1]);
921 resume_handle
= atoi(argv
[2]);
926 status
= dcerpc_srvsvc_NetDiskEnum(b
, mem_ctx
,
934 if (!NT_STATUS_IS_OK(status
)) {
935 result
= ntstatus_to_werror(status
);
939 if (!W_ERROR_IS_OK(result
)) {
947 static WERROR
cmd_srvsvc_net_conn_enum(struct rpc_pipe_client
*cli
,
949 int argc
, const char **argv
)
951 struct srvsvc_NetConnInfoCtr info_ctr
;
952 struct srvsvc_NetConnCtr0 ctr0
;
953 struct srvsvc_NetConnCtr1 ctr1
;
956 uint32_t total_entries
= 0;
957 uint32_t resume_handle
= 0;
958 uint32_t *resume_handle_p
= NULL
;
960 const char *path
= "IPC$";
961 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
964 printf("Usage: %s [level] [path] [resume_handle]\n", argv
[0]);
969 level
= atoi(argv
[1]);
977 resume_handle
= atoi(argv
[3]);
978 resume_handle_p
= &resume_handle
;
981 ZERO_STRUCT(info_ctr
);
983 info_ctr
.level
= level
;
988 info_ctr
.ctr
.ctr0
= &ctr0
;
992 info_ctr
.ctr
.ctr1
= &ctr1
;
995 return WERR_INVALID_PARAMETER
;
998 status
= dcerpc_srvsvc_NetConnEnum(b
, mem_ctx
,
1007 if (!NT_STATUS_IS_OK(status
)) {
1008 result
= ntstatus_to_werror(status
);
1012 if (!W_ERROR_IS_OK(result
)) {
1020 static WERROR
cmd_srvsvc_net_share_add(struct rpc_pipe_client
*cli
,
1021 TALLOC_CTX
*mem_ctx
,
1022 int argc
, const char **argv
)
1024 struct srvsvc_NetShareInfo502 info502
= { 0 };
1025 union srvsvc_NetShareInfo info
= { .info502
= &info502
};
1028 uint32_t max_users
= -1, parm_error
;
1029 struct sec_desc_buf sd_buf
= { 0 };
1030 const char *path
, *share_name
, *comment
= NULL
;
1031 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
1033 if (argc
< 3 || argc
> 5) {
1034 printf("Usage: %s path share_name [max_users] [comment]\n",
1040 share_name
= argv
[2];
1043 max_users
= atoi(argv
[3]);
1050 info
.info502
->name
= share_name
;
1051 info
.info502
->type
= STYPE_DISKTREE
;
1052 info
.info502
->comment
= comment
;
1053 info
.info502
->max_users
= max_users
;
1054 info
.info502
->path
= path
;
1055 info
.info502
->sd_buf
= sd_buf
;
1057 status
= dcerpc_srvsvc_NetShareAdd(b
, mem_ctx
, cli
->desthost
,
1058 502, &info
, &parm_error
, &result
);
1059 if (!NT_STATUS_IS_OK(status
)) {
1060 result
= ntstatus_to_werror(status
);
1066 static WERROR
cmd_srvsvc_net_share_del(struct rpc_pipe_client
*cli
,
1067 TALLOC_CTX
*mem_ctx
,
1068 int argc
, const char **argv
)
1070 const char *share_name
;
1073 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
1076 printf("Usage: %s share_name\n", argv
[0]);
1080 share_name
= argv
[1];
1082 status
= dcerpc_srvsvc_NetShareDel(b
, mem_ctx
, cli
->desthost
,
1083 share_name
, 0, &result
);
1085 if (!NT_STATUS_IS_OK(status
)) {
1086 result
= ntstatus_to_werror(status
);
1093 /* List of commands exported by this module */
1095 struct cmd_set srvsvc_commands
[] = {
1103 .returntype
= RPC_RTYPE_WERROR
,
1105 .wfn
= cmd_srvsvc_srv_query_info
,
1106 .table
= &ndr_table_srvsvc
,
1108 .description
= "Server query info",
1112 .name
= "netshareenum",
1113 .returntype
= RPC_RTYPE_WERROR
,
1115 .wfn
= cmd_srvsvc_net_share_enum
,
1116 .table
= &ndr_table_srvsvc
,
1118 .description
= "Enumerate shares",
1122 .name
= "netshareenumall",
1123 .returntype
= RPC_RTYPE_WERROR
,
1125 .wfn
= cmd_srvsvc_net_share_enum_all
,
1126 .table
= &ndr_table_srvsvc
,
1128 .description
= "Enumerate all shares",
1132 .name
= "netsharegetinfo",
1133 .returntype
= RPC_RTYPE_WERROR
,
1135 .wfn
= cmd_srvsvc_net_share_get_info
,
1136 .table
= &ndr_table_srvsvc
,
1138 .description
= "Get Share Info",
1142 .name
= "netsharesetinfo",
1143 .returntype
= RPC_RTYPE_WERROR
,
1145 .wfn
= cmd_srvsvc_net_share_set_info
,
1146 .table
= &ndr_table_srvsvc
,
1148 .description
= "Set Share Info",
1152 .name
= "netsharesetdfsflags",
1153 .returntype
= RPC_RTYPE_WERROR
,
1155 .wfn
= cmd_srvsvc_net_share_set_dfs_flags
,
1156 .table
= &ndr_table_srvsvc
,
1158 .description
= "Set DFS flags",
1162 .name
= "netfileenum",
1163 .returntype
= RPC_RTYPE_WERROR
,
1165 .wfn
= cmd_srvsvc_net_file_enum
,
1166 .table
= &ndr_table_srvsvc
,
1168 .description
= "Enumerate open files",
1172 .name
= "netremotetod",
1173 .returntype
= RPC_RTYPE_WERROR
,
1175 .wfn
= cmd_srvsvc_net_remote_tod
,
1176 .table
= &ndr_table_srvsvc
,
1178 .description
= "Fetch remote time of day",
1182 .name
= "netnamevalidate",
1183 .returntype
= RPC_RTYPE_WERROR
,
1185 .wfn
= cmd_srvsvc_net_name_validate
,
1186 .table
= &ndr_table_srvsvc
,
1188 .description
= "Validate sharename",
1192 .name
= "netfilegetsec",
1193 .returntype
= RPC_RTYPE_WERROR
,
1195 .wfn
= cmd_srvsvc_net_file_get_sec
,
1196 .table
= &ndr_table_srvsvc
,
1198 .description
= "Get File security",
1202 .name
= "netsessdel",
1203 .returntype
= RPC_RTYPE_WERROR
,
1205 .wfn
= cmd_srvsvc_net_sess_del
,
1206 .table
= &ndr_table_srvsvc
,
1208 .description
= "Delete Session",
1212 .name
= "netsessenum",
1213 .returntype
= RPC_RTYPE_WERROR
,
1215 .wfn
= cmd_srvsvc_net_sess_enum
,
1216 .table
= &ndr_table_srvsvc
,
1218 .description
= "Enumerate Sessions",
1222 .name
= "netdiskenum",
1223 .returntype
= RPC_RTYPE_WERROR
,
1225 .wfn
= cmd_srvsvc_net_disk_enum
,
1226 .table
= &ndr_table_srvsvc
,
1228 .description
= "Enumerate Disks",
1232 .name
= "netconnenum",
1233 .returntype
= RPC_RTYPE_WERROR
,
1235 .wfn
= cmd_srvsvc_net_conn_enum
,
1236 .table
= &ndr_table_srvsvc
,
1238 .description
= "Enumerate Connections",
1242 .name
= "netshareadd",
1243 .returntype
= RPC_RTYPE_WERROR
,
1245 .wfn
= cmd_srvsvc_net_share_add
,
1246 .table
= &ndr_table_srvsvc
,
1248 .description
= "Add share",
1252 .name
= "netsharedel",
1253 .returntype
= RPC_RTYPE_WERROR
,
1255 .wfn
= cmd_srvsvc_net_share_del
,
1256 .table
= &ndr_table_srvsvc
,
1258 .description
= "Delete share",