Changeset 745 for trunk/server/source3/rpcclient/cmd_netlogon.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source3/rpcclient/cmd_netlogon.c
r414 r745 23 23 #include "rpcclient.h" 24 24 #include "../libcli/auth/libcli_auth.h" 25 #include "../librpc/gen_ndr/cli_netlogon.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" 28 #include "secrets.h" 26 29 27 30 static WERROR cmd_netlogon_logon_ctrl2(struct rpc_pipe_client *cli, … … 37 40 union netr_CONTROL_QUERY_INFORMATION query; 38 41 const char *domain = lp_workgroup(); 42 struct dcerpc_binding_handle *b = cli->binding_handle; 39 43 40 44 if (argc > 5) { … … 69 73 } 70 74 71 status = rpccli_netr_LogonControl2(cli, mem_ctx,75 status = dcerpc_netr_LogonControl2(b, mem_ctx, 72 76 logon_server, 73 77 function_code, … … 97 101 NTSTATUS status; 98 102 int old_timeout; 103 struct dcerpc_binding_handle *b = cli->binding_handle; 99 104 100 105 if (argc != 2) { … … 107 112 rpccli_set_timeout(cli, MAX(old_timeout, 30000)); /* At least 30 sec */ 108 113 109 status = rpccli_netr_GetAnyDCName(cli, mem_ctx,114 status = dcerpc_netr_GetAnyDCName(b, mem_ctx, 110 115 cli->desthost, 111 116 argv[1], … … 137 142 WERROR werr; 138 143 int old_timeout; 144 struct dcerpc_binding_handle *b = cli->binding_handle; 139 145 140 146 if (argc != 2) { … … 147 153 rpccli_set_timeout(cli, MAX(30000, old_timeout)); /* At least 30 sec */ 148 154 149 status = rpccli_netr_GetDcName(cli, mem_ctx,155 status = dcerpc_netr_GetDcName(b, mem_ctx, 150 156 cli->desthost, 151 157 argv[1], … … 181 187 struct GUID site_guid = GUID_zero(); 182 188 struct netr_DsRGetDCNameInfo *info = NULL; 189 struct dcerpc_binding_handle *b = cli->binding_handle; 183 190 184 191 if (argc < 2) { … … 208 215 debug_dsdcinfo_flags(1,flags); 209 216 210 result = rpccli_netr_DsRGetDCName(cli, mem_ctx,217 result = dcerpc_netr_DsRGetDCName(b, mem_ctx, 211 218 server_name, 212 219 domain_name, … … 216 223 &info, 217 224 &werr); 225 if (!NT_STATUS_IS_OK(result)) { 226 return ntstatus_to_werror(result); 227 } 218 228 219 229 if (W_ERROR_IS_OK(werr)) { … … 241 251 struct GUID domain_guid = GUID_zero(); 242 252 struct netr_DsRGetDCNameInfo *info = NULL; 253 struct dcerpc_binding_handle *b = cli->binding_handle; 243 254 244 255 if (argc < 2) { … … 266 277 debug_dsdcinfo_flags(1,flags); 267 278 268 status = rpccli_netr_DsRGetDCNameEx(cli, mem_ctx,279 status = dcerpc_netr_DsRGetDCNameEx(b, mem_ctx, 269 280 server_name, 270 281 domain_name, … … 302 313 struct GUID domain_guid = GUID_zero(); 303 314 struct netr_DsRGetDCNameInfo *info = NULL; 315 struct dcerpc_binding_handle *b = cli->binding_handle; 304 316 305 317 if (argc < 2) { … … 338 350 debug_dsdcinfo_flags(1,flags); 339 351 340 status = rpccli_netr_DsRGetDCNameEx2(cli, mem_ctx,352 status = dcerpc_netr_DsRGetDCNameEx2(b, mem_ctx, 341 353 server_name, 342 354 client_account, … … 370 382 NTSTATUS status; 371 383 const char *sitename = NULL; 384 struct dcerpc_binding_handle *b = cli->binding_handle; 372 385 373 386 if (argc != 2) { … … 376 389 } 377 390 378 status = rpccli_netr_DsRGetSiteName(cli, mem_ctx,391 status = dcerpc_netr_DsRGetSiteName(b, mem_ctx, 379 392 argv[1], 380 393 &sitename, … … 405 418 uint32_t level = 1; 406 419 union netr_CONTROL_QUERY_INFORMATION info; 420 struct dcerpc_binding_handle *b = cli->binding_handle; 407 421 408 422 if (argc > 4) { … … 424 438 } 425 439 426 status = rpccli_netr_LogonControl(cli, mem_ctx,440 status = dcerpc_netr_LogonControl(b, mem_ctx, 427 441 logon_server, 428 442 function_code, … … 465 479 case NETR_DELTA_DELETE_GROUP: 466 480 printf("Delete Group: %d\n", 467 u.delete_account.unknown);481 id.rid); 468 482 break; 469 483 case NETR_DELTA_RENAME_GROUP: … … 498 512 case NETR_DELTA_DELETE_ALIAS: 499 513 printf("Delete Alias: %d\n", 500 r->delta_enum[i].delta_id_union.rid);514 id.rid); 501 515 break; 502 516 case NETR_DELTA_RENAME_ALIAS: … … 514 528 break; 515 529 case NETR_DELTA_POLICY: 516 printf("Policy\n"); 530 printf("Policy: %s\n", 531 sid_string_dbg(id.sid)); 517 532 break; 518 533 case NETR_DELTA_TRUSTED_DOMAIN: … … 521 536 break; 522 537 case NETR_DELTA_DELETE_TRUST: 523 printf("Delete Trust: % d\n",524 u.delete_trust.unknown);538 printf("Delete Trust: %s\n", 539 sid_string_dbg(id.sid)); 525 540 break; 526 541 case NETR_DELTA_ACCOUNT: 527 printf("Account\n"); 542 printf("Account: %s\n", 543 sid_string_dbg(id.sid)); 528 544 break; 529 545 case NETR_DELTA_DELETE_ACCOUNT: 530 printf("Delete Account: % d\n",531 u.delete_account.unknown);546 printf("Delete Account: %s\n", 547 sid_string_dbg(id.sid)); 532 548 break; 533 549 case NETR_DELTA_SECRET: 534 printf("Secret\n"); 550 printf("Secret: %s\n", 551 id.name); 535 552 break; 536 553 case NETR_DELTA_DELETE_SECRET: 537 printf("Delete Secret: % d\n",538 u.delete_secret.unknown);554 printf("Delete Secret: %s\n", 555 id.name); 539 556 break; 540 557 case NETR_DELTA_DELETE_GROUP2: … … 565 582 { 566 583 NTSTATUS result = NT_STATUS_UNSUCCESSFUL; 584 NTSTATUS status; 567 585 const char *logon_server = cli->desthost; 568 586 const char *computername = global_myname(); … … 572 590 uint16_t restart_state = 0; 573 591 uint32_t sync_context = 0; 592 struct dcerpc_binding_handle *b = cli->binding_handle; 574 593 575 594 if (argc > 2) { … … 589 608 netlogon_creds_client_authenticator(cli->dc, &credential); 590 609 591 result = rpccli_netr_DatabaseSync2(cli, mem_ctx,610 status = dcerpc_netr_DatabaseSync2(b, mem_ctx, 592 611 logon_server, 593 612 computername, … … 598 617 &sync_context, 599 618 &delta_enum_array, 600 0xffff); 619 0xffff, 620 &result); 621 if (!NT_STATUS_IS_OK(status)) { 622 return status; 623 } 601 624 602 625 /* Check returned credentials. */ … … 629 652 { 630 653 NTSTATUS result = NT_STATUS_UNSUCCESSFUL; 654 NTSTATUS status; 631 655 uint32_t tmp; 632 656 const char *logon_server = cli->desthost; … … 636 660 enum netr_SamDatabaseID database_id = SAM_DATABASE_DOMAIN; 637 661 uint64_t sequence_num; 662 struct dcerpc_binding_handle *b = cli->binding_handle; 638 663 639 664 if (argc != 3) { … … 652 677 netlogon_creds_client_authenticator(cli->dc, &credential); 653 678 654 result = rpccli_netr_DatabaseDeltas(cli, mem_ctx,679 status = dcerpc_netr_DatabaseDeltas(b, mem_ctx, 655 680 logon_server, 656 681 computername, … … 660 685 &sequence_num, 661 686 &delta_enum_array, 662 0xffff); 687 0xffff, 688 &result); 689 if (!NT_STATUS_IS_OK(status)) { 690 return status; 691 } 663 692 664 693 /* Check returned credentials. */ … … 693 722 int logon_type = NetlogonNetworkInformation; 694 723 const char *username, *password; 695 int auth_level = 2;724 uint16_t validation_level = 3; 696 725 uint32 logon_param = 0; 697 726 const char *workstation = NULL; … … 715 744 716 745 if (argc >= 6) 717 sscanf(argv[5], "%i", &auth_level);746 validation_level = atoi(argv[5]); 718 747 719 748 if (argc == 7) … … 722 751 /* Perform the sam logon */ 723 752 724 result = rpccli_netlogon_sam_logon(cli, mem_ctx, logon_param, lp_workgroup(), username, password, workstation, logon_type);753 result = rpccli_netlogon_sam_logon(cli, mem_ctx, logon_param, lp_workgroup(), username, password, workstation, validation_level, logon_type); 725 754 726 755 if (!NT_STATUS_IS_OK(result)) … … 767 796 const char *domain_name = lp_workgroup(); 768 797 uint32_t rid = 0; 798 struct dcerpc_binding_handle *b = cli->binding_handle; 769 799 770 800 if (argc < 1 || argc > 3) { … … 782 812 } 783 813 784 status = rpccli_netr_LogonGetTrustRid(cli, mem_ctx,814 status = dcerpc_netr_LogonGetTrustRid(b, mem_ctx, 785 815 server_name, 786 816 domain_name, … … 788 818 &werr); 789 819 if (!NT_STATUS_IS_OK(status)) { 820 werr = ntstatus_to_werror(status); 790 821 goto done; 791 822 } … … 807 838 uint32_t trust_flags = NETR_TRUST_FLAG_IN_FOREST; 808 839 struct netr_DomainTrustList trusts; 840 struct dcerpc_binding_handle *b = cli->binding_handle; 809 841 810 842 if (argc < 1 || argc > 3) { … … 822 854 } 823 855 824 status = rpccli_netr_DsrEnumerateDomainTrusts(cli, mem_ctx,856 status = dcerpc_netr_DsrEnumerateDomainTrusts(b, mem_ctx, 825 857 server_name, 826 858 trust_flags, … … 828 860 &werr); 829 861 if (!NT_STATUS_IS_OK(status)) { 862 werr = ntstatus_to_werror(status); 830 863 goto done; 831 864 } … … 855 888 const char *domain = lp_workgroup(); 856 889 const char *dns_host = NULL; 890 struct dcerpc_binding_handle *b = cli->binding_handle; 857 891 858 892 if (argc < 1 || argc > 4) { … … 874 908 } 875 909 876 status = rpccli_netr_DsrDeregisterDNSHostRecords(cli, mem_ctx,910 status = dcerpc_netr_DsrDeregisterDNSHostRecords(b, mem_ctx, 877 911 server_name, 878 912 domain, … … 882 916 &werr); 883 917 if (!NT_STATUS_IS_OK(status)) { 918 werr = ntstatus_to_werror(status); 884 919 goto done; 885 920 } … … 902 937 struct lsa_ForestTrustInformation *info = NULL; 903 938 uint32_t flags = 0; 939 struct dcerpc_binding_handle *b = cli->binding_handle; 904 940 905 941 if (argc < 1 || argc > 4) { … … 921 957 } 922 958 923 status = rpccli_netr_DsRGetForestTrustInformation(cli, mem_ctx,959 status = dcerpc_netr_DsRGetForestTrustInformation(b, mem_ctx, 924 960 server_name, 925 961 trusted_domain_name, … … 928 964 &werr); 929 965 if (!NT_STATUS_IS_OK(status)) { 966 werr = ntstatus_to_werror(status); 930 967 goto done; 931 968 } … … 938 975 } 939 976 940 static WERRORcmd_netlogon_enumtrusteddomains(struct rpc_pipe_client *cli,941 942 977 static NTSTATUS cmd_netlogon_enumtrusteddomains(struct rpc_pipe_client *cli, 978 TALLOC_CTX *mem_ctx, int argc, 979 const char **argv) 943 980 { 944 981 NTSTATUS status = NT_STATUS_UNSUCCESSFUL; 945 WERROR werr = WERR_GENERAL_FAILURE;982 NTSTATUS result; 946 983 const char *server_name = cli->desthost; 947 984 struct netr_Blob blob; 985 struct dcerpc_binding_handle *b = cli->binding_handle; 948 986 949 987 950 988 if (argc < 1 || argc > 3) { 951 989 fprintf(stderr, "Usage: %s <server_name>\n", argv[0]); 952 return WERR_OK;990 return NT_STATUS_OK; 953 991 } 954 992 … … 957 995 } 958 996 959 status = rpccli_netr_NetrEnumerateTrustedDomains(cli, mem_ctx,997 status = dcerpc_netr_NetrEnumerateTrustedDomains(b, mem_ctx, 960 998 server_name, 961 999 &blob, 962 & werr);1000 &result); 963 1001 if (!NT_STATUS_IS_OK(status)) { 964 1002 goto done; 965 1003 } 966 1004 967 if (W_ERROR_IS_OK(werr)) { 968 printf("success\n"); 969 dump_data(1, blob.data, blob.length); 970 } 1005 if (!NT_STATUS_IS_OK(result)) { 1006 status = result; 1007 goto done; 1008 } 1009 1010 printf("success\n"); 1011 dump_data(1, blob.data, blob.length); 971 1012 done: 972 return werr;1013 return status; 973 1014 } 974 1015 … … 981 1022 const char *server_name = cli->desthost; 982 1023 struct netr_DomainTrustList list; 1024 struct dcerpc_binding_handle *b = cli->binding_handle; 983 1025 984 1026 if (argc < 1 || argc > 3) { … … 991 1033 } 992 1034 993 status = rpccli_netr_NetrEnumerateTrustedDomainsEx(cli, mem_ctx,1035 status = dcerpc_netr_NetrEnumerateTrustedDomainsEx(b, mem_ctx, 994 1036 server_name, 995 1037 &list, 996 1038 &werr); 997 1039 if (!NT_STATUS_IS_OK(status)) { 1040 werr = ntstatus_to_werror(status); 998 1041 goto done; 999 1042 } … … 1014 1057 const char *server_name = cli->desthost; 1015 1058 struct DcSitesCtr *ctr = NULL; 1059 struct dcerpc_binding_handle *b = cli->binding_handle; 1016 1060 1017 1061 if (argc < 1 || argc > 3) { … … 1024 1068 } 1025 1069 1026 status = rpccli_netr_DsrGetDcSiteCoverageW(cli, mem_ctx,1070 status = dcerpc_netr_DsrGetDcSiteCoverageW(b, mem_ctx, 1027 1071 server_name, 1028 1072 &ctr, 1029 1073 &werr); 1030 1074 if (!NT_STATUS_IS_OK(status)) { 1075 werr = ntstatus_to_werror(status); 1031 1076 goto done; 1032 1077 } … … 1048 1093 { 1049 1094 NTSTATUS status = NT_STATUS_UNSUCCESSFUL; 1095 NTSTATUS result; 1050 1096 const char *server_name = cli->desthost; 1051 1097 uint32_t neg_flags = NETLOGON_NEG_AUTH2_ADS_FLAGS; … … 1056 1102 struct netr_ChangeLogEntry e; 1057 1103 uint32_t rid = 500; 1104 struct dcerpc_binding_handle *b = cli->binding_handle; 1058 1105 1059 1106 if (argc > 2) { … … 1093 1140 e.delta_type = NETR_DELTA_USER; 1094 1141 1095 status = rpccli_netr_DatabaseRedo(cli, mem_ctx,1142 status = dcerpc_netr_DatabaseRedo(b, mem_ctx, 1096 1143 server_name, 1097 1144 global_myname(), … … 1100 1147 e, 1101 1148 0, /* is calculated automatically */ 1102 &delta_enum_array); 1149 &delta_enum_array, 1150 &result); 1151 if (!NT_STATUS_IS_OK(status)) { 1152 return status; 1153 } 1103 1154 1104 1155 if (!netlogon_creds_client_check(cli->dc, &srv_cred.cred)) { … … 1107 1158 } 1108 1159 1109 return status;1160 return result; 1110 1161 } 1111 1162 … … 1115 1166 { 1116 1167 NTSTATUS status = NT_STATUS_UNSUCCESSFUL; 1168 NTSTATUS result; 1117 1169 struct netr_Authenticator credential; 1118 1170 struct netr_Authenticator return_authenticator; 1119 1171 union netr_Capabilities capabilities; 1120 1172 uint32_t level = 1; 1173 struct dcerpc_binding_handle *b = cli->binding_handle; 1121 1174 1122 1175 if (argc > 2) { … … 1133 1186 netlogon_creds_client_authenticator(cli->dc, &credential); 1134 1187 1135 status = rpccli_netr_LogonGetCapabilities(cli, mem_ctx,1188 status = dcerpc_netr_LogonGetCapabilities(b, mem_ctx, 1136 1189 cli->desthost, 1137 1190 global_myname(), … … 1139 1192 &return_authenticator, 1140 1193 level, 1141 &capabilities); 1194 &capabilities, 1195 &result); 1196 if (!NT_STATUS_IS_OK(status)) { 1197 return status; 1198 } 1142 1199 1143 1200 if (!netlogon_creds_client_check(cli->dc, … … 1149 1206 printf("capabilities: 0x%08x\n", capabilities.server_capabilities); 1150 1207 1151 return status;1208 return result; 1152 1209 } 1153 1210 … … 1175 1232 { "dsenumdomtrusts", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_enumtrustdom, &ndr_table_netlogon.syntax_id, NULL, "Enumerate all trusted domains in an AD forest", "" }, 1176 1233 { "deregisterdnsrecords", RPC_RTYPE_WERROR, NULL, cmd_netlogon_deregisterdnsrecords, &ndr_table_netlogon.syntax_id, NULL, "Deregister DNS records", "" }, 1177 { "netrenumtrusteddomains", RPC_RTYPE_ WERROR, NULL, cmd_netlogon_enumtrusteddomains, &ndr_table_netlogon.syntax_id, NULL, "Enumerate trusted domains", "" },1234 { "netrenumtrusteddomains", RPC_RTYPE_NTSTATUS, cmd_netlogon_enumtrusteddomains, NULL, &ndr_table_netlogon.syntax_id, NULL, "Enumerate trusted domains", "" }, 1178 1235 { "netrenumtrusteddomainsex", RPC_RTYPE_WERROR, NULL, cmd_netlogon_enumtrusteddomainsex, &ndr_table_netlogon.syntax_id, NULL, "Enumerate trusted domains", "" }, 1179 1236 { "getdcsitecoverage", RPC_RTYPE_WERROR, NULL, cmd_netlogon_getdcsitecoverage, &ndr_table_netlogon.syntax_id, NULL, "Get the Site-Coverage from a DC", "" },
Note:
See TracChangeset
for help on using the changeset viewer.