diff options
author | Volker Lendecke <vl@sernet.de> | 2008-09-08 22:53:50 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2008-09-09 12:14:15 +0200 |
commit | 4782c3ad8d661697646fcb093cc0d2708500c16e (patch) | |
tree | 3a9cb4a6ddae0d26a2c183cf161432d6075a18a0 /source/smbd/nttrans.c | |
parent | ef6697435efba2afe15498caeb5daae7aea10604 (diff) | |
download | samba-4782c3ad8d661697646fcb093cc0d2708500c16e.tar.gz samba-4782c3ad8d661697646fcb093cc0d2708500c16e.tar.xz samba-4782c3ad8d661697646fcb093cc0d2708500c16e.zip |
Fix calculation of useable_space for trans2 and nttrans replies
When alignment was in place, we pretended to send more data/params according to
the param_offset/param_length and data_offset/data_length parameters than would
actually fit into the SMB according to the NBSS length field.
(cherry picked from commit 2ae870aead5e0ea7e7f9f6f9730f989ae34755b9)
Diffstat (limited to 'source/smbd/nttrans.c')
-rw-r--r-- | source/smbd/nttrans.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/source/smbd/nttrans.c b/source/smbd/nttrans.c index 0b48fa2c4d5..13caf77b983 100644 --- a/source/smbd/nttrans.c +++ b/source/smbd/nttrans.c @@ -113,14 +113,11 @@ void send_nt_replies(connection_struct *conn, + alignment_offset + data_alignment_offset); - /* - * useable_space can never be more than max_send minus the - * alignment offset. - */ - - useable_space = MIN(useable_space, - max_send - (alignment_offset+data_alignment_offset)); - + if (useable_space < 0) { + DEBUG(0, ("send_nt_replies failed sanity useable_space " + "= %d!!!", useable_space)); + exit_server_cleanly("send_nt_replies: srv_send_smb failed."); + } while (params_to_send || data_to_send) { @@ -128,8 +125,7 @@ void send_nt_replies(connection_struct *conn, * Calculate whether we will totally or partially fill this packet. */ - total_sent_thistime = params_to_send + data_to_send + - alignment_offset + data_alignment_offset; + total_sent_thistime = params_to_send + data_to_send; /* * We can never send more than useable_space. @@ -137,7 +133,9 @@ void send_nt_replies(connection_struct *conn, total_sent_thistime = MIN(total_sent_thistime, useable_space); - reply_outbuf(req, 18, total_sent_thistime); + reply_outbuf(req, 18, + total_sent_thistime + alignment_offset + + data_alignment_offset); /* * Set total params and data to be sent. @@ -264,7 +262,7 @@ void send_nt_replies(connection_struct *conn, if(params_to_send < 0 || data_to_send < 0) { DEBUG(0,("send_nt_replies failed sanity check pts = %d, dts = %d\n!!!", params_to_send, data_to_send)); - return; + exit_server_cleanly("send_nt_replies: internal error"); } } } |