parse_srv.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 2,455 行 · 第 1/5 页
C
2,455 行
if(!prs_align(ps)) return False; if(sh502->ptrs->ptr_sd) { uint32 old_offset; uint32 reserved_offset; if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &reserved_offset)) return False; old_offset = prs_offset(ps); if (!sec_io_desc(desc, &sh502->sd, ps, depth)) return False; if(UNMARSHALLING(ps)) { sh502->ptrs->sd_size = sh502->sd_size = sec_desc_size(sh502->sd); prs_set_offset(ps, old_offset + sh502->reserved); } prs_align(ps); if(MARSHALLING(ps)) { sh502->ptrs->reserved = sh502->reserved = prs_offset(ps) - old_offset; } if(!prs_uint32_post("reserved ", ps, depth, &sh502->reserved, reserved_offset, sh502->reserved)) return False; if(!prs_uint32_post("reserved ", ps, depth, &sh502->ptrs->reserved, sh502->ptrs->reserved_offset, sh502->ptrs->reserved)) return False; } return True;}/******************************************************************* Inits a SH_INFO_1004_STR structure********************************************************************/void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, const char *remark){ DEBUG(5,("init_srv_share_info1004_str\n")); init_unistr2(&sh1004->uni_remark, remark, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1004_str(const char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth){ if (sh1004 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1004_str"); depth++; if(!prs_align(ps)) return False; if(sh1004->ptrs->ptr_remark) if(!smb_io_unistr2("", &sh1004->uni_remark, True, ps, depth)) return False; return True;}/******************************************************************* makes a SH_INFO_1004 structure********************************************************************/void init_srv_share_info1004(SH_INFO_1004 *sh1004, const char *remark){ DEBUG(5,("init_srv_share_info1004: %s\n", remark)); sh1004->ptr_remark = (remark != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1004(const char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth){ if (sh1004 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1004"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_remark", ps, depth, &sh1004->ptr_remark)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1005(const char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth){ if(sh1005 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1005"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("share_info_flags", ps, depth, &sh1005->share_info_flags)) return False; return True;} /******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1006(const char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth){ if(sh1006 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1006"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("max uses ", ps, depth, &sh1006->max_uses)) return False; return True;} /******************************************************************* Inits a SH_INFO_1007_STR structure********************************************************************/void init_srv_share_info1007_str(SH_INFO_1007_STR *sh1007, const char *alternate_directory_name){ DEBUG(5,("init_srv_share_info1007_str\n")); init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1007_str(const char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth){ if (sh1007 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1007_str"); depth++; if(!prs_align(ps)) return False; if(sh1007->ptrs->ptr_AlternateDirectoryName) if(!smb_io_unistr2("", &sh1007->uni_AlternateDirectoryName, True, ps, depth)) return False; return True;}/******************************************************************* makes a SH_INFO_1007 structure********************************************************************/void init_srv_share_info1007(SH_INFO_1007 *sh1007, uint32 flags, const char *alternate_directory_name){ DEBUG(5,("init_srv_share_info1007: %s\n", alternate_directory_name)); sh1007->flags = flags; sh1007->ptr_AlternateDirectoryName = (alternate_directory_name != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1007(const char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth){ if (sh1007 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1007"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("flags ", ps, depth, &sh1007->flags)) return False; if(!prs_uint32("ptr_Alter..", ps, depth, &sh1007->ptr_AlternateDirectoryName)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1501(const char* desc, SRV_SHARE_INFO_1501* sh1501, prs_struct* ps, int depth){ if(sh1501 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_share_info1501"); depth++; if(!prs_align(ps)) return False; if (!sec_io_desc_buf(desc, &sh1501->sdb, ps, depth)) return False; return True;} /******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_srv_share_ctr(const char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth){ if (ctr == NULL) return False; prs_debug(ps, depth, desc, "srv_io_srv_share_ctr"); depth++; if (UNMARSHALLING(ps)) { memset(ctr, '\0', sizeof(SRV_SHARE_INFO_CTR)); } if(!prs_align(ps)) return False; if(!prs_uint32("info_level", ps, depth, &ctr->info_level)) return False; if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value)) return False; if(!prs_uint32("ptr_share_info", ps, depth, &ctr->ptr_share_info)) return False; if (ctr->ptr_share_info == 0) return True; if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries)) return False; if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries)) return False; if (ctr->ptr_entries == 0) { if (ctr->num_entries == 0) return True; else return False; } if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2)) return False; if (ctr->num_entries2 != ctr->num_entries) return False; switch (ctr->switch_value) { case 0: { SRV_SHARE_INFO_0 *info0 = ctr->share.info0; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info0 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_0, num_entries))) return False; ctr->share.info0 = info0; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info0("", &info0[i].info_0, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { info0[i].info_0_str.ptrs = &info0[i].info_0; if(!srv_io_share_info0_str("", &info0[i].info_0_str, ps, depth)) return False; } break; } case 1: { SRV_SHARE_INFO_1 *info1 = ctr->share.info1; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_1, num_entries))) return False; ctr->share.info1 = info1; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1("", &info1[i].info_1, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { info1[i].info_1_str.ptrs = &info1[i].info_1; if(!srv_io_share_info1_str("", &info1[i].info_1_str, ps, depth)) return False; } break; } case 2: { SRV_SHARE_INFO_2 *info2 = ctr->share.info2; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info2 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_2,num_entries))) return False; ctr->share.info2 = info2; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info2("", &info2[i].info_2, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info2_str("", &info2[i].info_2, &info2[i].info_2_str, ps, depth)) return False; } break; } case 501: { SRV_SHARE_INFO_501 *info501 = ctr->share.info501; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info501 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_501, num_entries))) return False; ctr->share.info501 = info501; } for (i = 0; i < num_entries; i++) { if (!srv_io_share_info501("", &info501[i].info_501, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { if (!srv_io_share_info501_str("", &info501[i].info_501_str, ps, depth)) return False; } break; } case 502: { SRV_SHARE_INFO_502 *info502 = ctr->share.info502; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info502 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_502,num_entries))) return False; ctr->share.info502 = info502; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info502("", &info502[i].info_502, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { info502[i].info_502_str.ptrs = &info502[i].info_502; if(!srv_io_share_info502_str("", &info502[i].info_502_str, ps, depth)) return False; } break; } case 1004: { SRV_SHARE_INFO_1004 *info1004 = ctr->share.info1004; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1004 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1004,num_entries))) return False; ctr->share.info1004 = info1004; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1004("", &info1004[i].info_1004, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { info1004[i].info_1004_str.ptrs = &info1004[i].info_1004; if(!srv_io_share_info1004_str("", &info1004[i].info_1004_str, ps, depth)) return False; } break; } case 1005: { SRV_SHARE_INFO_1005 *info1005 = ctr->share.info1005; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1005 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1005,num_entries))) return False; ctr->share.info1005 = info1005; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1005("", &info1005[i], ps, depth)) return False; } break; } case 1006: { SRV_SHARE_INFO_1006 *info1006 = ctr->share.info1006; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1006 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1006,num_entries))) return False; ctr->share.info1006 = info1006; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1006("", &info1006[i], ps, depth)) return False; } break; } case 1007: { SRV_SHARE_INFO_1007 *info1007 = ctr->share.info1007; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1007 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1007,num_entries))) return False; ctr->share.info1007 = info1007;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?