2 Unix SMB/CIFS implementation.
5 Copyright (C) Tim Potter 2000
6 Copyright (C) Guenther Deschner 2008
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "rpcclient.h"
24 #include "../libcli/auth/libcli_auth.h"
25 #include "../librpc/gen_ndr/ndr_netlogon.h"
26 #include "../librpc/gen_ndr/ndr_netlogon_c.h"
27 #include "rpc_client/cli_netlogon.h"
29 #include "../libcli/auth/netlogon_creds_cli.h"
30 #include "rpc_client/util_netlogon.h"
32 static WERROR
cmd_netlogon_logon_ctrl2(struct rpc_pipe_client
*cli
,
33 TALLOC_CTX
*mem_ctx
, int argc
,
36 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
38 const char *logon_server
= cli
->desthost
;
39 enum netr_LogonControlCode function_code
= NETLOGON_CONTROL_REDISCOVER
;
41 union netr_CONTROL_DATA_INFORMATION data
;
42 union netr_CONTROL_QUERY_INFORMATION query
;
43 const char *domain
= lp_workgroup();
44 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
46 #define fn_code_level(x, item) { x, #x, #item }
48 enum netr_LogonControlCode code
;
51 } supported_levels
[] = {
52 fn_code_level(NETLOGON_CONTROL_REDISCOVER
, domain
),
53 fn_code_level(NETLOGON_CONTROL_TC_QUERY
, domain
),
54 fn_code_level(NETLOGON_CONTROL_TRANSPORT_NOTIFY
, domain
),
55 fn_code_level(NETLOGON_CONTROL_FIND_USER
, user
),
56 fn_code_level(NETLOGON_CONTROL_CHANGE_PASSWORD
, domain
),
57 fn_code_level(NETLOGON_CONTROL_TC_VERIFY
, domain
),
58 fn_code_level(NETLOGON_CONTROL_SET_DBFLAG
, debug_level
),
62 if ((argc
> 5) || (argc
< 2)) {
63 fprintf(stderr
, "Usage: %s <logon_server> <function_code> "
64 "<level:1..4> <argument>\n", argv
[0]);
65 fprintf(stderr
, "Supported combinations:\n");
66 fprintf(stderr
, "function_code\targument\n");
67 for(i
=0; supported_levels
[i
].code
; i
++) {
68 fprintf(stderr
, "%7d\t\t%s\t(%s)\n",
69 supported_levels
[i
].code
,
70 supported_levels
[i
].argument
,
71 supported_levels
[i
].name
);
77 logon_server
= argv
[1];
81 function_code
= atoi(argv
[2]);
85 level
= atoi(argv
[3]);
92 switch (function_code
) {
93 case NETLOGON_CONTROL_REDISCOVER
:
94 case NETLOGON_CONTROL_TC_QUERY
:
95 case NETLOGON_CONTROL_CHANGE_PASSWORD
:
96 case NETLOGON_CONTROL_TRANSPORT_NOTIFY
:
97 case NETLOGON_CONTROL_TC_VERIFY
:
100 case NETLOGON_CONTROL_FIND_USER
:
103 case NETLOGON_CONTROL_SET_DBFLAG
:
104 data
.debug_level
= atoi(domain
);
109 status
= dcerpc_netr_LogonControl2(b
, mem_ctx
,
116 if (!NT_STATUS_IS_OK(status
)) {
117 return ntstatus_to_werror(status
);
120 if (!W_ERROR_IS_OK(werr
)) {
124 /* Display results */
129 static WERROR
cmd_netlogon_getanydcname(struct rpc_pipe_client
*cli
,
130 TALLOC_CTX
*mem_ctx
, int argc
,
133 const char *dcname
= NULL
;
137 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
140 fprintf(stderr
, "Usage: %s domainname\n", argv
[0]);
144 /* Make sure to wait for our DC's reply */
145 old_timeout
= rpccli_set_timeout(cli
, 30000); /* 30 seconds. */
146 rpccli_set_timeout(cli
, MAX(old_timeout
, 30000)); /* At least 30 sec */
148 status
= dcerpc_netr_GetAnyDCName(b
, mem_ctx
,
153 rpccli_set_timeout(cli
, old_timeout
);
155 if (!NT_STATUS_IS_OK(status
)) {
156 return ntstatus_to_werror(status
);
159 if (!W_ERROR_IS_OK(werr
)) {
163 /* Display results */
165 printf("%s\n", dcname
);
170 static WERROR
cmd_netlogon_getdcname(struct rpc_pipe_client
*cli
,
171 TALLOC_CTX
*mem_ctx
, int argc
,
174 const char *dcname
= NULL
;
178 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
181 fprintf(stderr
, "Usage: %s domainname\n", argv
[0]);
185 /* Make sure to wait for our DC's reply */
186 old_timeout
= rpccli_set_timeout(cli
, 30000); /* 30 seconds. */
187 rpccli_set_timeout(cli
, MAX(30000, old_timeout
)); /* At least 30 sec */
189 status
= dcerpc_netr_GetDcName(b
, mem_ctx
,
194 rpccli_set_timeout(cli
, old_timeout
);
196 if (!NT_STATUS_IS_OK(status
)) {
197 return ntstatus_to_werror(status
);
200 if (!W_ERROR_IS_OK(werr
)) {
204 /* Display results */
206 printf("%s\n", dcname
);
211 static WERROR
cmd_netlogon_dsr_getdcname(struct rpc_pipe_client
*cli
,
212 TALLOC_CTX
*mem_ctx
, int argc
,
216 WERROR werr
= WERR_OK
;
217 uint32_t flags
= DS_RETURN_DNS_NAME
;
218 const char *server_name
= cli
->desthost
;
219 const char *domain_name
= NULL
;
220 struct GUID domain_guid
= GUID_zero();
221 struct GUID site_guid
= GUID_zero();
222 struct netr_DsRGetDCNameInfo
*info
= NULL
;
223 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
226 fprintf(stderr
, "Usage: %s [domain_name] [domain_guid] "
227 "[site_guid] [flags]\n", argv
[0]);
232 domain_name
= argv
[1];
235 if (!NT_STATUS_IS_OK(GUID_from_string(argv
[2], &domain_guid
))) {
236 return WERR_NOT_ENOUGH_MEMORY
;
241 if (!NT_STATUS_IS_OK(GUID_from_string(argv
[3], &site_guid
))) {
242 return WERR_NOT_ENOUGH_MEMORY
;
247 sscanf(argv
[4], "%x", &flags
);
249 result
= dcerpc_netr_DsRGetDCName(b
, mem_ctx
,
257 if (!NT_STATUS_IS_OK(result
)) {
258 return ntstatus_to_werror(result
);
261 if (W_ERROR_IS_OK(werr
)) {
262 d_printf("DsGetDcName gave: %s\n",
263 NDR_PRINT_STRUCT_STRING(mem_ctx
, netr_DsRGetDCNameInfo
, info
));
267 printf("rpccli_netlogon_dsr_getdcname returned %s\n",
273 static WERROR
cmd_netlogon_dsr_getdcnameex(struct rpc_pipe_client
*cli
,
274 TALLOC_CTX
*mem_ctx
, int argc
,
279 uint32_t flags
= DS_RETURN_DNS_NAME
;
280 const char *server_name
= cli
->desthost
;
281 const char *domain_name
;
282 const char *site_name
= NULL
;
283 struct GUID domain_guid
= GUID_zero();
284 struct netr_DsRGetDCNameInfo
*info
= NULL
;
285 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
288 fprintf(stderr
, "Usage: %s [domain_name] [domain_guid] "
289 "[site_name] [flags]\n", argv
[0]);
293 domain_name
= argv
[1];
296 if (!NT_STATUS_IS_OK(GUID_from_string(argv
[2], &domain_guid
))) {
297 return WERR_NOT_ENOUGH_MEMORY
;
306 sscanf(argv
[4], "%x", &flags
);
309 status
= dcerpc_netr_DsRGetDCNameEx(b
, mem_ctx
,
317 if (!NT_STATUS_IS_OK(status
)) {
318 return ntstatus_to_werror(status
);
321 if (!W_ERROR_IS_OK(result
)) {
325 d_printf("DsRGetDCNameEx gave %s\n",
326 NDR_PRINT_STRUCT_STRING(mem_ctx
, netr_DsRGetDCNameInfo
, info
));
331 static WERROR
cmd_netlogon_dsr_getdcnameex2(struct rpc_pipe_client
*cli
,
332 TALLOC_CTX
*mem_ctx
, int argc
,
337 uint32_t flags
= DS_RETURN_DNS_NAME
;
338 const char *server_name
= cli
->desthost
;
339 const char *domain_name
= NULL
;
340 const char *client_account
= NULL
;
342 const char *site_name
= NULL
;
343 struct GUID domain_guid
= GUID_zero();
344 struct netr_DsRGetDCNameInfo
*info
= NULL
;
345 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
348 fprintf(stderr
, "Usage: %s [client_account] [acb_mask] "
349 "[domain_name] [domain_guid] [site_name] "
350 "[flags]\n", argv
[0]);
355 client_account
= argv
[1];
359 mask
= atoi(argv
[2]);
363 domain_name
= argv
[3];
367 if (!NT_STATUS_IS_OK(GUID_from_string(argv
[4], &domain_guid
))) {
368 return WERR_NOT_ENOUGH_MEMORY
;
377 sscanf(argv
[6], "%x", &flags
);
380 status
= dcerpc_netr_DsRGetDCNameEx2(b
, mem_ctx
,
390 if (!NT_STATUS_IS_OK(status
)) {
391 return ntstatus_to_werror(status
);
394 if (!W_ERROR_IS_OK(result
)) {
398 d_printf("DsRGetDCNameEx2 gave %s\n",
399 NDR_PRINT_STRUCT_STRING(mem_ctx
, netr_DsRGetDCNameInfo
, info
));
405 static WERROR
cmd_netlogon_dsr_getsitename(struct rpc_pipe_client
*cli
,
406 TALLOC_CTX
*mem_ctx
, int argc
,
411 const char *sitename
= NULL
;
412 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
415 fprintf(stderr
, "Usage: %s computername\n", argv
[0]);
419 status
= dcerpc_netr_DsRGetSiteName(b
, mem_ctx
,
423 if (!NT_STATUS_IS_OK(status
)) {
424 return ntstatus_to_werror(status
);
427 if (!W_ERROR_IS_OK(werr
)) {
428 printf("rpccli_netlogon_dsr_gesitename returned %s\n",
429 nt_errstr(werror_to_ntstatus(werr
)));
433 printf("Computer %s is on Site: %s\n", argv
[1], sitename
);
438 static WERROR
cmd_netlogon_logon_ctrl(struct rpc_pipe_client
*cli
,
439 TALLOC_CTX
*mem_ctx
, int argc
,
442 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
444 const char *logon_server
= cli
->desthost
;
445 enum netr_LogonControlCode function_code
= 1;
447 union netr_CONTROL_QUERY_INFORMATION info
;
448 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
451 fprintf(stderr
, "Usage: %s <logon_server> <function_code> "
452 "<level>\n", argv
[0]);
457 logon_server
= argv
[1];
461 function_code
= atoi(argv
[2]);
465 level
= atoi(argv
[3]);
468 status
= dcerpc_netr_LogonControl(b
, mem_ctx
,
474 if (!NT_STATUS_IS_OK(status
)) {
475 return ntstatus_to_werror(status
);
478 if (!W_ERROR_IS_OK(werr
)) {
482 /* Display results */
487 /* Log on a domain user */
489 static NTSTATUS
cmd_netlogon_sam_logon(struct rpc_pipe_client
*cli
,
490 TALLOC_CTX
*mem_ctx
, int argc
,
493 NTSTATUS result
= NT_STATUS_UNSUCCESSFUL
;
494 int logon_type
= NetlogonNetworkInformation
;
495 const char *username
, *password
;
496 uint32_t logon_param
= 0;
497 const char *workstation
= NULL
;
498 struct netr_SamInfo3
*info3
= NULL
;
499 uint8_t authoritative
= 0;
501 uint16_t validation_level
;
502 union netr_Validation
*validation
= NULL
;
503 uint64_t logon_id
= 0;
505 /* Check arguments */
507 if (argc
< 3 || argc
> 6) {
508 fprintf(stderr
, "Usage: samlogon <username> <password> [workstation]"
509 "[logon_type (1 or 2)] [logon_parameter]\n");
517 workstation
= argv
[3];
520 sscanf(argv
[4], "%i", &logon_type
);
523 sscanf(argv
[5], "%x", &logon_param
);
525 if (rpcclient_netlogon_creds
== NULL
) {
526 result
= NT_STATUS_UNSUCCESSFUL
;
529 logon_id
= generate_random_u64();
531 /* Perform the sam logon */
533 result
= rpccli_netlogon_password_logon(rpcclient_netlogon_creds
,
547 if (!NT_STATUS_IS_OK(result
))
550 result
= map_validation_to_info3(mem_ctx
,
554 if (!NT_STATUS_IS_OK(result
)) {
562 /* Change the trust account password */
564 static NTSTATUS
cmd_netlogon_change_trust_pw(struct rpc_pipe_client
*cli
,
565 TALLOC_CTX
*mem_ctx
, int argc
,
568 NTSTATUS result
= NT_STATUS_UNSUCCESSFUL
;
569 const char *dcname
= cli
->desthost
;
571 /* Check arguments */
574 fprintf(stderr
, "Usage: change_trust_pw");
578 result
= trust_pw_change(rpcclient_netlogon_creds
,
584 if (!NT_STATUS_IS_OK(result
))
591 static WERROR
cmd_netlogon_gettrustrid(struct rpc_pipe_client
*cli
,
592 TALLOC_CTX
*mem_ctx
, int argc
,
595 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
596 WERROR werr
= WERR_GEN_FAILURE
;
597 const char *server_name
= cli
->desthost
;
598 const char *domain_name
= lp_workgroup();
600 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
602 if (argc
< 1 || argc
> 3) {
603 fprintf(stderr
, "Usage: %s <server_name> <domain_name>\n",
609 server_name
= argv
[1];
613 domain_name
= argv
[2];
616 status
= dcerpc_netr_LogonGetTrustRid(b
, mem_ctx
,
621 if (!NT_STATUS_IS_OK(status
)) {
622 werr
= ntstatus_to_werror(status
);
626 if (W_ERROR_IS_OK(werr
)) {
627 printf("Rid: %d\n", rid
);
633 static WERROR
cmd_netlogon_dsr_enumtrustdom(struct rpc_pipe_client
*cli
,
634 TALLOC_CTX
*mem_ctx
, int argc
,
637 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
638 WERROR werr
= WERR_GEN_FAILURE
;
639 const char *server_name
= cli
->desthost
;
640 uint32_t trust_flags
= NETR_TRUST_FLAG_IN_FOREST
;
641 struct netr_DomainTrustList trusts
;
642 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
644 if (argc
< 1 || argc
> 3) {
645 fprintf(stderr
, "Usage: %s <server_name> <trust_flags>\n",
651 server_name
= argv
[1];
655 sscanf(argv
[2], "%x", &trust_flags
);
658 status
= dcerpc_netr_DsrEnumerateDomainTrusts(b
, mem_ctx
,
663 if (!NT_STATUS_IS_OK(status
)) {
664 werr
= ntstatus_to_werror(status
);
668 if (W_ERROR_IS_OK(werr
)) {
671 printf("%d domains returned\n", trusts
.count
);
673 for (i
=0; i
<trusts
.count
; i
++ ) {
675 trusts
.array
[i
].dns_name
,
676 trusts
.array
[i
].netbios_name
);
683 static WERROR
cmd_netlogon_deregisterdnsrecords(struct rpc_pipe_client
*cli
,
684 TALLOC_CTX
*mem_ctx
, int argc
,
687 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
688 WERROR werr
= WERR_GEN_FAILURE
;
689 const char *server_name
= cli
->desthost
;
690 const char *domain
= lp_workgroup();
691 const char *dns_host
= NULL
;
692 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
694 if (argc
< 1 || argc
> 4) {
695 fprintf(stderr
, "Usage: %s <server_name> <domain_name> "
696 "<dns_host>\n", argv
[0]);
701 server_name
= argv
[1];
712 status
= dcerpc_netr_DsrDeregisterDNSHostRecords(b
, mem_ctx
,
719 if (!NT_STATUS_IS_OK(status
)) {
720 werr
= ntstatus_to_werror(status
);
724 if (W_ERROR_IS_OK(werr
)) {
731 static WERROR
cmd_netlogon_dsr_getforesttrustinfo(struct rpc_pipe_client
*cli
,
732 TALLOC_CTX
*mem_ctx
, int argc
,
735 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
736 WERROR werr
= WERR_GEN_FAILURE
;
737 const char *server_name
= cli
->desthost
;
738 const char *trusted_domain_name
= NULL
;
739 struct lsa_ForestTrustInformation
*info
= NULL
;
741 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
743 if (argc
< 1 || argc
> 4) {
744 fprintf(stderr
, "Usage: %s <server_name> <trusted_domain_name> "
745 "<flags>\n", argv
[0]);
750 server_name
= argv
[1];
754 trusted_domain_name
= argv
[2];
758 sscanf(argv
[3], "%x", &flags
);
761 status
= dcerpc_netr_DsRGetForestTrustInformation(b
, mem_ctx
,
767 if (!NT_STATUS_IS_OK(status
)) {
768 werr
= ntstatus_to_werror(status
);
772 if (W_ERROR_IS_OK(werr
)) {
779 static NTSTATUS
cmd_netlogon_enumtrusteddomains(struct rpc_pipe_client
*cli
,
780 TALLOC_CTX
*mem_ctx
, int argc
,
783 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
785 const char *server_name
= cli
->desthost
;
786 struct netr_Blob blob
;
787 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
790 if (argc
< 1 || argc
> 3) {
791 fprintf(stderr
, "Usage: %s <server_name>\n", argv
[0]);
796 server_name
= argv
[1];
799 status
= dcerpc_netr_NetrEnumerateTrustedDomains(b
, mem_ctx
,
803 if (!NT_STATUS_IS_OK(status
)) {
807 if (!NT_STATUS_IS_OK(result
)) {
813 dump_data(1, blob
.data
, blob
.length
);
818 static WERROR
cmd_netlogon_enumtrusteddomainsex(struct rpc_pipe_client
*cli
,
819 TALLOC_CTX
*mem_ctx
, int argc
,
822 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
823 WERROR werr
= WERR_GEN_FAILURE
;
824 const char *server_name
= cli
->desthost
;
825 struct netr_DomainTrustList list
;
826 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
828 if (argc
< 1 || argc
> 3) {
829 fprintf(stderr
, "Usage: %s <server_name>\n", argv
[0]);
834 server_name
= argv
[1];
837 status
= dcerpc_netr_NetrEnumerateTrustedDomainsEx(b
, mem_ctx
,
841 if (!NT_STATUS_IS_OK(status
)) {
842 werr
= ntstatus_to_werror(status
);
846 if (W_ERROR_IS_OK(werr
)) {
853 static WERROR
cmd_netlogon_getdcsitecoverage(struct rpc_pipe_client
*cli
,
854 TALLOC_CTX
*mem_ctx
, int argc
,
857 NTSTATUS status
= NT_STATUS_UNSUCCESSFUL
;
858 WERROR werr
= WERR_GEN_FAILURE
;
859 const char *server_name
= cli
->desthost
;
860 struct DcSitesCtr
*ctr
= NULL
;
861 struct dcerpc_binding_handle
*b
= cli
->binding_handle
;
863 if (argc
< 1 || argc
> 3) {
864 fprintf(stderr
, "Usage: %s <server_name>\n", argv
[0]);
869 server_name
= argv
[1];
872 status
= dcerpc_netr_DsrGetDcSiteCoverageW(b
, mem_ctx
,
876 if (!NT_STATUS_IS_OK(status
)) {
877 werr
= ntstatus_to_werror(status
);
881 if (W_ERROR_IS_OK(werr
) && ctr
->num_sites
) {
883 printf("sites covered by this DC: %d\n", ctr
->num_sites
);
884 for (i
=0; i
<ctr
->num_sites
; i
++) {
885 printf("%s\n", ctr
->sites
[i
].string
);
892 static NTSTATUS
cmd_netlogon_capabilities(struct rpc_pipe_client
*cli
,
893 TALLOC_CTX
*mem_ctx
, int argc
,
896 struct netlogon_creds_cli_lck
*lck
;
897 union netr_Capabilities capabilities
;
901 fprintf(stderr
, "Usage: %s\n", argv
[0]);
905 status
= netlogon_creds_cli_lck(rpcclient_netlogon_creds
,
906 NETLOGON_CREDS_CLI_LCK_EXCLUSIVE
,
908 if (!NT_STATUS_IS_OK(status
)) {
909 fprintf(stderr
, "netlogon_creds_cli_lck failed: %s\n",
914 status
= netlogon_creds_cli_check(rpcclient_netlogon_creds
,
917 if (!NT_STATUS_IS_OK(status
)) {
918 fprintf(stderr
, "netlogon_creds_cli_check failed: %s\n",
925 printf("capabilities: 0x%08x\n", capabilities
.server_capabilities
);
930 static NTSTATUS
cmd_netlogon_logongetdomaininfo(struct rpc_pipe_client
*cli
,
931 TALLOC_CTX
*mem_ctx
, int argc
,
934 union netr_WorkstationInfo query
;
935 struct netr_WorkstationInformation workstation_info
;
936 union netr_DomainInfo
*domain_info
;
941 fprintf(stderr
, "Usage: %s\n", argv
[0]);
945 ZERO_STRUCT(workstation_info
);
947 query
.workstation_info
= &workstation_info
;
949 status
= netlogon_creds_cli_LogonGetDomainInfo(rpcclient_netlogon_creds
,
955 if (!NT_STATUS_IS_OK(status
)) {
956 fprintf(stderr
, "netlogon_creds_cli_LogonGetDomainInfo failed: %s\n",
961 s
= NDR_PRINT_STRUCT_STRING(mem_ctx
, netr_DomainInformation
, domain_info
->domain_info
);
970 /* List of commands exported by this module */
972 struct cmd_set netlogon_commands
[] = {
979 .name
= "logonctrl2",
980 .returntype
= RPC_RTYPE_WERROR
,
982 .wfn
= cmd_netlogon_logon_ctrl2
,
983 .table
= &ndr_table_netlogon
,
985 .description
= "Logon Control 2",
989 .name
= "getanydcname",
990 .returntype
= RPC_RTYPE_WERROR
,
992 .wfn
= cmd_netlogon_getanydcname
,
993 .table
= &ndr_table_netlogon
,
995 .description
= "Get trusted DC name",
1000 .returntype
= RPC_RTYPE_WERROR
,
1002 .wfn
= cmd_netlogon_getdcname
,
1003 .table
= &ndr_table_netlogon
,
1005 .description
= "Get trusted PDC name",
1009 .name
= "dsr_getdcname",
1010 .returntype
= RPC_RTYPE_WERROR
,
1012 .wfn
= cmd_netlogon_dsr_getdcname
,
1013 .table
= &ndr_table_netlogon
,
1015 .description
= "Get trusted DC name",
1019 .name
= "dsr_getdcnameex",
1020 .returntype
= RPC_RTYPE_WERROR
,
1022 .wfn
= cmd_netlogon_dsr_getdcnameex
,
1023 .table
= &ndr_table_netlogon
,
1025 .description
= "Get trusted DC name",
1029 .name
= "dsr_getdcnameex2",
1030 .returntype
= RPC_RTYPE_WERROR
,
1032 .wfn
= cmd_netlogon_dsr_getdcnameex2
,
1033 .table
= &ndr_table_netlogon
,
1035 .description
= "Get trusted DC name",
1039 .name
= "dsr_getsitename",
1040 .returntype
= RPC_RTYPE_WERROR
,
1042 .wfn
= cmd_netlogon_dsr_getsitename
,
1043 .table
= &ndr_table_netlogon
,
1045 .description
= "Get sitename",
1049 .name
= "dsr_getforesttrustinfo",
1050 .returntype
= RPC_RTYPE_WERROR
,
1052 .wfn
= cmd_netlogon_dsr_getforesttrustinfo
,
1053 .table
= &ndr_table_netlogon
,
1055 .description
= "Get Forest Trust Info",
1059 .name
= "logonctrl",
1060 .returntype
= RPC_RTYPE_WERROR
,
1062 .wfn
= cmd_netlogon_logon_ctrl
,
1063 .table
= &ndr_table_netlogon
,
1065 .description
= "Logon Control",
1070 .returntype
= RPC_RTYPE_NTSTATUS
,
1071 .ntfn
= cmd_netlogon_sam_logon
,
1073 .table
= &ndr_table_netlogon
,
1075 .description
= "Sam Logon",
1077 .use_netlogon_creds
= true,
1080 .name
= "change_trust_pw",
1081 .returntype
= RPC_RTYPE_NTSTATUS
,
1082 .ntfn
= cmd_netlogon_change_trust_pw
,
1084 .table
= &ndr_table_netlogon
,
1086 .description
= "Change Trust Account Password",
1088 .use_netlogon_creds
= true,
1091 .name
= "gettrustrid",
1092 .returntype
= RPC_RTYPE_WERROR
,
1094 .wfn
= cmd_netlogon_gettrustrid
,
1095 .table
= &ndr_table_netlogon
,
1097 .description
= "Get trust rid",
1101 .name
= "dsr_enumtrustdom",
1102 .returntype
= RPC_RTYPE_WERROR
,
1104 .wfn
= cmd_netlogon_dsr_enumtrustdom
,
1105 .table
= &ndr_table_netlogon
,
1107 .description
= "Enumerate trusted domains",
1111 .name
= "dsenumdomtrusts",
1112 .returntype
= RPC_RTYPE_WERROR
,
1114 .wfn
= cmd_netlogon_dsr_enumtrustdom
,
1115 .table
= &ndr_table_netlogon
,
1117 .description
= "Enumerate all trusted domains in an AD forest",
1121 .name
= "deregisterdnsrecords",
1122 .returntype
= RPC_RTYPE_WERROR
,
1124 .wfn
= cmd_netlogon_deregisterdnsrecords
,
1125 .table
= &ndr_table_netlogon
,
1127 .description
= "Deregister DNS records",
1131 .name
= "netrenumtrusteddomains",
1132 .returntype
= RPC_RTYPE_NTSTATUS
,
1133 .ntfn
= cmd_netlogon_enumtrusteddomains
,
1135 .table
= &ndr_table_netlogon
,
1137 .description
= "Enumerate trusted domains",
1141 .name
= "netrenumtrusteddomainsex",
1142 .returntype
= RPC_RTYPE_WERROR
,
1144 .wfn
= cmd_netlogon_enumtrusteddomainsex
,
1145 .table
= &ndr_table_netlogon
,
1147 .description
= "Enumerate trusted domains",
1151 .name
= "getdcsitecoverage",
1152 .returntype
= RPC_RTYPE_WERROR
,
1154 .wfn
= cmd_netlogon_getdcsitecoverage
,
1155 .table
= &ndr_table_netlogon
,
1157 .description
= "Get the Site-Coverage from a DC",
1161 .name
= "capabilities",
1162 .returntype
= RPC_RTYPE_NTSTATUS
,
1163 .ntfn
= cmd_netlogon_capabilities
,
1165 .table
= &ndr_table_netlogon
,
1167 .description
= "Return Capabilities",
1169 .use_netlogon_creds
= true,
1172 .name
= "logongetdomaininfo",
1173 .returntype
= RPC_RTYPE_NTSTATUS
,
1174 .ntfn
= cmd_netlogon_logongetdomaininfo
,
1176 .table
= &ndr_table_netlogon
,
1178 .description
= "Return LogonGetDomainInfo",
1180 .use_netlogon_creds
= true,