diff options
Diffstat (limited to 'source3/rpcclient/cmd_samr.c')
-rw-r--r-- | source3/rpcclient/cmd_samr.c | 152 |
1 files changed, 9 insertions, 143 deletions
diff --git a/source3/rpcclient/cmd_samr.c b/source3/rpcclient/cmd_samr.c index b4cfb1eb29..3cef720ac5 100644 --- a/source3/rpcclient/cmd_samr.c +++ b/source3/rpcclient/cmd_samr.c @@ -1207,14 +1207,13 @@ static NTSTATUS cmd_samr_delete_alias(struct rpc_pipe_client *cli, /* Query display info */ -static NTSTATUS cmd_samr_query_dispinfo_int(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv, - int opcode) +static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + int argc, const char **argv) { POLICY_HND connect_pol, domain_pol; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - uint32 start_idx=0, max_entries=250, max_size = (uint32) -1, num_entries, i; + uint32 start_idx=0, max_entries=250, max_size = 0xffff, num_entries, i; uint32 access_mask = MAXIMUM_ALLOWED_ACCESS; uint32 info_level = 1; SAM_DISPINFO_CTR ctr; @@ -1250,7 +1249,6 @@ static NTSTATUS cmd_samr_query_dispinfo_int(struct rpc_pipe_client *cli, if (argc >= 6) sscanf(argv[5], "%x", &access_mask); - /* Get sam policy handle */ result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, @@ -1302,31 +1300,11 @@ static NTSTATUS cmd_samr_query_dispinfo_int(struct rpc_pipe_client *cli, if (!got_params) get_query_dispinfo_params( loop_count, &max_entries, &max_size); - - switch (opcode) { - case SAMR_QUERY_DISPINFO: - result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol, - &start_idx, info_level, - &num_entries, max_entries, - max_size, &ctr); - break; - case SAMR_QUERY_DISPINFO2: - result = rpccli_samr_query_dispinfo2(cli, mem_ctx, &domain_pol, - &start_idx, info_level, - &num_entries, max_entries, - max_size, &ctr); - break; - case SAMR_QUERY_DISPINFO3: - result = rpccli_samr_query_dispinfo3(cli, mem_ctx, &domain_pol, - &start_idx, info_level, - &num_entries, max_entries, - max_size, &ctr); - break; - default: - printf("unknown opcode: %d\n", opcode); - return NT_STATUS_INVALID_PARAMETER; - break; - } + + result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol, + &start_idx, info_level, + &num_entries, max_entries, + max_size, &ctr); loop_count++; @@ -1363,114 +1341,6 @@ static NTSTATUS cmd_samr_query_dispinfo_int(struct rpc_pipe_client *cli, return result; } -static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv) -{ - return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO); -} - -static NTSTATUS cmd_samr_query_dispinfo2(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv) -{ - return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO2); -} - -static NTSTATUS cmd_samr_query_dispinfo3(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv) -{ - return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO3); -} - -/* Query display info index */ - -static NTSTATUS cmd_samr_get_dispenum_index_int(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv, - int opcode) -{ - POLICY_HND connect_pol, domain_pol; - NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - uint32 access_mask = MAXIMUM_ALLOWED_ACCESS; - uint16 info_level = 1; - uint32 idx; - - if (argc < 2 || argc > 3) { - printf("Usage: %s name [info level]\n", argv[0]); - return NT_STATUS_OK; - } - - if (argc >= 3) { - sscanf(argv[2], "%hd", &info_level); - } - - /* Get sam policy handle */ - - result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, - &connect_pol); - - if (!NT_STATUS_IS_OK(result)) { - goto done; - } - - /* Get domain policy handle */ - - result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol, - access_mask, - &domain_sid, &domain_pol); - - if (!NT_STATUS_IS_OK(result)) { - goto done; - } - - /* Query display info index */ - - switch (opcode) { - case SAMR_GET_DISPENUM_INDEX: - result = rpccli_samr_get_dispenum_index(cli, mem_ctx, &domain_pol, - info_level, argv[1], &idx); - break; - case SAMR_GET_DISPENUM_INDEX2: - result = rpccli_samr_get_dispenum_index2(cli, mem_ctx, &domain_pol, - info_level, argv[1], &idx); - break; - default: - printf("unknown opcode\n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (NT_STATUS_IS_ERR(result)) { - goto done; - }; - - printf("idx is: %d (0x%08x)\n", idx, idx); - - rpccli_samr_close(cli, mem_ctx, &domain_pol); - rpccli_samr_close(cli, mem_ctx, &connect_pol); - done: - return result; -} - -/* Query display info index */ - -static NTSTATUS cmd_samr_get_dispenum_index(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv) -{ - return cmd_samr_get_dispenum_index_int(cli, mem_ctx, argc, argv, SAMR_GET_DISPENUM_INDEX); -} - -/* Query display info index2 */ - -static NTSTATUS cmd_samr_get_dispenum_index2(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - int argc, const char **argv) -{ - return cmd_samr_get_dispenum_index_int(cli, mem_ctx, argc, argv, SAMR_GET_DISPENUM_INDEX2); -} - /* Query domain info */ static NTSTATUS cmd_samr_query_dominfo(struct rpc_pipe_client *cli, @@ -2402,10 +2272,6 @@ struct cmd_set samr_commands[] = { { "queryaliasmem", RPC_RTYPE_NTSTATUS, cmd_samr_query_aliasmem, NULL, PI_SAMR, NULL, "Query alias membership", "" }, { "deletealias", RPC_RTYPE_NTSTATUS, cmd_samr_delete_alias, NULL, PI_SAMR, NULL, "Delete an alias", "" }, { "querydispinfo", RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo, NULL, PI_SAMR, NULL, "Query display info", "" }, - { "querydispinfo2", RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo2, NULL, PI_SAMR, NULL, "Query display info 2", "" }, - { "querydispinfo3", RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo3, NULL, PI_SAMR, NULL, "Query display info 3", "" }, - { "getdispenumindex", RPC_RTYPE_NTSTATUS, cmd_samr_get_dispenum_index, NULL, PI_SAMR, NULL, "Query display info index", "" }, - { "getdispenumindex2", RPC_RTYPE_NTSTATUS, cmd_samr_get_dispenum_index2, NULL, PI_SAMR, NULL, "Query display info index", "" }, { "querydominfo", RPC_RTYPE_NTSTATUS, cmd_samr_query_dominfo, NULL, PI_SAMR, NULL, "Query domain info", "" }, { "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", "" }, |