parse_samr.c

来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 2,438 行 · 第 1/5 页

C
2,438
字号
}/*******************************************************************inits a SAMR_R_QUERY_DISPINFO structure.********************************************************************/void init_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO * r_u,				uint32 num_entries, uint32 total_size, uint32 data_size,				uint16 switch_level, SAM_DISPINFO_CTR * ctr,				NTSTATUS status){	DEBUG(5, ("init_samr_r_query_dispinfo: level %d\n", switch_level));	r_u->total_size = total_size;	r_u->data_size = data_size;	r_u->switch_level = switch_level;	r_u->num_entries = num_entries;	if (num_entries==0)		r_u->ptr_entries = 0;	else		r_u->ptr_entries = 1;	r_u->num_entries2 = num_entries;	r_u->ctr = ctr;	r_u->status = status;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_r_query_dispinfo(const char *desc, SAMR_R_QUERY_DISPINFO * r_u,			      prs_struct *ps, int depth){	if (r_u == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_r_query_dispinfo");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("total_size  ", ps, depth, &r_u->total_size))		return False;	if(!prs_uint32("data_size   ", ps, depth, &r_u->data_size))		return False;	if(!prs_uint16("switch_level", ps, depth, &r_u->switch_level))		return False;	if(!prs_align(ps))		return False;	if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))		return False;	if(!prs_uint32("ptr_entries ", ps, depth, &r_u->ptr_entries))		return False;	if (r_u->ptr_entries==0) {		if(!prs_align(ps))			return False;		if(!prs_ntstatus("status", ps, depth, &r_u->status))			return False;		return True;	}	if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))		return False;	switch (r_u->switch_level) {	case 0x1:		if(!sam_io_sam_dispinfo_1("users", r_u->ctr->sam.info1,				r_u->num_entries, ps, depth))			return False;		break;	case 0x2:		if(!sam_io_sam_dispinfo_2("servers", r_u->ctr->sam.info2,				r_u->num_entries, ps, depth))			return False;		break;	case 0x3:		if(!sam_io_sam_dispinfo_3("groups", r_u->ctr->sam.info3,				    r_u->num_entries, ps, depth))			return False;		break;	case 0x4:		if(!sam_io_sam_dispinfo_4("user list",				    r_u->ctr->sam.info4,				    r_u->num_entries, ps, depth))			return False;		break;	case 0x5:		if(!sam_io_sam_dispinfo_5("group list",				    r_u->ctr->sam.info5,				    r_u->num_entries, ps, depth))			return False;		break;	default:		DEBUG(0,("samr_io_r_query_dispinfo: unknown switch value\n"));		break;	}		if(!prs_align(ps))		return False;	if(!prs_ntstatus("status", ps, depth, &r_u->status))		return False;	return True;}/*******************************************************************inits a SAMR_Q_OPEN_GROUP structure.********************************************************************/void init_samr_q_open_group(SAMR_Q_OPEN_GROUP * q_c,			    POLICY_HND *hnd,			    uint32 access_mask, uint32 rid){	DEBUG(5, ("init_samr_q_open_group\n"));	q_c->domain_pol = *hnd;	q_c->access_mask = access_mask;	q_c->rid_group = rid;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_q_open_group(const char *desc, SAMR_Q_OPEN_GROUP * q_u,			  prs_struct *ps, int depth){	if (q_u == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_q_open_group");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))		return False;	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))		return False;	if(!prs_uint32("rid_group", ps, depth, &q_u->rid_group))		return False;	return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_r_open_group(const char *desc, SAMR_R_OPEN_GROUP * r_u,			  prs_struct *ps, int depth){	if (r_u == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_r_open_group");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))		return False;	if(!prs_ntstatus("status", ps, depth, &r_u->status))		return False;	return True;}/*******************************************************************inits a GROUP_INFO1 structure.********************************************************************/void init_samr_group_info1(GROUP_INFO1 * gr1,			   char *acct_name, char *acct_desc,			   uint32 num_members){	DEBUG(5, ("init_samr_group_info1\n"));	gr1->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */	gr1->num_members = num_members;	init_unistr2(&gr1->uni_acct_name, acct_name, UNI_FLAGS_NONE);	init_uni_hdr(&gr1->hdr_acct_name, &gr1->uni_acct_name);	init_unistr2(&gr1->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);	init_uni_hdr(&gr1->hdr_acct_desc, &gr1->uni_acct_desc);}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_group_info1(const char *desc, GROUP_INFO1 * gr1,			 prs_struct *ps, int depth){	uint16 dummy = 1;	if (gr1 == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_group_info1");	depth++;	if(!prs_uint16("level", ps, depth, &dummy))		return False;	if(!prs_align(ps))		return False;	if(!smb_io_unihdr("hdr_acct_name", &gr1->hdr_acct_name, ps, depth))		return False;	if(!prs_uint32("group_attr", ps, depth, &gr1->group_attr))		return False;	if(!prs_uint32("num_members", ps, depth, &gr1->num_members))		return False;	if(!smb_io_unihdr("hdr_acct_desc", &gr1->hdr_acct_desc, ps, depth))		return False;	if(!smb_io_unistr2("uni_acct_name", &gr1->uni_acct_name,			   gr1->hdr_acct_name.buffer, ps, depth))		return False;	if(!smb_io_unistr2("uni_acct_desc", &gr1->uni_acct_desc,			   gr1->hdr_acct_desc.buffer, ps, depth))		return False;	return True;}/*******************************************************************inits a GROUP_INFO2 structure.********************************************************************/void init_samr_group_info2(GROUP_INFO2 * gr2, const char *acct_name){	DEBUG(5, ("init_samr_group_info2\n"));	gr2->level = 2;	init_unistr2(&gr2->uni_acct_name, acct_name, UNI_FLAGS_NONE);	init_uni_hdr(&gr2->hdr_acct_name, &gr2->uni_acct_name);}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_group_info2(const char *desc, GROUP_INFO2 *gr2, prs_struct *ps, int depth){	if (gr2 == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_group_info2");	depth++;	if(!prs_uint16("hdr_level", ps, depth, &gr2->level))		return False;	if(!smb_io_unihdr("hdr_acct_name", &gr2->hdr_acct_name, ps, depth))		return False;	if(!smb_io_unistr2("uni_acct_name", &gr2->uni_acct_name,			   gr2->hdr_acct_name.buffer, ps, depth))		return False;	return True;}/*******************************************************************inits a GROUP_INFO3 structure.********************************************************************/void init_samr_group_info3(GROUP_INFO3 *gr3){	DEBUG(5, ("init_samr_group_info3\n"));	gr3->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_group_info3(const char *desc, GROUP_INFO3 *gr3, prs_struct *ps, int depth){	if (gr3 == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_group_info3");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("group_attr", ps, depth, &gr3->group_attr))		return False;	return True;}/*******************************************************************inits a GROUP_INFO4 structure.********************************************************************/void init_samr_group_info4(GROUP_INFO4 * gr4, const char *acct_desc){	DEBUG(5, ("init_samr_group_info4\n"));	gr4->level = 4;	init_unistr2(&gr4->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);	init_uni_hdr(&gr4->hdr_acct_desc, &gr4->uni_acct_desc);}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_group_info4(const char *desc, GROUP_INFO4 * gr4,			 prs_struct *ps, int depth){	if (gr4 == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_group_info4");	depth++;	if(!prs_uint16("hdr_level", ps, depth, &gr4->level))		return False;	if(!smb_io_unihdr("hdr_acct_desc", &gr4->hdr_acct_desc, ps, depth))		return False;	if(!smb_io_unistr2("uni_acct_desc", &gr4->uni_acct_desc,			   gr4->hdr_acct_desc.buffer, ps, depth))		return False;	return True;}/*******************************************************************reads or writes a structure.********************************************************************/static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,				prs_struct *ps, int depth){	if (UNMARSHALLING(ps))		*ctr = PRS_ALLOC_MEM(ps,GROUP_INFO_CTR,1);	if (*ctr == NULL)		return False;	prs_debug(ps, depth, desc, "samr_group_info_ctr");	depth++;	if(!prs_uint16("switch_value1", ps, depth, &(*ctr)->switch_value1))		return False;	switch ((*ctr)->switch_value1) {	case 1:		if(!samr_io_group_info1("group_info1", &(*ctr)->group.info1, ps, depth))			return False;		break;	case 2:		if(!samr_io_group_info2("group_info2", &(*ctr)->group.info2, ps, depth))			return False;		break;	case 3:		if(!samr_io_group_info3("group_info3", &(*ctr)->group.info3, ps, depth))			return False;		break;	case 4:		if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))			return False;		break;	default:		DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));		break;	}	return True;}/*******************************************************************inits a SAMR_Q_CREATE_DOM_GROUP structure.********************************************************************/void init_samr_q_create_dom_group(SAMR_Q_CREATE_DOM_GROUP * q_e,				  POLICY_HND *pol, const char *acct_desc,				  uint32 access_mask){	DEBUG(5, ("init_samr_q_create_dom_group\n"));	q_e->pol = *pol;	init_unistr2(&q_e->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);	init_uni_hdr(&q_e->hdr_acct_desc, &q_e->uni_acct_desc);	q_e->access_mask = access_mask;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_q_create_dom_group(const char *desc, SAMR_Q_CREATE_DOM_GROUP * q_e,				prs_struct *ps, int depth){	if (q_e == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_q_create_dom_group");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))		return False;	if(!smb_io_unihdr("hdr_acct_desc", &q_e->hdr_acct_desc, ps, depth))		return False;	if(!smb_io_unistr2("uni_acct_desc", &q_e->uni_acct_desc,		       q_e->hdr_acct_desc.buffer, ps, depth))		return False;	if(!prs_align(ps))		return False;	if(!prs_uint32("access", ps, depth, &q_e->access_mask))		return False;	return True;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_r_create_dom_group(const char *desc, SAMR_R_CREATE_DOM_GROUP * r_u,				prs_struct *ps, int depth){	if (r_u == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_r_create_dom_group");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))		return False;	if(!prs_uint32("rid   ", ps, depth, &r_u->rid))		return False;	if(!prs_ntstatus("status", ps, depth, &r_u->status))		return False;	return True;}/*******************************************************************inits a SAMR_Q_DELETE_DOM_GROUP structure.********************************************************************/void init_samr_q_delete_dom_group(SAMR_Q_DELETE_DOM_GROUP * q_c,				  POLICY_HND *hnd){	DEBUG(5, ("init_samr_q_delete_dom_group\n"));	q_c->group_pol = *hnd;}/*******************************************************************reads or writes a structure.*******************************************

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?