parse_srv.c

来自「samba-3.0.22.tar.gz 编译smb服务器的源码」· C语言 代码 · 共 2,455 行 · 第 1/5 页

C
2,455
字号
/*  *  Unix SMB/CIFS implementation. *  RPC Pipe client / server routines *  Copyright (C) Andrew Tridgell              1992-1997, *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997, *  Copyright (C) Paul Ashton                       1997, *  Copyright (C) Jeremy Allison		    1999, *  Copyright (C) Nigel Williams		    2001, *  Copyright (C) Jim McDonough (jmcd@us.ibm.com)   2002. *   *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. *   *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. *   *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include "includes.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_RPC_PARSE/******************************************************************* Inits a SH_INFO_0_STR structure********************************************************************/void init_srv_share_info0_str(SH_INFO_0_STR *sh0, const char *net_name){	DEBUG(5,("init_srv_share_info0_str\n"));	init_unistr2(&sh0->uni_netname, net_name, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info0_str(const char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth){	if (sh0 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info0_str");	depth++;	if(!prs_align(ps))		return False;	if(sh0->ptrs->ptr_netname)		if(!smb_io_unistr2("", &sh0->uni_netname, True, ps, depth))			return False;	return True;}/******************************************************************* makes a SH_INFO_0 structure********************************************************************/void init_srv_share_info0(SH_INFO_0 *sh0, const char *net_name){	DEBUG(5,("init_srv_share_info0: %s\n", net_name));	sh0->ptr_netname = (net_name != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info0(const char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth){	if (sh0 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info0");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("ptr_netname", ps, depth, &sh0->ptr_netname))		return False;	return True;}/******************************************************************* Inits a SH_INFO_1_STR structure********************************************************************/void init_srv_share_info1_str(SH_INFO_1_STR *sh1, const char *net_name, const char *remark){	DEBUG(5,("init_srv_share_info1_str\n"));	init_unistr2(&sh1->uni_netname, net_name, UNI_STR_TERMINATE);	init_unistr2(&sh1->uni_remark, remark, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1_str(const char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth){	if (sh1 == NULL)		return False;		prs_debug(ps, depth, desc, "srv_io_share_info1_str");	depth++;		if(!prs_align(ps))		return False;	if(sh1->ptrs->ptr_netname)		if(!smb_io_unistr2("", &sh1->uni_netname, True, ps, depth))			return False;		if(!prs_align(ps))		return False;		if(sh1->ptrs->ptr_remark)		if(!smb_io_unistr2("", &sh1->uni_remark, True, ps, depth))			return False;		return True;}/******************************************************************* makes a SH_INFO_1 structure********************************************************************/void init_srv_share_info1(SH_INFO_1 *sh1, const char *net_name, uint32 type, const char *remark){	DEBUG(5,("init_srv_share_info1: %s %8x %s\n", net_name, type, remark));		sh1->ptr_netname = (net_name != NULL) ? 1 : 0;	sh1->type        = type;	sh1->ptr_remark  = (remark != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info1(const char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth){	if (sh1 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info1");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("ptr_netname", ps, depth, &sh1->ptr_netname))		return False;	if(!prs_uint32("type       ", ps, depth, &sh1->type))		return False;	if(!prs_uint32("ptr_remark ", ps, depth, &sh1->ptr_remark))		return False;	return True;}/******************************************************************* Inits a SH_INFO_2_STR structure********************************************************************/void init_srv_share_info2_str(SH_INFO_2_STR *sh2,				const char *net_name, const char *remark,				const char *path, const char *passwd){	DEBUG(5,("init_srv_share_info2_str\n"));	init_unistr2(&sh2->uni_netname, net_name, UNI_STR_TERMINATE);	init_unistr2(&sh2->uni_remark, remark, UNI_STR_TERMINATE);	init_unistr2(&sh2->uni_path, path, UNI_STR_TERMINATE);	init_unistr2(&sh2->uni_passwd, passwd, UNI_STR_TERMINATE);}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info2_str(const char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth){	if (sh2 == NULL)		return False;	if (UNMARSHALLING(ps))		ZERO_STRUCTP(sh2);	prs_debug(ps, depth, desc, "srv_io_share_info2_str");	depth++;	if(!prs_align(ps))		return False;	if (sh->ptr_netname)		if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))			return False;	if (sh->ptr_remark)		if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))			return False;	if (sh->ptr_netname)		if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))			return False;	if (sh->ptr_passwd)		if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))			return False;	return True;}/******************************************************************* Inits a SH_INFO_2 structure********************************************************************/void init_srv_share_info2(SH_INFO_2 *sh2,				const char *net_name, uint32 type, const char *remark,				uint32 perms, uint32 max_uses, uint32 num_uses,				const char *path, const char *passwd){	DEBUG(5,("init_srv_share_info2: %s %8x %s\n", net_name, type, remark));	sh2->ptr_netname = (net_name != NULL) ? 1 : 0;	sh2->type        = type;	sh2->ptr_remark  = (remark != NULL) ? 1 : 0;	sh2->perms       = perms;	sh2->max_uses    = max_uses;	sh2->num_uses    = num_uses;	sh2->ptr_path    = (path != NULL) ? 1 : 0;	sh2->ptr_passwd  = (passwd != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info2(const char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth){	if (sh2 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info2");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("ptr_netname", ps, depth, &sh2->ptr_netname))		return False;	if(!prs_uint32("type       ", ps, depth, &sh2->type))		return False;	if(!prs_uint32("ptr_remark ", ps, depth, &sh2->ptr_remark))		return False;	if(!prs_uint32("perms      ", ps, depth, &sh2->perms))		return False;	if(!prs_uint32("max_uses   ", ps, depth, &sh2->max_uses))		return False;	if(!prs_uint32("num_uses   ", ps, depth, &sh2->num_uses))		return False;	if(!prs_uint32("ptr_path   ", ps, depth, &sh2->ptr_path))		return False;	if(!prs_uint32("ptr_passwd ", ps, depth, &sh2->ptr_passwd))		return False;	return True;}/******************************************************************* Inits a SH_INFO_501_STR structure********************************************************************/void init_srv_share_info501_str(SH_INFO_501_STR *sh501,				const char *net_name, const char *remark){	DEBUG(5,("init_srv_share_info501_str\n"));	init_unistr2(&sh501->uni_netname, net_name, UNI_STR_TERMINATE);	init_unistr2(&sh501->uni_remark, remark, UNI_STR_TERMINATE);}/******************************************************************* Inits a SH_INFO_2 structure*******************************************************************/void init_srv_share_info501(SH_INFO_501 *sh501, const char *net_name, uint32 type, const char *remark, uint32 csc_policy){	DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,		remark, csc_policy));	ZERO_STRUCTP(sh501);	sh501->ptr_netname = (net_name != NULL) ? 1 : 0;	sh501->type = type;	sh501->ptr_remark = (remark != NULL) ? 1 : 0;	sh501->csc_policy = csc_policy;}/******************************************************************* Reads of writes a structure.*******************************************************************/static BOOL srv_io_share_info501(const char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth){	if (sh501 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info501");	depth++;	if (!prs_align(ps))		return False;	if (!prs_uint32("ptr_netname", ps, depth, &sh501->ptr_netname))		return False;	if (!prs_uint32("type     ", ps, depth, &sh501->type))		return False;	if (!prs_uint32("ptr_remark ", ps, depth, &sh501->ptr_remark))		return False;	if (!prs_uint32("csc_policy ", ps, depth, &sh501->csc_policy))		return False;	return True;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info501_str(const char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth){	if (sh501 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info501_str");	depth++;	if(!prs_align(ps))		return False;	if(!smb_io_unistr2("", &sh501->uni_netname, True, ps, depth))		return False;	if(!prs_align(ps))		return False;	if(!smb_io_unistr2("", &sh501->uni_remark, True, ps, depth))		return False;	return True;}/******************************************************************* Inits a SH_INFO_502 structure********************************************************************/void init_srv_share_info502(SH_INFO_502 *sh502,				const char *net_name, uint32 type, const char *remark,				uint32 perms, uint32 max_uses, uint32 num_uses,				const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size){	DEBUG(5,("init_srv_share_info502: %s %8x %s\n", net_name, type, remark));	ZERO_STRUCTP(sh502);	sh502->ptr_netname = (net_name != NULL) ? 1 : 0;	sh502->type        = type;	sh502->ptr_remark  = (remark != NULL) ? 1 : 0;	sh502->perms       = perms;	sh502->max_uses    = max_uses;	sh502->num_uses    = num_uses;	sh502->ptr_path    = (path != NULL) ? 1 : 0;	sh502->ptr_passwd  = (passwd != NULL) ? 1 : 0;	sh502->reserved    = 0;  /* actual size within rpc */	sh502->sd_size     = (uint32)sd_size;	sh502->ptr_sd      = (psd != NULL) ? 1 : 0;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info502(const char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth){	if (sh502 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info502");	depth++;	if(!prs_align(ps))		return False;	if(!prs_uint32("ptr_netname", ps, depth, &sh502->ptr_netname))		return False;	if(!prs_uint32("type       ", ps, depth, &sh502->type))		return False;	if(!prs_uint32("ptr_remark ", ps, depth, &sh502->ptr_remark))		return False;	if(!prs_uint32("perms      ", ps, depth, &sh502->perms))		return False;	if(!prs_uint32("max_uses   ", ps, depth, &sh502->max_uses))		return False;	if(!prs_uint32("num_uses   ", ps, depth, &sh502->num_uses))		return False;	if(!prs_uint32("ptr_path   ", ps, depth, &sh502->ptr_path))		return False;	if(!prs_uint32("ptr_passwd ", ps, depth, &sh502->ptr_passwd))		return False;	if(!prs_uint32_pre("reserved   ", ps, depth, &sh502->reserved, &sh502->reserved_offset))		return False;	if(!prs_uint32("ptr_sd     ", ps, depth, &sh502->ptr_sd))		return False;	return True;}/******************************************************************* Inits a SH_INFO_502_STR structure********************************************************************/void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,				const char *net_name, const char *remark,				const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size){	DEBUG(5,("init_srv_share_info502_str\n"));	init_unistr2(&sh502str->uni_netname, net_name, UNI_STR_TERMINATE);	init_unistr2(&sh502str->uni_remark, remark, UNI_STR_TERMINATE);	init_unistr2(&sh502str->uni_path, path, UNI_STR_TERMINATE);	init_unistr2(&sh502str->uni_passwd, passwd, UNI_STR_TERMINATE);	sh502str->sd = psd;	sh502str->reserved = 0;	sh502str->sd_size = sd_size;}/******************************************************************* Reads or writes a structure.********************************************************************/static BOOL srv_io_share_info502_str(const char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth){	if (sh502 == NULL)		return False;	prs_debug(ps, depth, desc, "srv_io_share_info502_str");	depth++;	if(!prs_align(ps))		return False;	if(sh502->ptrs->ptr_netname) {		if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))			return False;	}	if(!prs_align(ps))		return False;	if(sh502->ptrs->ptr_remark) {		if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))			return False;	}	if(!prs_align(ps))		return False;	if(sh502->ptrs->ptr_path) {		if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))			return False;	}	if(!prs_align(ps))		return False;	if(sh502->ptrs->ptr_passwd) {		if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))			return False;	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?