1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-05 09:18:06 +03:00

rewrote samr enum groups code a bit.

This commit is contained in:
Luke Leighton 0001-01-01 00:00:00 +00:00
parent 3adc31083b
commit 3f99ab7720
2 changed files with 47 additions and 31 deletions

View File

@ -3232,6 +3232,9 @@ BOOL sam_query_groupmem(struct client_info *info, uint16 fnum,
uint32 **rid_mem, uint32 **rid_mem,
char ***name, char ***name,
uint32 **type); uint32 **type);
BOOL msrpc_sam_enum_groups(struct client_info *info,
BOOL request_member_info,
BOOL request_group_info);
void cmd_sam_enum_groups(struct client_info *info); void cmd_sam_enum_groups(struct client_info *info);
/*The following definitions come from rpcclient/cmd_srvsvc.c */ /*The following definitions come from rpcclient/cmd_srvsvc.c */

View File

@ -2005,7 +2005,7 @@ BOOL sam_query_groupmem(struct client_info *info, uint16 fnum,
if (rid_copy != NULL) if (rid_copy != NULL)
{ {
int i; uint32 i;
for (i = 0; i < num_mem; i++) for (i = 0; i < num_mem; i++)
{ {
rid_copy[i] = (*rid_mem)[i]; rid_copy[i] = (*rid_mem)[i];
@ -2076,7 +2076,9 @@ static void req_groupmem_info(struct client_info *info, uint16 fnum,
/**************************************************************************** /****************************************************************************
SAM groups query. SAM groups query.
****************************************************************************/ ****************************************************************************/
void cmd_sam_enum_groups(struct client_info *info) BOOL msrpc_sam_enum_groups(struct client_info *info,
BOOL request_member_info,
BOOL request_group_info)
{ {
uint16 fnum; uint16 fnum;
fstring srv_name; fstring srv_name;
@ -2084,19 +2086,15 @@ void cmd_sam_enum_groups(struct client_info *info)
fstring sid; fstring sid;
DOM_SID sid1; DOM_SID sid1;
BOOL res = True; BOOL res = True;
BOOL request_member_info = False;
BOOL request_group_info = False;
uint32 ace_perms = 0x02000000; /* access control permissions. */ uint32 ace_perms = 0x02000000; /* access control permissions. */
fstring tmp;
uint32 group_idx; uint32 group_idx;
int i;
sid_copy(&sid1, &info->dom.level5_sid); sid_copy(&sid1, &info->dom.level5_sid);
if (sid1.num_auths == 0) if (sid1.num_auths == 0)
{ {
report(out_hnd, "please use 'lsaquery' first, to ascertain the SID\n"); report(out_hnd, "please use 'lsaquery' first, to ascertain the SID\n");
return; return 0;
} }
sid_to_string(sid, &sid1); sid_to_string(sid, &sid1);
@ -2106,21 +2104,6 @@ void cmd_sam_enum_groups(struct client_info *info)
fstrcat(srv_name, info->dest_host); fstrcat(srv_name, info->dest_host);
strupper(srv_name); strupper(srv_name);
/* a bad way to do token parsing... */
for (i = 0; i < 2; i++)
{
/* a bad way to do token parsing... */
if (next_token(NULL, tmp, NULL, sizeof(tmp)))
{
request_member_info |= strequal(tmp, "-m");
request_group_info |= strequal(tmp, "-g");
}
else
{
break;
}
}
report(out_hnd, "SAM Enumerate Groups\n"); report(out_hnd, "SAM Enumerate Groups\n");
report(out_hnd, "From: %s To: %s Domain: %s SID: %s\n", report(out_hnd, "From: %s To: %s Domain: %s SID: %s\n",
info->myhostname, srv_name, domain, sid); info->myhostname, srv_name, domain, sid);
@ -2181,17 +2164,47 @@ void cmd_sam_enum_groups(struct client_info *info)
/* close the session */ /* close the session */
cli_nt_session_close(smb_cli, fnum); cli_nt_session_close(smb_cli, fnum);
if (res)
{
DEBUG(5,("msrpc_sam_enum_groups: succeeded\n"));
}
else
{
DEBUG(5,("msrpc_sam_enum_groups: failed\n"));
}
return info->dom.num_sam_entries;
}
/****************************************************************************
experimental SAM groups enum.
****************************************************************************/
void cmd_sam_enum_groups(struct client_info *info)
{
BOOL request_member_info = False;
BOOL request_group_info = False;
fstring tmp;
int i;
for (i = 0; i < 3; i++)
{
/* a bad way to do token parsing... */
if (next_token(NULL, tmp, NULL, sizeof(tmp)))
{
request_member_info |= strequal(tmp, "-m");
request_group_info |= strequal(tmp, "-g");
}
else
{
break;
}
}
msrpc_sam_enum_groups(info,
request_member_info,
request_group_info);
if (info->dom.sam != NULL) if (info->dom.sam != NULL)
{ {
free(info->dom.sam); free(info->dom.sam);
} }
if (res)
{
DEBUG(5,("cmd_sam_enum_groups: succeeded\n"));
}
else
{
DEBUG(5,("cmd_sam_enum_groups: failed\n"));
}
} }