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