mirror of
https://github.com/samba-team/samba.git
synced 2025-12-12 12:23:50 +03:00
r14646: Adding samr querygroup infolevels 2 & 5.
Guenther
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
d45b9abb0e
commit
6c4fe819c6
@@ -1112,6 +1112,21 @@ typedef struct samr_group_info4
|
|||||||
|
|
||||||
} GROUP_INFO4;
|
} GROUP_INFO4;
|
||||||
|
|
||||||
|
typedef struct samr_group_info5
|
||||||
|
{
|
||||||
|
UNIHDR hdr_acct_name;
|
||||||
|
|
||||||
|
uint32 group_attr; /* 0x0000 0003 - group attribute */
|
||||||
|
uint32 num_members; /* 0x0000 0001 - number of group members? */
|
||||||
|
|
||||||
|
UNIHDR hdr_acct_desc;
|
||||||
|
|
||||||
|
UNISTR2 uni_acct_name;
|
||||||
|
UNISTR2 uni_acct_desc;
|
||||||
|
|
||||||
|
} GROUP_INFO5;
|
||||||
|
|
||||||
|
|
||||||
/* GROUP_INFO_CTR */
|
/* GROUP_INFO_CTR */
|
||||||
typedef struct group_info_ctr
|
typedef struct group_info_ctr
|
||||||
{
|
{
|
||||||
@@ -1123,7 +1138,7 @@ typedef struct group_info_ctr
|
|||||||
GROUP_INFO2 info2;
|
GROUP_INFO2 info2;
|
||||||
GROUP_INFO3 info3;
|
GROUP_INFO3 info3;
|
||||||
GROUP_INFO4 info4;
|
GROUP_INFO4 info4;
|
||||||
|
GROUP_INFO5 info5;
|
||||||
} group;
|
} group;
|
||||||
|
|
||||||
} GROUP_INFO_CTR;
|
} GROUP_INFO_CTR;
|
||||||
|
|||||||
@@ -2306,6 +2306,69 @@ BOOL samr_io_group_info4(const char *desc, GROUP_INFO4 * gr4,
|
|||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
inits a GROUP_INFO5 structure.
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
void init_samr_group_info5(GROUP_INFO5 * gr5,
|
||||||
|
char *acct_name, char *acct_desc,
|
||||||
|
uint32 num_members)
|
||||||
|
{
|
||||||
|
DEBUG(5, ("init_samr_group_info5\n"));
|
||||||
|
|
||||||
|
gr5->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
|
||||||
|
gr5->num_members = num_members;
|
||||||
|
|
||||||
|
init_unistr2(&gr5->uni_acct_name, acct_name, UNI_FLAGS_NONE);
|
||||||
|
init_uni_hdr(&gr5->hdr_acct_name, &gr5->uni_acct_name);
|
||||||
|
init_unistr2(&gr5->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
|
||||||
|
init_uni_hdr(&gr5->hdr_acct_desc, &gr5->uni_acct_desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
reads or writes a structure.
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
BOOL samr_io_group_info5(const char *desc, GROUP_INFO5 * gr5,
|
||||||
|
prs_struct *ps, int depth)
|
||||||
|
{
|
||||||
|
uint16 dummy = 1;
|
||||||
|
|
||||||
|
if (gr5 == NULL)
|
||||||
|
return False;
|
||||||
|
|
||||||
|
prs_debug(ps, depth, desc, "samr_io_group_info5");
|
||||||
|
depth++;
|
||||||
|
|
||||||
|
if(!prs_uint16("level", ps, depth, &dummy))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!prs_align(ps))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!smb_io_unihdr("hdr_acct_name", &gr5->hdr_acct_name, ps, depth))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!prs_uint32("group_attr", ps, depth, &gr5->group_attr))
|
||||||
|
return False;
|
||||||
|
if(!prs_uint32("num_members", ps, depth, &gr5->num_members))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!smb_io_unihdr("hdr_acct_desc", &gr5->hdr_acct_desc, ps, depth))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!smb_io_unistr2("uni_acct_name", &gr5->uni_acct_name,
|
||||||
|
gr5->hdr_acct_name.buffer, ps, depth))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
if(!smb_io_unistr2("uni_acct_desc", &gr5->uni_acct_desc,
|
||||||
|
gr5->hdr_acct_desc.buffer, ps, depth))
|
||||||
|
return False;
|
||||||
|
|
||||||
|
return True;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
reads or writes a structure.
|
reads or writes a structure.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
@@ -2342,6 +2405,10 @@ static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,
|
|||||||
if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
|
if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
|
||||||
return False;
|
return False;
|
||||||
break;
|
break;
|
||||||
|
case 5:
|
||||||
|
if(!samr_io_group_info5("group_info5", &(*ctr)->group.info5, ps, depth))
|
||||||
|
return False;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
|
DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -4362,6 +4362,10 @@ NTSTATUS _samr_query_groupinfo(pipes_struct *p, SAMR_Q_QUERY_GROUPINFO *q_u, SAM
|
|||||||
map.comment, num_members);
|
map.comment, num_members);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 2:
|
||||||
|
ctr->switch_value1 = 2;
|
||||||
|
init_samr_group_info2(&ctr->group.info2, map.nt_name);
|
||||||
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
ctr->switch_value1 = 3;
|
ctr->switch_value1 = 3;
|
||||||
init_samr_group_info3(&ctr->group.info3);
|
init_samr_group_info3(&ctr->group.info3);
|
||||||
@@ -4370,6 +4374,28 @@ NTSTATUS _samr_query_groupinfo(pipes_struct *p, SAMR_Q_QUERY_GROUPINFO *q_u, SAM
|
|||||||
ctr->switch_value1 = 4;
|
ctr->switch_value1 = 4;
|
||||||
init_samr_group_info4(&ctr->group.info4, map.comment);
|
init_samr_group_info4(&ctr->group.info4, map.comment);
|
||||||
break;
|
break;
|
||||||
|
case 5: {
|
||||||
|
/*
|
||||||
|
uint32 *members;
|
||||||
|
size_t num_members;
|
||||||
|
*/
|
||||||
|
|
||||||
|
ctr->switch_value1 = 5;
|
||||||
|
|
||||||
|
/*
|
||||||
|
become_root();
|
||||||
|
r_u->status = pdb_enum_group_members(
|
||||||
|
p->mem_ctx, &group_sid, &members, &num_members);
|
||||||
|
unbecome_root();
|
||||||
|
|
||||||
|
if (!NT_STATUS_IS_OK(r_u->status)) {
|
||||||
|
return r_u->status;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
init_samr_group_info5(&ctr->group.info5, map.nt_name,
|
||||||
|
map.comment, 0 /* num_members */); /* in w2k3 this is always 0 */
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return NT_STATUS_INVALID_INFO_CLASS;
|
return NT_STATUS_INVALID_INFO_CLASS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -439,6 +439,18 @@ static void display_group_info1(GROUP_INFO1 *info1)
|
|||||||
printf("\tNum Members:%d\n", info1->num_members);
|
printf("\tNum Members:%d\n", info1->num_members);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
display group info
|
||||||
|
****************************************************************************/
|
||||||
|
static void display_group_info2(GROUP_INFO2 *info2)
|
||||||
|
{
|
||||||
|
fstring name;
|
||||||
|
|
||||||
|
unistr2_to_ascii(name, &info2->uni_acct_name, sizeof(name)-1);
|
||||||
|
printf("\tGroup Description:%s\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
display group info
|
display group info
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -459,24 +471,43 @@ static void display_group_info4(GROUP_INFO4 *info4)
|
|||||||
printf("\tGroup Description:%s\n", desc);
|
printf("\tGroup Description:%s\n", desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
display group info
|
||||||
|
****************************************************************************/
|
||||||
|
static void display_group_info5(GROUP_INFO5 *info5)
|
||||||
|
{
|
||||||
|
fstring temp;
|
||||||
|
|
||||||
|
unistr2_to_ascii(temp, &info5->uni_acct_name, sizeof(temp)-1);
|
||||||
|
printf("\tGroup Name:\t%s\n", temp);
|
||||||
|
unistr2_to_ascii(temp, &info5->uni_acct_desc, sizeof(temp)-1);
|
||||||
|
printf("\tDescription:\t%s\n", temp);
|
||||||
|
printf("\tGroup Attribute:%d\n", info5->group_attr);
|
||||||
|
printf("\tNum Members:%d\n", info5->num_members);
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
display sam sync structure
|
display sam sync structure
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static void display_group_info_ctr(GROUP_INFO_CTR *ctr)
|
static void display_group_info_ctr(GROUP_INFO_CTR *ctr)
|
||||||
{
|
{
|
||||||
switch (ctr->switch_value1) {
|
switch (ctr->switch_value1) {
|
||||||
case 1: {
|
case 1:
|
||||||
display_group_info1(&ctr->group.info1);
|
display_group_info1(&ctr->group.info1);
|
||||||
break;
|
break;
|
||||||
}
|
case 2:
|
||||||
case 3: {
|
display_group_info2(&ctr->group.info2);
|
||||||
display_group_info3(&ctr->group.info3);
|
break;
|
||||||
break;
|
case 3:
|
||||||
}
|
display_group_info3(&ctr->group.info3);
|
||||||
case 4: {
|
break;
|
||||||
display_group_info4(&ctr->group.info4);
|
case 4:
|
||||||
break;
|
display_group_info4(&ctr->group.info4);
|
||||||
}
|
break;
|
||||||
|
case 5:
|
||||||
|
display_group_info5(&ctr->group.info5);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user