diff options
Diffstat (limited to 'source/rpcclient/cmd_samr.c')
-rw-r--r-- | source/rpcclient/cmd_samr.c | 82 |
1 files changed, 29 insertions, 53 deletions
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c index 53019dc1b23..d3f89540502 100644 --- a/source/rpcclient/cmd_samr.c +++ b/source/rpcclient/cmd_samr.c @@ -568,39 +568,25 @@ static NTSTATUS cmd_samr_query_useraliases(struct cli_state *cli, { POLICY_HND connect_pol, domain_pol; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - DOM_SID *sids; - int num_sids; - uint32 num_aliases, *alias_rids; + uint32 user_rid, num_aliases, *alias_rids; uint32 access_mask = MAXIMUM_ALLOWED_ACCESS; int i; fstring server; - DOM_SID2 *sid2; + DOM_SID tmp_sid; + DOM_SID2 sid; + DOM_SID global_sid_Builtin; - if (argc < 3) { - printf("Usage: %s builtin|domain sid1 sid2 ...\n", argv[0]); - return NT_STATUS_INVALID_PARAMETER; - } + string_to_sid(&global_sid_Builtin, "S-1-5-32"); - sids = NULL; - num_sids = 0; - - for (i=2; i<argc; i++) { - DOM_SID tmp_sid; - if (!string_to_sid(&tmp_sid, argv[i])) { - printf("%s is not a legal SID\n", argv[i]); - return NT_STATUS_INVALID_PARAMETER; - } - add_sid_to_array(mem_ctx, &tmp_sid, &sids, &num_sids); + if ((argc < 3) || (argc > 4)) { + printf("Usage: %s builtin|domain rid [access mask]\n", argv[0]); + return NT_STATUS_OK; } - sid2 = TALLOC_ARRAY(mem_ctx, DOM_SID2, num_sids); - if (sid2 == NULL) - return NT_STATUS_NO_MEMORY; - - for (i=0; i<num_sids; i++) { - sid_copy(&sid2[i].sid, &sids[i]); - sid2[i].num_auths = sid2[i].sid.num_auths; - } + sscanf(argv[2], "%i", &user_rid); + + if (argc > 3) + sscanf(argv[3], "%x", &access_mask); slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost); strupper_m(server); @@ -618,19 +604,18 @@ static NTSTATUS cmd_samr_query_useraliases(struct cli_state *cli, else if (StrCaseCmp(argv[1], "builtin")==0) result = cli_samr_open_domain(cli, mem_ctx, &connect_pol, access_mask, - &global_sid_Builtin, - &domain_pol); - else { - printf("Usage: %s builtin|domain sid1 sid2 ...\n", argv[0]); - return NT_STATUS_INVALID_PARAMETER; - } + &global_sid_Builtin, &domain_pol); + else + return NT_STATUS_OK; if (!NT_STATUS_IS_OK(result)) goto done; - result = cli_samr_query_useraliases(cli, mem_ctx, &domain_pol, - num_sids, sid2, - &num_aliases, &alias_rids); + sid_copy(&tmp_sid, &domain_sid); + sid_append_rid(&tmp_sid, user_rid); + init_dom_sid2(&sid, &tmp_sid); + + result = cli_samr_query_useraliases(cli, mem_ctx, &domain_pol, 1, &sid, &num_aliases, &alias_rids); if (!NT_STATUS_IS_OK(result)) goto done; @@ -866,8 +851,11 @@ static NTSTATUS cmd_samr_enum_als_groups(struct cli_state *cli, uint32 start_idx, size, num_als_groups, i; uint32 access_mask = MAXIMUM_ALLOWED_ACCESS; struct acct_info *als_groups; + DOM_SID global_sid_Builtin; BOOL got_connect_pol = False, got_domain_pol = False; + string_to_sid(&global_sid_Builtin, "S-1-5-32"); + if ((argc < 2) || (argc > 3)) { printf("Usage: %s builtin|domain [access mask]\n", argv[0]); return NT_STATUS_OK; @@ -945,6 +933,9 @@ static NTSTATUS cmd_samr_query_aliasmem(struct cli_state *cli, uint32 alias_rid, num_members, i; uint32 access_mask = MAXIMUM_ALLOWED_ACCESS; DOM_SID *alias_sids; + DOM_SID global_sid_Builtin; + + string_to_sid(&global_sid_Builtin, "S-1-5-32"); if ((argc < 3) || (argc > 4)) { printf("Usage: %s builtin|domain rid [access mask]\n", argv[0]); @@ -1270,15 +1261,6 @@ static NTSTATUS cmd_samr_create_dom_user(struct cli_state *cli, if (!NT_STATUS_IS_OK(result)) goto done; - result = cli_samr_close(cli, mem_ctx, &user_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - - result = cli_samr_close(cli, mem_ctx, &domain_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - - result = cli_samr_close(cli, mem_ctx, &connect_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - done: return result; } @@ -1330,15 +1312,6 @@ static NTSTATUS cmd_samr_create_dom_group(struct cli_state *cli, if (!NT_STATUS_IS_OK(result)) goto done; - result = cli_samr_close(cli, mem_ctx, &group_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - - result = cli_samr_close(cli, mem_ctx, &domain_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - - result = cli_samr_close(cli, mem_ctx, &connect_pol); - if (!NT_STATUS_IS_OK(result)) goto done; - done: return result; } @@ -1355,6 +1328,9 @@ static NTSTATUS cmd_samr_lookup_names(struct cli_state *cli, uint32 num_rids, num_names, *name_types, *rids; const char **names; int i; + DOM_SID global_sid_Builtin; + + string_to_sid(&global_sid_Builtin, "S-1-5-32"); if (argc < 3) { printf("Usage: %s domain|builtin name1 [name2 [name3] [...]]\n", argv[0]); |