mirror of
https://github.com/samba-team/samba.git
synced 2025-02-25 17:57:42 +03:00
rpcclient: got samr command "enumusers -g -u" working
(This used to be commit 3a00023efedb34684bd45bd8a562f07a9880f1ad)
This commit is contained in:
parent
c1bbd1868f
commit
4b9e0941b9
@ -1228,7 +1228,7 @@ BOOL do_samr_unknown_8(struct cli_state *cli,
|
||||
BOOL do_samr_enum_dom_users(struct cli_state *cli,
|
||||
POLICY_HND *pol, uint16 num_entries, uint16 unk_0,
|
||||
uint16 acb_mask, uint16 unk_1, uint32 size,
|
||||
struct acct_info sam[MAX_SAM_ENTRIES],
|
||||
struct acct_info **sam,
|
||||
int *num_sam_users);
|
||||
BOOL do_samr_connect(struct cli_state *cli,
|
||||
char *srv_name, uint32 unknown_0,
|
||||
|
@ -116,7 +116,7 @@ BOOL do_samr_unknown_8(struct cli_state *cli,
|
||||
|
||||
DEBUG(4,("SAMR Unknown 8 switch:%d\n", switch_value));
|
||||
|
||||
if (domain_pol == NULL || cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (domain_pol == NULL) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_unknown_8(&q_e, domain_pol, switch_value);
|
||||
@ -161,7 +161,7 @@ do a SAMR enumerate users
|
||||
BOOL do_samr_enum_dom_users(struct cli_state *cli,
|
||||
POLICY_HND *pol, uint16 num_entries, uint16 unk_0,
|
||||
uint16 acb_mask, uint16 unk_1, uint32 size,
|
||||
struct acct_info sam[MAX_SAM_ENTRIES],
|
||||
struct acct_info **sam,
|
||||
int *num_sam_users)
|
||||
{
|
||||
prs_struct data;
|
||||
@ -177,7 +177,7 @@ BOOL do_samr_enum_dom_users(struct cli_state *cli,
|
||||
|
||||
DEBUG(4,("SAMR Enum SAM DB max size:%x\n", size));
|
||||
|
||||
if (pol == NULL || sam == NULL || num_sam_users == NULL || cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (pol == NULL || num_sam_users == NULL) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_enum_dom_users(&q_e, pol,
|
||||
@ -215,22 +215,31 @@ BOOL do_samr_enum_dom_users(struct cli_state *cli,
|
||||
DEBUG(2,("do_samr_enum_dom_users: sam user entries limited to %d\n",
|
||||
*num_sam_users));
|
||||
}
|
||||
|
||||
*sam = (struct acct_info*) malloc(sizeof(struct acct_info) * (*num_sam_users));
|
||||
|
||||
if ((*sam) == NULL)
|
||||
{
|
||||
*num_sam_users = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < *num_sam_users; i++)
|
||||
{
|
||||
sam[i].smb_userid = r_e.sam[i].rid;
|
||||
|
||||
(*sam)[i].smb_userid = r_e.sam[i].rid;
|
||||
if (r_e.sam[i].hdr_name.buffer)
|
||||
{
|
||||
char *acct_name = unistrn2(r_e.uni_acct_name[name_idx].buffer,
|
||||
r_e.uni_acct_name[name_idx].uni_str_len);
|
||||
fstrcpy(sam[i].acct_name, acct_name);
|
||||
fstrcpy((*sam)[i].acct_name, acct_name);
|
||||
name_idx++;
|
||||
}
|
||||
else
|
||||
{
|
||||
bzero(sam[i].acct_name, sizeof(sam[i].acct_name));
|
||||
bzero((*sam)[i].acct_name, sizeof((*sam)[i].acct_name));
|
||||
}
|
||||
DEBUG(5,("do_samr_enum_dom_users: idx: %4d rid: %8x acct: %s\n",
|
||||
i, sam[i].smb_userid, sam[i].acct_name));
|
||||
i, (*sam)[i].smb_userid, (*sam)[i].acct_name));
|
||||
}
|
||||
valid_pol = True;
|
||||
}
|
||||
@ -263,7 +272,7 @@ BOOL do_samr_connect(struct cli_state *cli,
|
||||
DEBUG(4,("SAMR Open Policy server:%s undoc value:%x\n",
|
||||
srv_name, unknown_0));
|
||||
|
||||
if (srv_name == NULL || connect_pol == NULL || cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (srv_name == NULL || connect_pol == NULL) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_connect(&q_o, srv_name, unknown_0);
|
||||
@ -321,7 +330,7 @@ BOOL do_samr_open_user(struct cli_state *cli,
|
||||
DEBUG(4,("SAMR Open User. unk_0: %08x RID:%x\n",
|
||||
unk_0, rid));
|
||||
|
||||
if (pol == NULL || user_pol == NULL || cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (pol == NULL || user_pol == NULL) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_open_user(&q_o, pol, unk_0, rid);
|
||||
@ -370,7 +379,7 @@ BOOL do_samr_open_domain(struct cli_state *cli,
|
||||
prs_struct rdata;
|
||||
|
||||
SAMR_Q_OPEN_DOMAIN q_o;
|
||||
BOOL valid_pol = False;
|
||||
BOOL valid_pol = False;
|
||||
|
||||
/* create and send a MSRPC command with api SAMR_OPEN_DOMAIN */
|
||||
|
||||
@ -380,7 +389,7 @@ BOOL do_samr_open_domain(struct cli_state *cli,
|
||||
sid_to_string(sid_str, sid);
|
||||
DEBUG(4,("SAMR Open Domain. SID:%s RID:%x\n", sid_str, rid));
|
||||
|
||||
if (connect_pol == NULL || sid == NULL || domain_pol == NULL || cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (connect_pol == NULL || sid == NULL || domain_pol == NULL) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_open_domain(&q_o, connect_pol, rid, sid);
|
||||
@ -440,8 +449,7 @@ BOOL do_samr_query_unknown_12(struct cli_state *cli,
|
||||
DEBUG(4,("SAMR Query Unknown 12.\n"));
|
||||
|
||||
if (pol == NULL || rid == 0 || num_gids == 0 || gids == NULL ||
|
||||
num_aliases == NULL || als_names == NULL || num_als_users == NULL ||
|
||||
cli->nt_pipe_fnum == 0xffff) return False;
|
||||
num_aliases == NULL || als_names == NULL || num_als_users == NULL ) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_unknown_12(&q_o, pol, rid, num_gids, gids);
|
||||
@ -521,7 +529,7 @@ BOOL do_samr_query_usergroups(struct cli_state *cli,
|
||||
|
||||
DEBUG(4,("SAMR Query User Groups.\n"));
|
||||
|
||||
if (pol == NULL || gid == NULL || num_groups == 0|| cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (pol == NULL || gid == NULL || num_groups == 0) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_query_usergroups(&q_o, pol);
|
||||
@ -581,7 +589,7 @@ BOOL do_samr_query_userinfo(struct cli_state *cli,
|
||||
|
||||
DEBUG(4,("SAMR Query User Info. level: %d\n", switch_value));
|
||||
|
||||
if (pol == NULL || usr == NULL || switch_value == 0|| cli->nt_pipe_fnum == 0xffff) return False;
|
||||
if (pol == NULL || usr == NULL || switch_value == 0) return False;
|
||||
|
||||
/* store the parameters */
|
||||
make_samr_q_query_userinfo(&q_o, pol, switch_value);
|
||||
|
@ -2167,6 +2167,7 @@ static void sam_io_user_info21(char *desc, SAM_USER_INFO_21 *usr, prs_struct *p
|
||||
if (usr->ptr_logon_hrs)
|
||||
{
|
||||
sam_io_logon_hrs("logon_hrs", &(usr->logon_hrs) , ps, depth);
|
||||
prs_align(ps);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ void cmd_sam_enum_users(struct client_info *info)
|
||||
res = res ? do_samr_enum_dom_users(smb_cli,
|
||||
&info->dom.samr_pol_open_domain,
|
||||
num_entries, unk_0, acb_mask, unk_1, 0xffff,
|
||||
info->dom.sam, &info->dom.num_sam_entries) : False;
|
||||
&info->dom.sam, &info->dom.num_sam_entries) : False;
|
||||
|
||||
if (res && info->dom.num_sam_entries == 0)
|
||||
{
|
||||
@ -240,6 +240,11 @@ void cmd_sam_enum_users(struct client_info *info)
|
||||
/* close the session */
|
||||
cli_nt_session_close(smb_cli);
|
||||
|
||||
if (info->dom.sam != NULL)
|
||||
{
|
||||
free(info->dom.sam);
|
||||
}
|
||||
|
||||
if (res)
|
||||
{
|
||||
DEBUG(5,("cmd_sam_enum_users: succeeded\n"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user