diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-04-25 14:04:06 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-04-25 14:04:06 +0000 |
commit | 10c5470835b43116ed48b3137c3b9cc867a20989 (patch) | |
tree | f93c8368fd9f2081f73081ceeb0a31c7b9f94bb9 /source/libsmb/climessage.c | |
parent | 90b574296e06cd6ed4fedc1e5a8ae412a5e78b45 (diff) | |
download | samba-10c5470835b43116ed48b3137c3b9cc867a20989.tar.gz samba-10c5470835b43116ed48b3137c3b9cc867a20989.tar.xz samba-10c5470835b43116ed48b3137c3b9cc867a20989.zip |
split clientgen.c into several parts
the next step is splitting out the auth code, to make adding lukes
NTLMSSP support easier
Diffstat (limited to 'source/libsmb/climessage.c')
-rw-r--r-- | source/libsmb/climessage.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/source/libsmb/climessage.c b/source/libsmb/climessage.c new file mode 100644 index 00000000000..c15fdbce8c5 --- /dev/null +++ b/source/libsmb/climessage.c @@ -0,0 +1,122 @@ +/* + Unix SMB/Netbios implementation. + Version 3.0 + client message handling routines + Copyright (C) Andrew Tridgell 1994-1998 + + 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. +*/ + +#define NO_SYSLOG + +#include "includes.h" + + +/**************************************************************************** +start a message sequence +****************************************************************************/ +BOOL cli_message_start(struct cli_state *cli, char *host, char *username, + int *grp) +{ + char *p; + + /* send a SMBsendstrt command */ + memset(cli->outbuf,'\0',smb_size); + set_message(cli->outbuf,0,0,True); + CVAL(cli->outbuf,smb_com) = SMBsendstrt; + SSVAL(cli->outbuf,smb_tid,cli->cnum); + cli_setup_packet(cli); + + p = smb_buf(cli->outbuf); + *p++ = 4; + pstrcpy(p,username); + unix_to_dos(p,True); + p = skip_string(p,1); + *p++ = 4; + pstrcpy(p,host); + unix_to_dos(p,True); + p = skip_string(p,1); + + set_message(cli->outbuf,0,PTR_DIFF(p,smb_buf(cli->outbuf)),False); + + cli_send_smb(cli); + + if (!cli_receive_smb(cli)) { + return False; + } + + if (cli_error(cli, NULL, NULL, NULL)) return False; + + *grp = SVAL(cli->inbuf,smb_vwv0); + + return True; +} + + +/**************************************************************************** +send a message +****************************************************************************/ +BOOL cli_message_text(struct cli_state *cli, char *msg, int len, int grp) +{ + char *p; + + memset(cli->outbuf,'\0',smb_size); + set_message(cli->outbuf,1,len+3,True); + CVAL(cli->outbuf,smb_com) = SMBsendtxt; + SSVAL(cli->outbuf,smb_tid,cli->cnum); + cli_setup_packet(cli); + + SSVAL(cli->outbuf,smb_vwv0,grp); + + p = smb_buf(cli->outbuf); + *p = 1; + SSVAL(p,1,len); + memcpy(p+3,msg,len); + cli_send_smb(cli); + + if (!cli_receive_smb(cli)) { + return False; + } + + if (cli_error(cli, NULL, NULL, NULL)) return False; + + return True; +} + +/**************************************************************************** +end a message +****************************************************************************/ +BOOL cli_message_end(struct cli_state *cli, int grp) +{ + memset(cli->outbuf,'\0',smb_size); + set_message(cli->outbuf,1,0,True); + CVAL(cli->outbuf,smb_com) = SMBsendend; + SSVAL(cli->outbuf,smb_tid,cli->cnum); + + SSVAL(cli->outbuf,smb_vwv0,grp); + + cli_setup_packet(cli); + + cli_send_smb(cli); + + if (!cli_receive_smb(cli)) { + return False; + } + + if (cli_error(cli, NULL, NULL, NULL)) return False; + + return True; +} + |