*/
#include "includes.h"
-RCSID("$OpenBSD: packet.c,v 1.96 2002/06/23 21:10:02 deraadt Exp $");
+RCSID("$OpenBSD: packet.c,v 1.100 2002/11/21 22:45:31 markus Exp $");
#include "xmalloc.h"
#include "buffer.h"
packet_set_connection(int fd_in, int fd_out)
{
Cipher *none = cipher_by_name("none");
+
if (none == NULL)
fatal("packet_set_connection: cannot load cipher 'none'");
connection_in = fd_in;
int number)
{
Cipher *cipher = cipher_by_number(number);
+
if (cipher == NULL)
fatal("packet_set_encryption_key: unknown cipher number %d", number);
if (keylen < 20)
packet_put_char(int value)
{
char ch = value;
+
buffer_append(&outgoing_packet, &ch, 1);
}
void
CipherContext *cc;
int encrypt;
- debug("newkeys: mode %d", mode);
+ debug2("set_newkeys: mode %d", mode);
if (mode == MODE_OUT) {
cc = &send_context;
encrypt = CIPHER_DECRYPT;
}
if (newkeys[mode] != NULL) {
- debug("newkeys: rekeying");
+ debug("set_newkeys: rekeying");
cipher_cleanup(cc);
enc = &newkeys[mode]->enc;
mac = &newkeys[mode]->mac;
cp = buffer_ptr(&input);
len = GET_32BIT(cp);
if (len < 1 + 2 + 2 || len > 256 * 1024)
- packet_disconnect("Bad packet length %d.", len);
+ packet_disconnect("Bad packet length %u.", len);
padded_len = (len + 8) & ~7;
/* Check if the packet has been entirely received. */
packet_length = GET_32BIT(cp);
if (packet_length < 1 + 4 || packet_length > 256 * 1024) {
buffer_dump(&incoming_packet);
- packet_disconnect("Bad packet length %d.", packet_length);
+ packet_disconnect("Bad packet length %u.", packet_length);
}
- DBG(debug("input: packet len %d", packet_length+4));
+ DBG(debug("input: packet len %u", packet_length+4));
buffer_consume(&input, block_size);
}
/* we have a partial packet of block_size bytes */
buffer_clear(&incoming_packet);
buffer_append(&incoming_packet, buffer_ptr(&compression_buffer),
buffer_len(&compression_buffer));
- DBG(debug("input: len after de-compress %d", buffer_len(&incoming_packet)));
+ DBG(debug("input: len after de-compress %d",
+ buffer_len(&incoming_packet)));
}
/*
* get packet type, implies consume.
packet_get_char(void)
{
char ch;
+
buffer_get(&incoming_packet, &ch, 1);
return (u_char) ch;
}
packet_get_raw(int *length_ptr)
{
int bytes = buffer_len(&incoming_packet);
+
if (length_ptr != NULL)
*length_ptr = bytes;
return buffer_ptr(&incoming_packet);
char buf[1024];
va_list args;
static int disconnecting = 0;
+
if (disconnecting) /* Guard against recursive invocations. */
fatal("packet_disconnect called recursively.");
disconnecting = 1;
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
+ /* Display the error locally */
+ log("Disconnecting: %.100s", buf);
+
/* Send the disconnect message to the other side, and wait for it to get sent. */
if (compat20) {
packet_start(SSH2_MSG_DISCONNECT);
/* Close the connection. */
packet_close();
- /* Display the error locally and exit. */
- log("Disconnecting: %.100s", buf);
fatal_cleanup();
}
packet_write_poll(void)
{
int len = buffer_len(&output);
+
if (len > 0) {
len = write(connection_out, buffer_ptr(&output), len);
if (len <= 0) {
packet_set_maxsize(int s)
{
static int called = 0;
+
if (called) {
log("packet_set_maxsize: called twice: old %d new %d",
max_packet_size, s);