parse_srv.c
来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 2,455 行 · 第 1/5 页
C
2,455 行
} break; case 2: default: 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_info2(&q->info.share.info2.info_2, netname, type, remark, perms, max_uses, num_uses, path, passwd); init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname, remark, path, passwd); q->ptr_err_index = 1; q->err_index = 0; break; }}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_r_net_share_add(const char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth){ if (r_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_r_net_share_add"); 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;} /******************************************************************* initialises a structure.********************************************************************/void init_srv_q_net_share_del(SRV_Q_NET_SHARE_DEL *del, const char *srvname, const char *sharename){ del->ptr_srv_name = 1; init_unistr2(&del->uni_srv_name, srvname, UNI_STR_TERMINATE); init_unistr2(&del->uni_share_name, sharename, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_share_del(const char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_share_del"); 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("reserved", ps, depth, &q_n->reserved)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_r_net_share_del(const char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_r_net_share_del"); depth++; if(!prs_align(ps)) return False; if(!prs_werror("status", ps, depth, &q_n->status)) return False; return True;} /******************************************************************* Inits a SESS_INFO_0_STR structure********************************************************************/void init_srv_sess_info0_str(SESS_INFO_0_STR *ss0, const char *name){ DEBUG(5,("init_srv_sess_info0_str\n")); init_unistr2(&ss0->uni_name, name, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_sess_info0_str(const char *desc, SESS_INFO_0_STR *ss0, prs_struct *ps, int depth){ if (ss0 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_sess_info0_str"); depth++; if(!prs_align(ps)) return False; if(!smb_io_unistr2("", &ss0->uni_name, True, ps, depth)) return False; return True;}/******************************************************************* Inits a SESS_INFO_0 structure********************************************************************/void init_srv_sess_info0(SESS_INFO_0 *ss0, const char *name){ DEBUG(5,("init_srv_sess_info0: %s\n", name)); ss0->ptr_name = (name != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_sess_info0(const char *desc, SESS_INFO_0 *ss0, prs_struct *ps, int depth){ if (ss0 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_sess_info0"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_name", ps, depth, &ss0->ptr_name)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_srv_sess_info_0(const char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth){ if (ss0 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_srv_sess_info_0"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read)) return False; if(!prs_uint32("ptr_sess_info", ps, depth, &ss0->ptr_sess_info)) return False; if (ss0->ptr_sess_info != 0) { uint32 i; uint32 num_entries = ss0->num_entries_read; if (num_entries > MAX_SESS_ENTRIES) { num_entries = MAX_SESS_ENTRIES; /* report this! */ } if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2)) return False; SMB_ASSERT_ARRAY(ss0->info_0, num_entries); for (i = 0; i < num_entries; i++) { if(!srv_io_sess_info0("", &ss0->info_0[i], ps, depth)) return False; } for (i = 0; i < num_entries; i++) { if(!srv_io_sess_info0_str("", &ss0->info_0_str[i], ps, depth)) return False; } if(!prs_align(ps)) return False; } return True;}/******************************************************************* Inits a SESS_INFO_1_STR structure********************************************************************/void init_srv_sess_info1_str(SESS_INFO_1_STR *ss1, const char *name, const char *user){ DEBUG(5,("init_srv_sess_info1_str\n")); init_unistr2(&ss1->uni_name, name, UNI_STR_TERMINATE); init_unistr2(&ss1->uni_user, user, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_sess_info1_str(const char *desc, SESS_INFO_1_STR *ss1, prs_struct *ps, int depth){ if (ss1 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_sess_info1_str"); depth++; if(!prs_align(ps)) return False; if(!smb_io_unistr2("", &ss1->uni_name, True, ps, depth)) return False; if(!smb_io_unistr2("", &(ss1->uni_user), True, ps, depth)) return False; return True;}/******************************************************************* Inits a SESS_INFO_1 structure********************************************************************/void init_srv_sess_info1(SESS_INFO_1 *ss1, const char *name, const char *user, uint32 num_opens, uint32 open_time, uint32 idle_time, uint32 user_flags){ DEBUG(5,("init_srv_sess_info1: %s\n", name)); ss1->ptr_name = (name != NULL) ? 1 : 0; ss1->ptr_user = (user != NULL) ? 1 : 0; ss1->num_opens = num_opens; ss1->open_time = open_time; ss1->idle_time = idle_time; ss1->user_flags = user_flags;}/*******************************************************************reads or writes a structure.********************************************************************/static BOOL srv_io_sess_info1(const char *desc, SESS_INFO_1 *ss1, prs_struct *ps, int depth){ if (ss1 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_sess_info1"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_name ", ps, depth, &ss1->ptr_name)) return False; if(!prs_uint32("ptr_user ", ps, depth, &ss1->ptr_user)) return False; if(!prs_uint32("num_opens ", ps, depth, &ss1->num_opens)) return False; if(!prs_uint32("open_time ", ps, depth, &ss1->open_time)) return False; if(!prs_uint32("idle_time ", ps, depth, &ss1->idle_time)) return False; if(!prs_uint32("user_flags", ps, depth, &ss1->user_flags)) return False; return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_srv_sess_info_1(const char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth){ if (ss1 == NULL) return False; prs_debug(ps, depth, desc, "srv_io_srv_sess_info_1"); depth++; if(!prs_align(ps)) return False; if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read)) return False; if(!prs_uint32("ptr_sess_info", ps, depth, &ss1->ptr_sess_info)) return False; if (ss1->ptr_sess_info != 0) { uint32 i; uint32 num_entries = ss1->num_entries_read; if (num_entries > MAX_SESS_ENTRIES) { num_entries = MAX_SESS_ENTRIES; /* report this! */ } if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2)) return False; SMB_ASSERT_ARRAY(ss1->info_1, num_entries); for (i = 0; i < num_entries; i++) { if(!srv_io_sess_info1("", &ss1->info_1[i], ps, depth)) return False; } for (i = 0; i < num_entries; i++) { if(!srv_io_sess_info1_str("", &ss1->info_1_str[i], ps, depth)) return False; } if(!prs_align(ps)) return False; } return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_srv_sess_ctr(const char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth){ SRV_SESS_INFO_CTR *ctr = *pp_ctr; prs_debug(ps, depth, desc, "srv_io_srv_sess_ctr"); depth++; if(UNMARSHALLING(ps)) { ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_SESS_INFO_CTR, 1); if (ctr == NULL) return False; } if (ctr == NULL) return False; if(!prs_align(ps)) return False; if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value)) return False; if(!prs_uint32("ptr_sess_ctr", ps, depth, &ctr->ptr_sess_ctr)) return False; if (ctr->ptr_sess_ctr != 0) { switch (ctr->switch_value) { case 0: if(!srv_io_srv_sess_info_0("", &ctr->sess.info0, ps, depth)) return False; break; case 1: if(!srv_io_srv_sess_info_1("", &ctr->sess.info1, ps, depth)) return False; break; default: DEBUG(5,("%s no session info at switch_value %d\n", tab_depth(depth), ctr->switch_value)); break; } } return True;}/******************************************************************* Inits a SRV_Q_NET_SESS_ENUM structure.********************************************************************/void init_srv_q_net_sess_enum(SRV_Q_NET_SESS_ENUM *q_n, const char *srv_name, const char *qual_name, const char *user_name, uint32 sess_level, SRV_SESS_INFO_CTR *ctr, uint32 preferred_len, ENUM_HND *hnd){ q_n->ctr = ctr; DEBUG(5,("init_q_net_sess_enum\n")); init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name); init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name); init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name); q_n->sess_level = sess_level; q_n->preferred_len = preferred_len; memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));}/******************************************************************* Reads or writes a structure.********************************************************************/BOOL srv_io_q_net_sess_enum(const char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps, int depth){ if (q_n == NULL) return False; prs_debug(ps, depth, desc, "srv_io_q_net_sess_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(!prs_align(ps)) return False; if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name)) return False; if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name)) return False; if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth)) return False; if(!prs_align(ps)) return False; if(!prs_uint32("sess_level", ps, depth, &q_n->sess_level)) return False; if (q_n->sess_level != (uint32)-1) { if(!srv_io_srv_sess_ctr("sess_ctr", &q_n->ctr, ps, depth)) 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;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?