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