📄 srv_srvsvc.c
字号:
/* * 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 2001, * Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2003. * * 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. *//* This is the interface to the srvsvc pipe. */#include "includes.h"#undef DBGC_CLASS#define DBGC_CLASS DBGC_RPC_SRV/******************************************************************* api_srv_net_srv_get_info********************************************************************/static BOOL api_srv_net_srv_get_info(pipes_struct *p){ SRV_Q_NET_SRV_GET_INFO q_u; SRV_R_NET_SRV_GET_INFO r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net server get info */ if (!srv_io_q_net_srv_get_info("", &q_u, data, 0)) return False; r_u.status = _srv_net_srv_get_info(p, &q_u, &r_u); /* store the response in the SMB stream */ if (!srv_io_r_net_srv_get_info("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* api_srv_net_srv_get_info********************************************************************/static BOOL api_srv_net_srv_set_info(pipes_struct *p){ SRV_Q_NET_SRV_SET_INFO q_u; SRV_R_NET_SRV_SET_INFO r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net server set info */ if (!srv_io_q_net_srv_set_info("", &q_u, data, 0)) return False; r_u.status = _srv_net_srv_set_info(p, &q_u, &r_u); /* store the response in the SMB stream */ if (!srv_io_r_net_srv_set_info("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* api_srv_net_file_enum********************************************************************/static BOOL api_srv_net_file_enum(pipes_struct *p){ SRV_Q_NET_FILE_ENUM q_u; SRV_R_NET_FILE_ENUM r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net file enum */ if (!srv_io_q_net_file_enum("", &q_u, data, 0)) return False; r_u.status = _srv_net_file_enum(p, &q_u, &r_u); /* store the response in the SMB stream */ if(!srv_io_r_net_file_enum("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* api_srv_net_conn_enum********************************************************************/static BOOL api_srv_net_conn_enum(pipes_struct *p){ SRV_Q_NET_CONN_ENUM q_u; SRV_R_NET_CONN_ENUM r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net server get enum */ if (!srv_io_q_net_conn_enum("", &q_u, data, 0)) return False; r_u.status = _srv_net_conn_enum(p, &q_u, &r_u); /* store the response in the SMB stream */ if (!srv_io_r_net_conn_enum("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* Enumerate sessions.********************************************************************/static BOOL api_srv_net_sess_enum(pipes_struct *p){ SRV_Q_NET_SESS_ENUM q_u; SRV_R_NET_SESS_ENUM r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net server get enum */ if (!srv_io_q_net_sess_enum("", &q_u, data, 0)) return False; /* construct reply. always indicate success */ r_u.status = _srv_net_sess_enum(p, &q_u, &r_u); /* store the response in the SMB stream */ if (!srv_io_r_net_sess_enum("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* Delete session.********************************************************************/static BOOL api_srv_net_sess_del(pipes_struct *p){ SRV_Q_NET_SESS_DEL q_u; SRV_R_NET_SESS_DEL r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* grab the net server get enum */ if (!srv_io_q_net_sess_del("", &q_u, data, 0)) return False; /* construct reply. always indicate success */ r_u.status = _srv_net_sess_del(p, &q_u, &r_u); /* store the response in the SMB stream */ if (!srv_io_r_net_sess_del("", &r_u, rdata, 0)) return False; return True;}/******************************************************************* RPC to enumerate shares.********************************************************************/static BOOL api_srv_net_share_enum_all(pipes_struct *p){ SRV_Q_NET_SHARE_ENUM q_u; SRV_R_NET_SHARE_ENUM r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* Unmarshall the net server get enum. */ if(!srv_io_q_net_share_enum("", &q_u, data, 0)) { DEBUG(0,("api_srv_net_share_enum_all: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n")); return False; } r_u.status = _srv_net_share_enum_all(p, &q_u, &r_u); if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) { DEBUG(0,("api_srv_net_share_enum_all: Failed to marshall SRV_R_NET_SHARE_ENUM.\n")); return False; } return True;}/******************************************************************* RPC to enumerate shares.********************************************************************/static BOOL api_srv_net_share_enum(pipes_struct *p){ SRV_Q_NET_SHARE_ENUM q_u; SRV_R_NET_SHARE_ENUM r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* Unmarshall the net server get enum. */ if(!srv_io_q_net_share_enum("", &q_u, data, 0)) { DEBUG(0,("api_srv_net_share_enum: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n")); return False; } r_u.status = _srv_net_share_enum(p, &q_u, &r_u); if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) { DEBUG(0,("api_srv_net_share_enum: Failed to marshall SRV_R_NET_SHARE_ENUM.\n")); return False; } return True;}/******************************************************************* RPC to return share information.********************************************************************/static BOOL api_srv_net_share_get_info(pipes_struct *p){ SRV_Q_NET_SHARE_GET_INFO q_u; SRV_R_NET_SHARE_GET_INFO r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata; ZERO_STRUCT(q_u); ZERO_STRUCT(r_u); /* Unmarshall the net server get info. */ if(!srv_io_q_net_share_get_info("", &q_u, data, 0)) { DEBUG(0,("api_srv_net_share_get_info: Failed to unmarshall SRV_Q_NET_SHARE_GET_INFO.\n")); return False; } r_u.status = _srv_net_share_get_info(p, &q_u, &r_u); if(!srv_io_r_net_share_get_info("", &r_u, rdata, 0)) { DEBUG(0,("api_srv_net_share_get_info: Failed to marshall SRV_R_NET_SHARE_GET_INFO.\n")); return False; } return True;}/******************************************************************* RPC to set share information.********************************************************************/static BOOL api_srv_net_share_set_info(pipes_struct *p){ SRV_Q_NET_SHARE_SET_INFO q_u; SRV_R_NET_SHARE_SET_INFO r_u; prs_struct *data = &p->in_data.data; prs_struct *rdata = &p->out_data.rdata;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -