diff options
author | Jeremy Allison <jra@samba.org> | 2008-02-08 17:00:31 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2008-02-08 17:00:31 -0800 |
commit | c7f34889591174ae335a37ab62747afab8fc418c (patch) | |
tree | 3dacbead8b7c8425e0e69bcebaa82b810f70976d /source3/rpcclient | |
parent | 7a694af2f4581b6ca96745f7b82318cb75d26d6e (diff) | |
parent | 5da927716a857ce686f3b75476671d32f047d2c0 (diff) | |
download | samba-c7f34889591174ae335a37ab62747afab8fc418c.tar.gz samba-c7f34889591174ae335a37ab62747afab8fc418c.tar.bz2 samba-c7f34889591174ae335a37ab62747afab8fc418c.zip |
Merge branch 'v3-2-test' of ssh://jra@git.samba.org/data/git/samba into v3-2-test
(This used to be commit 33a9859cbdb0dac035af36aa561b6acb24196c86)
Diffstat (limited to 'source3/rpcclient')
-rw-r--r-- | source3/rpcclient/cmd_lsarpc.c | 12 | ||||
-rw-r--r-- | source3/rpcclient/cmd_netlogon.c | 26 | ||||
-rw-r--r-- | source3/rpcclient/cmd_samr.c | 73 |
3 files changed, 94 insertions, 17 deletions
diff --git a/source3/rpcclient/cmd_lsarpc.c b/source3/rpcclient/cmd_lsarpc.c index fb8ca76d3b..54791f143c 100644 --- a/source3/rpcclient/cmd_lsarpc.c +++ b/source3/rpcclient/cmd_lsarpc.c @@ -632,7 +632,7 @@ static NTSTATUS cmd_lsa_enum_privsaccounts(struct rpc_pipe_client *cli, const char **argv) { POLICY_HND dom_pol; - POLICY_HND user_pol; + POLICY_HND *user_pol = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; uint32 access_desired = 0x000f000f; @@ -657,12 +657,16 @@ static NTSTATUS cmd_lsa_enum_privsaccounts(struct rpc_pipe_client *cli, if (!NT_STATUS_IS_OK(result)) goto done; - result = rpccli_lsa_open_account(cli, mem_ctx, &dom_pol, &sid, access_desired, &user_pol); + result = rpccli_lsa_OpenAccount(cli, mem_ctx, + &dom_pol, + &sid, + access_desired, + &user_pol); if (!NT_STATUS_IS_OK(result)) goto done; - result = rpccli_lsa_enum_privsaccount(cli, mem_ctx, &user_pol, &count, &set); + result = rpccli_lsa_enum_privsaccount(cli, mem_ctx, user_pol, &count, &set); if (!NT_STATUS_IS_OK(result)) goto done; @@ -1008,7 +1012,7 @@ static NTSTATUS cmd_lsa_query_trustdominfobyname(struct rpc_pipe_client *cli, result = rpccli_lsa_QueryTrustedDomainInfoByName(cli, mem_ctx, &pol, - trusted_domain, + &trusted_domain, info_class, &info); if (!NT_STATUS_IS_OK(result)) diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index ecd033f39d..a752003e8d 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -126,13 +126,14 @@ static WERROR cmd_netlogon_dsr_getdcname(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { - WERROR result; + NTSTATUS result; + WERROR werr = WERR_OK; uint32 flags = DS_RETURN_DNS_NAME; const char *server_name = cli->cli->desthost; const char *domain_name; struct GUID domain_guid = GUID_zero(); struct GUID site_guid = GUID_zero(); - struct DS_DOMAIN_CONTROLLER_INFO *info = NULL; + struct netr_DsRGetDCNameInfo *info = NULL; if (argc < 2) { fprintf(stderr, "Usage: %s [domain_name] [domain_guid] " @@ -160,20 +161,25 @@ static WERROR cmd_netlogon_dsr_getdcname(struct rpc_pipe_client *cli, debug_dsdcinfo_flags(1,flags); - result = rpccli_netlogon_dsr_getdcname(cli, mem_ctx, server_name, domain_name, - &domain_guid, &site_guid, flags, - &info); + result = rpccli_netr_DsRGetDCName(cli, mem_ctx, + server_name, + domain_name, + &domain_guid, + &site_guid, + flags, + &info, + &werr); - if (W_ERROR_IS_OK(result)) { - d_printf("DsGetDcName gave\n"); - display_ds_domain_controller_info(mem_ctx, info); + if (W_ERROR_IS_OK(werr)) { + d_printf("DsGetDcName gave: %s\n", + NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info)); return WERR_OK; } printf("rpccli_netlogon_dsr_getdcname returned %s\n", - dos_errstr(result)); + dos_errstr(werr)); - return result; + return werr; } static WERROR cmd_netlogon_dsr_getdcnameex(struct rpc_pipe_client *cli, diff --git a/source3/rpcclient/cmd_samr.c b/source3/rpcclient/cmd_samr.c index edc3c9d4b2..4f0e45ec74 100644 --- a/source3/rpcclient/cmd_samr.c +++ b/source3/rpcclient/cmd_samr.c @@ -245,7 +245,7 @@ static void display_sam_info_1(struct samr_DispEntryGeneral *r) { printf("index: 0x%x ", r->idx); printf("RID: 0x%x ", r->rid); - printf("acb: 0x%x ", r->acct_flags); + printf("acb: 0x%08x ", r->acct_flags); printf("Account: %s\t", r->account_name.string); printf("Name: %s\t", r->full_name.string); printf("Desc: %s\n", r->description.string); @@ -255,7 +255,7 @@ static void display_sam_info_2(struct samr_DispEntryFull *r) { printf("index: 0x%x ", r->idx); printf("RID: 0x%x ", r->rid); - printf("acb: 0x%x ", r->acct_flags); + printf("acb: 0x%08x ", r->acct_flags); printf("Account: %s\t", r->account_name.string); printf("Desc: %s\n", r->description.string); } @@ -264,7 +264,7 @@ static void display_sam_info_3(struct samr_DispEntryFullGroup *r) { printf("index: 0x%x ", r->idx); printf("RID: 0x%x ", r->rid); - printf("acb: 0x%x ", r->acct_flags); + printf("acb: 0x%08x ", r->acct_flags); printf("Account: %s\t", r->account_name.string); printf("Desc: %s\n", r->description.string); } @@ -1046,6 +1046,72 @@ static NTSTATUS cmd_samr_enum_als_groups(struct rpc_pipe_client *cli, return result; } +/* Enumerate domains */ + +static NTSTATUS cmd_samr_enum_domains(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + int argc, const char **argv) +{ + POLICY_HND connect_pol; + NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + uint32 start_idx, size, num_entries, i; + uint32 access_mask = SEC_FLAG_MAXIMUM_ALLOWED; + bool got_connect_pol = false; + struct samr_SamArray *sam = NULL; + + if ((argc < 1) || (argc > 2)) { + printf("Usage: %s [access mask]\n", argv[0]); + return NT_STATUS_OK; + } + + if (argc > 2) { + sscanf(argv[2], "%x", &access_mask); + } + + /* Get sam policy handle */ + + result = try_samr_connects(cli, mem_ctx, + access_mask, + &connect_pol); + + if (!NT_STATUS_IS_OK(result)) { + goto done; + } + + got_connect_pol = true; + + /* Enumerate alias groups */ + + start_idx = 0; + size = 0xffff; + + do { + result = rpccli_samr_EnumDomains(cli, mem_ctx, + &connect_pol, + &start_idx, + &sam, + size, + &num_entries); + + if (NT_STATUS_IS_OK(result) || + NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) { + + for (i = 0; i < num_entries; i++) + printf("name:[%s] idx:[0x%x]\n", + sam->entries[i].name.string, + sam->entries[i].idx); + } + } while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)); + + done: + if (got_connect_pol) { + rpccli_samr_Close(cli, mem_ctx, &connect_pol); + } + + return result; +} + + /* Query alias membership */ static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli, @@ -2485,6 +2551,7 @@ struct cmd_set samr_commands[] = { { "enumdomusers", RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_users, NULL, PI_SAMR, NULL, "Enumerate domain users", "" }, { "enumdomgroups", RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_groups, NULL, PI_SAMR, NULL, "Enumerate domain groups", "" }, { "enumalsgroups", RPC_RTYPE_NTSTATUS, cmd_samr_enum_als_groups, NULL, PI_SAMR, NULL, "Enumerate alias groups", "" }, + { "enumdomains", RPC_RTYPE_NTSTATUS, cmd_samr_enum_domains, NULL, PI_SAMR, NULL, "Enumerate domains", "" }, { "createdomuser", RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_user, NULL, PI_SAMR, NULL, "Create domain user", "" }, { "createdomgroup", RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_group, NULL, PI_SAMR, NULL, "Create domain group", "" }, |