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