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