parse_srv.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 2,455 行 · 第 1/5 页
C
2,455 行
} for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1007("", &info1007[i].info_1007, ps, depth)) return False; } for (i = 0; i < num_entries; i++) { info1007[i].info_1007_str.ptrs = &info1007[i].info_1007; if(!srv_io_share_info1007_str("", &info1007[i].info_1007_str, ps, depth)) return False; } break; } case 1501: { SRV_SHARE_INFO_1501 *info1501 = ctr->share.info1501; int num_entries = ctr->num_entries; int i; if (UNMARSHALLING(ps)) { if (!(info1501 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1501,num_entries))) return False; ctr->share.info1501 = info1501; } for (i = 0; i < num_entries; i++) { if(!srv_io_share_info1501("", &info1501[i], ps, depth)) return False; } break; } default: DEBUG(5,("%s no share info at switch_value %d\n", tab_depth(depth), ctr->switch_value)); break; } return True;}/******************************************************************* Inits a SRV_Q_NET_SHARE_ENUM structure.********************************************************************/void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n, const char *srv_name, uint32 info_level, uint32 preferred_len, ENUM_HND *hnd){ DEBUG(5,("init_q_net_share_enum\n")); init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name); q_n->ctr.info_level = q_n->ctr.switch_value = info_level; q_n->ctr.ptr_share_info = 1; q_n->ctr.num_entries = 0; q_n->ctr.ptr_entries = 0; q_n->ctr.num_entries2 = 0; q_n->preferred_len = preferred_len; memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_share_enum(const char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_share_enum"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name)) return False; if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth)) return False; if(!srv_io_srv_share_ctr("share_ctr", &q_n->ctr, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len)) return False; if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_r_net_share_enum(const char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth){ if (r_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_r_net_share_enum"); depth++; if(!srv_io_srv_share_ctr("share_ctr", &r_n->ctr, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries)) return False; if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth)) return False; if(!prs_werror("status", ps, depth, &r_n->status)) return False; return True;}/******************************************************************* initialises a structure.********************************************************************/BOOL init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level){ uint32 ptr_share_name; DEBUG(5,("init_srv_q_net_share_get_info\n")); init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name); init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name); q_n->info_level = info_level; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_share_get_info(const char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_share_get_info"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name)) return False; if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth)) return False; if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("info_level", ps, depth, &q_n->info_level)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_srv_share_info(const char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n){ if (r_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_srv_share_info"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value )) return False; if(!prs_uint32("ptr_share_ctr", ps, depth, &r_n->ptr_share_ctr)) return False; if (r_n->ptr_share_ctr != 0) { switch (r_n->switch_value) { case 0: if(!srv_io_share_info0("", &r_n->share.info0.info_0, ps, depth)) return False; /* allow access to pointers in the str part. */ r_n->share.info0.info_0_str.ptrs = &r_n->share.info0.info_0; if(!srv_io_share_info0_str("", &r_n->share.info0.info_0_str, ps, depth)) return False; break; case 1: if(!srv_io_share_info1("", &r_n->share.info1.info_1, ps, depth)) return False; /* allow access to pointers in the str part. */ r_n->share.info1.info_1_str.ptrs = &r_n->share.info1.info_1; if(!srv_io_share_info1_str("", &r_n->share.info1.info_1_str, ps, depth)) return False; break; case 2: if(!srv_io_share_info2("", &r_n->share.info2.info_2, ps, depth)) return False; if(!srv_io_share_info2_str("", &r_n->share.info2.info_2, &r_n->share.info2.info_2_str, ps, depth)) return False; break; case 501: if (!srv_io_share_info501("", &r_n->share.info501.info_501, ps, depth)) return False; if (!srv_io_share_info501_str("", &r_n->share.info501.info_501_str, ps, depth)) return False; break; case 502: if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth)) return False; /* allow access to pointers in the str part. */ r_n->share.info502.info_502_str.ptrs = &r_n->share.info502.info_502; if(!srv_io_share_info502_str("", &r_n->share.info502.info_502_str, ps, depth)) return False; break; case 1004: if(!srv_io_share_info1004("", &r_n->share.info1004.info_1004, ps, depth)) return False; /* allow access to pointers in the str part. */ r_n->share.info1004.info_1004_str.ptrs = &r_n->share.info1004.info_1004; if(!srv_io_share_info1004_str("", &r_n->share.info1004.info_1004_str, ps, depth)) return False; break; case 1005: if(!srv_io_share_info1005("", &r_n->share.info1005, ps, depth)) return False; break; case 1006: if(!srv_io_share_info1006("", &r_n->share.info1006, ps, depth)) return False; break; case 1007: if(!srv_io_share_info1007("", &r_n->share.info1007.info_1007, ps, depth)) return False; /* allow access to pointers in the str part. */ r_n->share.info1007.info_1007_str.ptrs = &r_n->share.info1007.info_1007; if(!srv_io_share_info1007_str("", &r_n->share.info1007.info_1007_str, ps, depth)) return False; break; case 1501: if (!srv_io_share_info1501("", &r_n->share.info1501, ps, depth)) return False; default: DEBUG(5,("%s no share info at switch_value %d\n", tab_depth(depth), r_n->switch_value)); break; } } return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_r_net_share_get_info(const char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth){ if (r_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_r_net_share_get_info"); depth++; if(!prs_align(ps)) return False; if(!srv_io_srv_share_info("info ", ps, depth, &r_n->info)) return False; if(!prs_align(ps)) return False; if(!prs_werror("status", ps, depth, &r_n->status)) return False; return True;}/******************************************************************* intialises a structure.********************************************************************/BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level, const SRV_SHARE_INFO *info) { uint32 ptr_share_name; DEBUG(5,("init_srv_q_net_share_set_info\n")); init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name); init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name); q_n->info_level = info_level; q_n->info = *info; q_n->ptr_parm_error = 1; q_n->parm_error = 0; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_share_set_info(const char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_share_set_info"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name)) return False; if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth)) return False; if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("info_level", ps, depth, &q_n->info_level)) return False; if(!prs_align(ps)) return False; if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_parm_error", ps, depth, &q_n->ptr_parm_error)) return False; if(q_n->ptr_parm_error!=0) { if(!prs_uint32("parm_error", ps, depth, &q_n->parm_error)) return False; } return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_r_net_share_set_info(const char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth){ if (r_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_r_net_share_set_info"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_parm_error ", ps, depth, &r_n->ptr_parm_error)) return False; if(r_n->ptr_parm_error) { if(!prs_uint32("parm_error ", ps, depth, &r_n->parm_error)) return False; } if(!prs_werror("status", ps, depth, &r_n->status)) return False; return True;} /******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_share_add(const char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_share_add"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name)) return False; if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("info_level", ps, depth, &q_n->info_level)) return False; if(!prs_align(ps)) return False; if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_err_index", ps, depth, &q_n->ptr_err_index)) return False; if (q_n->ptr_err_index) if (!prs_uint32("err_index", ps, depth, &q_n->err_index)) return False; return True;}void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, const char *srvname, const char *netname, uint32 type, const char *remark, uint32 perms, uint32 max_uses, uint32 num_uses, const char *path, const char *passwd, int level, SEC_DESC *sd){ switch(level) { case 502: { size_t sd_size = sec_desc_size(sd); q->ptr_srv_name = 1; init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE); q->info.switch_value = q->info_level = level; q->info.ptr_share_ctr = 1; init_srv_share_info502(&q->info.share.info502.info_502, netname, type, remark, perms, max_uses, num_uses, path, passwd, sd, sd_size); init_srv_share_info502_str(&q->info.share.info502.info_502_str, netname, remark, path, passwd, sd, sd_size); q->ptr_err_index = 1; q->err_index = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?