⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientgen.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		cli = SMB_MALLOC_P(struct cli_state);		if (!cli)			return NULL;		ZERO_STRUCTP(cli);                alloced_cli = True;	}	if (cli->initialised)		cli_close_connection(cli);	ZERO_STRUCTP(cli);	cli->port = 0;	cli->fd = -1;	cli->cnum = -1;	cli->pid = (uint16)sys_getpid();	cli->mid = 1;	cli->vuid = UID_FIELD_INVALID;	cli->protocol = PROTOCOL_NT1;	cli->timeout = 20000; /* Timeout is in milliseconds. */	cli->bufsize = CLI_BUFFER_SIZE+4;	cli->max_xmit = cli->bufsize;	cli->outbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);	cli->inbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);	cli->oplock_handler = cli_oplock_ack;	cli->case_sensitive = False;	cli->smb_rw_error = 0;	cli->use_spnego = lp_client_use_spnego();	cli->capabilities = CAP_UNICODE | CAP_STATUS32 | CAP_DFS;	/* Set the CLI_FORCE_DOSERR environment variable to test	   client routines using DOS errors instead of STATUS32	   ones.  This intended only as a temporary hack. */		if (getenv("CLI_FORCE_DOSERR"))		cli->force_dos_errors = True;	if (lp_client_signing()) 		cli->sign_info.allow_smb_signing = True;	if (lp_client_signing() == Required) 		cli->sign_info.mandatory_signing = True;                                   	if (!cli->outbuf || !cli->inbuf)                goto error;	if ((cli->mem_ctx = talloc_init("cli based talloc")) == NULL)                goto error;	memset(cli->outbuf, 0, cli->bufsize);	memset(cli->inbuf, 0, cli->bufsize);#if defined(DEVELOPER)	/* just because we over-allocate, doesn't mean it's right to use it */	clobber_region(FUNCTION_MACRO, __LINE__, cli->outbuf+cli->bufsize, SAFETY_MARGIN);	clobber_region(FUNCTION_MACRO, __LINE__, cli->inbuf+cli->bufsize, SAFETY_MARGIN);#endif	/* initialise signing */	cli_null_set_signing(cli);	cli->initialised = 1;	cli->allocated = alloced_cli;	return cli;        /* Clean up after malloc() error */ error:        SAFE_FREE(cli->inbuf);        SAFE_FREE(cli->outbuf);        if (alloced_cli)                SAFE_FREE(cli);        return NULL;}/**************************************************************************** External interface. Close an open named pipe over SMB. Free any authentication data. ****************************************************************************/void cli_rpc_pipe_close(struct rpc_pipe_client *cli){	BOOL ret;	if (!cli) {		return;	}	ret = cli_close(cli->cli, cli->fnum);	if (!ret) {		DEBUG(0,("cli_rpc_pipe_close: cli_close failed on pipe %s, "                         "fnum 0x%x "                         "to machine %s.  Error was %s\n",                         cli->pipe_name,                         (int) cli->fnum,                         cli->cli->desthost,                         cli_errstr(cli->cli)));	}	if (cli->auth.cli_auth_data_free_func) {		(*cli->auth.cli_auth_data_free_func)(&cli->auth);	}	DEBUG(10,("cli_rpc_pipe_close: closed pipe %s to machine %s\n",		cli->pipe_name, cli->cli->desthost ));	DLIST_REMOVE(cli->cli->pipe_list, cli);	talloc_destroy(cli->mem_ctx);}/**************************************************************************** Close all pipes open on this session.****************************************************************************/void cli_nt_pipes_close(struct cli_state *cli){	struct rpc_pipe_client *cp, *next;	for (cp = cli->pipe_list; cp; cp = next) {		next = cp->next;		cli_rpc_pipe_close(cp);	}}/**************************************************************************** Close a client connection and free the memory without destroying cli itself.****************************************************************************/void cli_close_connection(struct cli_state *cli){	cli_nt_pipes_close(cli);	/*	 * tell our peer to free his resources.  Wihtout this, when an	 * application attempts to do a graceful shutdown and calls	 * smbc_free_context() to clean up all connections, some connections	 * can remain active on the peer end, until some (long) timeout period	 * later.  This tree disconnect forces the peer to clean up, since the	 * connection will be going away.	 *	 * Also, do not do tree disconnect when cli->smb_rw_error is DO_NOT_DO_TDIS	 * the only user for this so far is smbmount which passes opened connection	 * down to kernel's smbfs module.	 */	if ( (cli->cnum != (uint16)-1) && (cli->smb_rw_error != DO_NOT_DO_TDIS ) ) {		cli_tdis(cli);	}        	SAFE_FREE(cli->outbuf);	SAFE_FREE(cli->inbuf);	cli_free_signing_context(cli);	data_blob_free(&cli->secblob);	data_blob_free(&cli->user_session_key);	if (cli->mem_ctx) {		talloc_destroy(cli->mem_ctx);		cli->mem_ctx = NULL;	}	if (cli->fd != -1) {		close(cli->fd);	}	cli->fd = -1;	cli->smb_rw_error = 0;}/**************************************************************************** Shutdown a client structure.****************************************************************************/void cli_shutdown(struct cli_state *cli){	BOOL allocated = cli->allocated;	cli_close_connection(cli);	ZERO_STRUCTP(cli);	if (allocated) {		free(cli);	}}/**************************************************************************** Set socket options on a open connection.****************************************************************************/void cli_sockopt(struct cli_state *cli, const char *options){	set_socket_options(cli->fd, options);}/**************************************************************************** Set the PID to use for smb messages. Return the old pid.****************************************************************************/uint16 cli_setpid(struct cli_state *cli, uint16 pid){	uint16 ret = cli->pid;	cli->pid = pid;	return ret;}/**************************************************************************** Set the case sensitivity flag on the packets. Returns old state.****************************************************************************/BOOL cli_set_case_sensitive(struct cli_state *cli, BOOL case_sensitive){	BOOL ret = cli->case_sensitive;	cli->case_sensitive = case_sensitive;	return ret;}/****************************************************************************Send a keepalive packet to the server****************************************************************************/BOOL cli_send_keepalive(struct cli_state *cli){        if (cli->fd == -1) {                DEBUG(3, ("cli_send_keepalive: fd == -1\n"));                return False;        }        if (!send_keepalive(cli->fd)) {                close(cli->fd);                cli->fd = -1;                DEBUG(0,("Error sending keepalive packet to client.\n"));                return False;        }        return True;}/**************************************************************************** Send/receive a SMBecho command: ping the server****************************************************************************/BOOL cli_echo(struct cli_state *cli, unsigned char *data, size_t length){	char *p;	SMB_ASSERT(length < 1024);	memset(cli->outbuf,'\0',smb_size);	set_message(cli->outbuf,1,length,True);	SCVAL(cli->outbuf,smb_com,SMBecho);	SSVAL(cli->outbuf,smb_tid,65535);	SSVAL(cli->outbuf,smb_vwv0,1);	cli_setup_packet(cli);	p = smb_buf(cli->outbuf);	memcpy(p, data, length);	p += length;	cli_setup_bcc(cli, p);	cli_send_smb(cli);	if (!cli_receive_smb(cli)) {		return False;	}	if (cli_is_error(cli)) {		return False;	}	return True;}

⌨️ 快捷键说明

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