summaryrefslogtreecommitdiff
path: root/source/rpcclient/cmd_samr.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpcclient/cmd_samr.c')
-rw-r--r--source/rpcclient/cmd_samr.c44
1 files changed, 36 insertions, 8 deletions
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index a69a0cb73a7..d3f89540502 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -141,6 +141,27 @@ static const char *display_time(NTTIME nttime)
return (string);
}
+static const char* server_role_str(uint32 server_role)
+{
+ switch(server_role) {
+ case ROLE_STANDALONE:
+ return strdup("ROLE_STANDALONE");
+ break;
+ case ROLE_DOMAIN_MEMBER:
+ return strdup("ROLE_DOMAIN_MEMBER");
+ break;
+ case ROLE_DOMAIN_BDC:
+ return strdup("ROLE_DOMAIN_BDC");
+ break;
+ case ROLE_DOMAIN_PDC:
+ return strdup("ROLE_DOMAIN_PDC");
+ break;
+ default:
+ return strdup("Unknown -- internal error?");
+ break;
+ }
+}
+
static void display_sam_unk_info_1(SAM_UNK_INFO_1 *info1)
{
@@ -159,10 +180,10 @@ static void display_sam_unk_info_2(SAM_UNK_INFO_2 *info2)
fstring name;
unistr2_to_ascii(name, &info2->uni_domain, sizeof(name) - 1);
- printf("Domain:\t%s\n", name);
+ printf("Domain:\t\t%s\n", name);
unistr2_to_ascii(name, &info2->uni_server, sizeof(name) - 1);
- printf("Server:\t%s\n", name);
+ printf("Server:\t\t%s\n", name);
unistr2_to_ascii(name, &info2->uni_comment, sizeof(name) - 1);
printf("Comment:\t%s\n", name);
@@ -176,10 +197,15 @@ static void display_sam_unk_info_2(SAM_UNK_INFO_2 *info2)
printf("Force Logoff:\t%d\n", (int)nt_time_to_unix_abs(&info2->logout));
printf("Unknown 4:\t0x%x\n", info2->unknown_4);
- printf("Unknown 5:\t0x%x\n", info2->unknown_5);
+ printf("Server Role:\t%s\n", server_role_str(info2->server_role));
printf("Unknown 6:\t0x%x\n", info2->unknown_6);
}
+static void display_sam_unk_info_7(SAM_UNK_INFO_7 *info7)
+{
+ printf("Server Role:\t%s\n", server_role_str(info7->server_role));
+}
+
static void display_sam_unk_info_8(SAM_UNK_INFO_8 *info8)
{
printf("Sequence No:\t%d\n", info8->seq_num.low);
@@ -688,7 +714,7 @@ static NTSTATUS cmd_samr_enum_dom_users(struct cli_state *cli,
sscanf(argv[1], "%x", &access_mask);
if (argc > 2)
- sscanf(argv[2], "%x", &acb_mask);
+ sscanf(argv[2], "%hx", &acb_mask);
/* Get sam policy handle */
@@ -1161,6 +1187,9 @@ static NTSTATUS cmd_samr_query_dominfo(struct cli_state *cli,
case 2:
display_sam_unk_info_2(&ctr.info.inf2);
break;
+ case 7:
+ display_sam_unk_info_7(&ctr.info.inf7);
+ break;
case 8:
display_sam_unk_info_8(&ctr.info.inf8);
break;
@@ -1365,7 +1394,6 @@ static NTSTATUS cmd_samr_lookup_rids(struct cli_state *cli,
{
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
POLICY_HND connect_pol, domain_pol;
- uint32 flags = 0x000003e8; /* Unknown */
uint32 num_rids, num_names, *rids, *name_types;
char **names;
int i;
@@ -1398,11 +1426,11 @@ static NTSTATUS cmd_samr_lookup_rids(struct cli_state *cli,
for (i = 0; i < argc - 1; i++)
sscanf(argv[i + 1], "%i", &rids[i]);
- result = cli_samr_lookup_rids(cli, mem_ctx, &domain_pol,
- flags, num_rids, rids,
+ result = cli_samr_lookup_rids(cli, mem_ctx, &domain_pol, num_rids, rids,
&num_names, &names, &name_types);
- if (!NT_STATUS_IS_OK(result))
+ if (!NT_STATUS_IS_OK(result) &&
+ !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
goto done;
/* Display results */