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