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 + -
显示快捷键?