parse_samr.c

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

C
2,438
字号
			    prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_str1");	depth++;	if(!prs_align(ps))		return False;	if (!smb_io_unistr2("name", &sam->uni_acct_name, acct_buf, ps, depth))		return False;	if (!smb_io_unistr2("desc", &sam->uni_acct_desc, desc_buf, ps, depth))		return False;	if (!smb_io_unistr2("full", &sam->uni_full_name, name_buf, ps, depth))		return False;	return True;}/*******************************************************************inits a SAM_ENTRY1 structure.********************************************************************/static void init_sam_entry1(SAM_ENTRY1 *sam, uint32 user_idx,			    UNISTR2 *sam_name, UNISTR2 *sam_full,			    UNISTR2 *sam_desc, uint32 rid_user,			    uint16 acb_info){	DEBUG(5, ("init_sam_entry1\n"));	ZERO_STRUCTP(sam);	sam->user_idx = user_idx;	sam->rid_user = rid_user;	sam->acb_info = acb_info;	init_uni_hdr(&sam->hdr_acct_name, sam_name);	init_uni_hdr(&sam->hdr_user_name, sam_full);	init_uni_hdr(&sam->hdr_user_desc, sam_desc);}/*******************************************************************reads or writes a SAM_ENTRY1 structure.********************************************************************/static BOOL sam_io_sam_entry1(const char *desc, SAM_ENTRY1 * sam,			      prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry1");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))		return False;	if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))		return False;	if(!prs_uint16("acb_info ", ps, depth, &sam->acb_info))		return False;	if(!prs_align(ps))		return False;	if (!smb_io_unihdr("hdr_acct_name", &sam->hdr_acct_name, ps, depth))		return False;	if (!smb_io_unihdr("hdr_user_desc", &sam->hdr_user_desc, ps, depth))		return False;	if (!smb_io_unihdr("hdr_user_name", &sam->hdr_user_name, ps, depth))		return False;	return True;}/*******************************************************************reads or writes a SAM_STR2 structure.********************************************************************/static BOOL sam_io_sam_str2(const char *desc, SAM_STR2 * sam, uint32 acct_buf,			    uint32 desc_buf, prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_str2");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_unistr2("uni_srv_name", &sam->uni_srv_name, acct_buf, ps, depth)) /* account name unicode string */		return False;	if(!smb_io_unistr2("uni_srv_desc", &sam->uni_srv_desc, desc_buf, ps, depth))	/* account desc unicode string */		return False;	return True;}/*******************************************************************inits a SAM_ENTRY2 structure.********************************************************************/static void init_sam_entry2(SAM_ENTRY2 * sam, uint32 user_idx,			    UNISTR2 *sam_name, UNISTR2 *sam_desc,			    uint32 rid_user, uint16 acb_info){	DEBUG(5, ("init_sam_entry2\n"));	sam->user_idx = user_idx;	sam->rid_user = rid_user;	sam->acb_info = acb_info;	init_uni_hdr(&sam->hdr_srv_name, sam_name);	init_uni_hdr(&sam->hdr_srv_desc, sam_desc);}/*******************************************************************reads or writes a SAM_ENTRY2 structure.********************************************************************/static BOOL sam_io_sam_entry2(const char *desc, SAM_ENTRY2 * sam,			      prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry2");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))		return False;	if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))		return False;	if(!prs_uint16("acb_info ", ps, depth, &sam->acb_info))		return False;	if(!prs_align(ps))		return False;	if(!smb_io_unihdr("unihdr", &sam->hdr_srv_name, ps, depth))	/* account name unicode string header */		return False;	if(!smb_io_unihdr("unihdr", &sam->hdr_srv_desc, ps, depth))	/* account name unicode string header */		return False;	return True;}/*******************************************************************reads or writes a SAM_STR3 structure.********************************************************************/static BOOL sam_io_sam_str3(const char *desc, SAM_STR3 * sam, uint32 acct_buf,			    uint32 desc_buf, prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_str3");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_unistr2("uni_grp_name", &sam->uni_grp_name, acct_buf, ps, depth))	/* account name unicode string */		return False;	if(!smb_io_unistr2("uni_grp_desc", &sam->uni_grp_desc, desc_buf, ps, depth))	/* account desc unicode string */		return False;	return True;}/*******************************************************************inits a SAM_ENTRY3 structure.********************************************************************/static void init_sam_entry3(SAM_ENTRY3 * sam, uint32 grp_idx,			    UNISTR2 *grp_name, UNISTR2 *grp_desc,			    uint32 rid_grp){	DEBUG(5, ("init_sam_entry3\n"));	sam->grp_idx = grp_idx;	sam->rid_grp = rid_grp;	sam->attr = 0x07;	/* group rid attributes - gets ignored by nt 4.0 */	init_uni_hdr(&sam->hdr_grp_name, grp_name);	init_uni_hdr(&sam->hdr_grp_desc, grp_desc);}/*******************************************************************reads or writes a SAM_ENTRY3 structure.********************************************************************/static BOOL sam_io_sam_entry3(const char *desc, SAM_ENTRY3 * sam,			      prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry3");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))		return False;	if(!prs_uint32("rid_grp", ps, depth, &sam->rid_grp))		return False;	if(!prs_uint32("attr   ", ps, depth, &sam->attr))		return False;	if(!smb_io_unihdr("unihdr", &sam->hdr_grp_name, ps, depth))	/* account name unicode string header */		return False;	if(!smb_io_unihdr("unihdr", &sam->hdr_grp_desc, ps, depth))	/* account name unicode string header */		return False;	return True;}/*******************************************************************inits a SAM_ENTRY4 structure.********************************************************************/static void init_sam_entry4(SAM_ENTRY4 * sam, uint32 user_idx,			    uint32 len_acct_name){	DEBUG(5, ("init_sam_entry4\n"));	sam->user_idx = user_idx;	init_str_hdr(&sam->hdr_acct_name, len_acct_name+1, len_acct_name, len_acct_name != 0);}/*******************************************************************reads or writes a SAM_ENTRY4 structure.********************************************************************/static BOOL sam_io_sam_entry4(const char *desc, SAM_ENTRY4 * sam,			      prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry4");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("user_idx", ps, depth, &sam->user_idx))		return False;	if(!smb_io_strhdr("strhdr", &sam->hdr_acct_name, ps, depth))		return False;	return True;}/*******************************************************************inits a SAM_ENTRY5 structure.********************************************************************/static void init_sam_entry5(SAM_ENTRY5 * sam, uint32 grp_idx,			    uint32 len_grp_name){	DEBUG(5, ("init_sam_entry5\n"));	sam->grp_idx = grp_idx;	init_str_hdr(&sam->hdr_grp_name, len_grp_name, len_grp_name,		     len_grp_name != 0);}/*******************************************************************reads or writes a SAM_ENTRY5 structure.********************************************************************/static BOOL sam_io_sam_entry5(const char *desc, SAM_ENTRY5 * sam,			      prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry5");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))		return False;	if(!smb_io_strhdr("strhdr", &sam->hdr_grp_name, ps, depth))		return False;	return True;}/*******************************************************************inits a SAM_ENTRY structure.********************************************************************/void init_sam_entry(SAM_ENTRY *sam, UNISTR2 *uni2, uint32 rid){	DEBUG(10, ("init_sam_entry: %d\n", rid));	sam->rid = rid;	init_uni_hdr(&sam->hdr_name, uni2);}/*******************************************************************reads or writes a SAM_ENTRY structure.********************************************************************/static BOOL sam_io_sam_entry(const char *desc, SAM_ENTRY * sam,			     prs_struct *ps, int depth){	if (sam == NULL)		return False;	prs_debug(ps, depth, desc, "sam_io_sam_entry");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("rid", ps, depth, &sam->rid))		return False;	if(!smb_io_unihdr("unihdr", &sam->hdr_name, ps, depth))	/* account name unicode string header */		return False;	return True;}/*******************************************************************inits a SAMR_Q_ENUM_DOM_USERS structure.********************************************************************/void init_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS * q_e, POLICY_HND *pol,				uint32 start_idx,				uint16 acb_mask, uint16 unk_1, uint32 size){	DEBUG(5, ("init_samr_q_enum_dom_users\n"));	q_e->pol = *pol;	q_e->start_idx = start_idx;	/* zero indicates lots */	q_e->acb_mask = acb_mask;	q_e->unknown_1 = unk_1;	q_e->max_size = size;}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_q_enum_dom_users(const char *desc, SAMR_Q_ENUM_DOM_USERS * q_e,			      prs_struct *ps, int depth){	if (q_e == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_q_enum_dom_users");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_pol_hnd("domain_pol", &q_e->pol, ps, depth))		return False;	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))		return False;	if(!prs_uint16("acb_mask ", ps, depth, &q_e->acb_mask))		return False;	if(!prs_uint16("unknown_1", ps, depth, &q_e->unknown_1))		return False;	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))		return False;	return True;}/*******************************************************************inits a SAMR_R_ENUM_DOM_USERS structure.********************************************************************/void init_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS * r_u,				uint32 next_idx, uint32 num_sam_entries){	DEBUG(5, ("init_samr_r_enum_dom_users\n"));	r_u->next_idx = next_idx;	if (num_sam_entries != 0) {		r_u->ptr_entries1 = 1;		r_u->ptr_entries2 = 1;		r_u->num_entries2 = num_sam_entries;		r_u->num_entries3 = num_sam_entries;		r_u->num_entries4 = num_sam_entries;	} else {		r_u->ptr_entries1 = 0;		r_u->num_entries2 = num_sam_entries;		r_u->ptr_entries2 = 1;	}}/*******************************************************************reads or writes a structure.********************************************************************/BOOL samr_io_r_enum_dom_users(const char *desc, SAMR_R_ENUM_DOM_USERS * r_u,			      prs_struct *ps, int depth){	uint32 i;	if (r_u == NULL)		return False;	prs_debug(ps, depth, desc, "samr_io_r_enum_dom_users");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))		return False;	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))		return False;	if (r_u->ptr_entries1 != 0) {		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))			return False;		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))			return False;		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))			return False;		if (UNMARSHALLING(ps) && (r_u->num_entries2 != 0)) {			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY, r_u->num_entries2);			r_u->uni_acct_name = PRS_ALLOC_MEM(ps,UNISTR2, r_u->num_entries2);		}		if ((r_u->sam == NULL || r_u->uni_acct_name == NULL) && r_u->num_entries2 != 0) {			DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_USERS\n"));			r_u->num_entries4 = 0;			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;			return False;		}		for (i = 0; i < r_u->num_entries2; i++) {			if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))				return False;		}		for (i = 0; i < r_u->num_entries2; i++) {			if(!smb_io_unistr2("", &r_u->uni_acct_name[i],r_u->sam[i].hdr_name.buffer, ps,depth))				return False;		}	}	if(!prs_align(ps))		return False;			if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))		return False;	if(!prs_ntstatus("status", ps, depth, &r_u->status))		return False;	return True;}/*******************************************************************inits a SAMR_Q_QUERY_DISPINFO structure.********************************************************************/void init_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO * q_e, POLICY_HND *pol,

⌨️ 快捷键说明

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