- markus@cvs.openbsd.org 2001/05/28 23:58:35
[packet.c packet.h sshconnect.c sshd.c] remove some lines, simplify.
This commit is contained in:
parent
4c247550ae
commit
80c6d77085
|
@ -72,6 +72,9 @@
|
|||
- markus@cvs.openbsd.org 2001/05/28 23:25:24
|
||||
[channels.c]
|
||||
cleanup, typo
|
||||
- markus@cvs.openbsd.org 2001/05/28 23:58:35
|
||||
[packet.c packet.h sshconnect.c sshd.c]
|
||||
remove some lines, simplify.
|
||||
|
||||
20010528
|
||||
- (tim) [conifgure.in] add setvbuf test needed for sftp-int.c
|
||||
|
@ -5502,4 +5505,4 @@
|
|||
- Wrote replacements for strlcpy and mkdtemp
|
||||
- Released 1.0pre1
|
||||
|
||||
$Id: ChangeLog,v 1.1244 2001/06/05 20:56:47 mouring Exp $
|
||||
$Id: ChangeLog,v 1.1245 2001/06/05 21:09:18 mouring Exp $
|
||||
|
|
205
packet.c
205
packet.c
|
@ -37,7 +37,7 @@
|
|||
*/
|
||||
|
||||
#include "includes.h"
|
||||
RCSID("$OpenBSD: packet.c,v 1.61 2001/04/05 10:42:51 markus Exp $");
|
||||
RCSID("$OpenBSD: packet.c,v 1.62 2001/05/28 23:58:35 markus Exp $");
|
||||
|
||||
#include "xmalloc.h"
|
||||
#include "buffer.h"
|
||||
|
@ -75,12 +75,6 @@ RCSID("$OpenBSD: packet.c,v 1.61 2001/04/05 10:42:51 markus Exp $");
|
|||
static int connection_in = -1;
|
||||
static int connection_out = -1;
|
||||
|
||||
/*
|
||||
* Cipher type. This value is only used to determine whether to pad the
|
||||
* packets with zeroes or random data.
|
||||
*/
|
||||
static int cipher_type = SSH_CIPHER_NONE;
|
||||
|
||||
/* Protocol flags for the remote side. */
|
||||
static u_int remote_protocol_flags = 0;
|
||||
|
||||
|
@ -118,20 +112,9 @@ static int initialized = 0;
|
|||
/* Set to true if the connection is interactive. */
|
||||
static int interactive_mode = 0;
|
||||
|
||||
/* True if SSH2 packet format is used */
|
||||
int use_ssh2_packet_format = 0;
|
||||
|
||||
/* Session key information for Encryption and MAC */
|
||||
Newkeys *newkeys[MODE_MAX];
|
||||
|
||||
void
|
||||
packet_set_ssh2_format(void)
|
||||
{
|
||||
DBG(debug("use_ssh2_packet_format"));
|
||||
use_ssh2_packet_format = 1;
|
||||
newkeys[MODE_IN] = newkeys[MODE_OUT] = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sets the descriptors used for communication. Disables encryption until
|
||||
* packet_set_encryption_key is called.
|
||||
|
@ -144,9 +127,9 @@ packet_set_connection(int fd_in, int fd_out)
|
|||
fatal("packet_set_connection: cannot load cipher 'none'");
|
||||
connection_in = fd_in;
|
||||
connection_out = fd_out;
|
||||
cipher_type = SSH_CIPHER_NONE;
|
||||
cipher_init(&send_context, none, (u_char *) "", 0, NULL, 0);
|
||||
cipher_init(&receive_context, none, (u_char *) "", 0, NULL, 0);
|
||||
newkeys[MODE_IN] = newkeys[MODE_OUT] = NULL;
|
||||
if (!initialized) {
|
||||
initialized = 1;
|
||||
buffer_init(&input);
|
||||
|
@ -290,7 +273,7 @@ packet_init_compression()
|
|||
void
|
||||
packet_start_compression(int level)
|
||||
{
|
||||
if (packet_compression && !use_ssh2_packet_format)
|
||||
if (packet_compression && !compat20)
|
||||
fatal("Compression already enabled.");
|
||||
packet_compression = 1;
|
||||
packet_init_compression();
|
||||
|
@ -298,44 +281,11 @@ packet_start_compression(int level)
|
|||
buffer_compress_init_recv();
|
||||
}
|
||||
|
||||
/*
|
||||
* Encrypts the given number of bytes, copying from src to dest. bytes is
|
||||
* known to be a multiple of 8.
|
||||
*/
|
||||
|
||||
void
|
||||
packet_encrypt(CipherContext * cc, void *dest, void *src,
|
||||
u_int bytes)
|
||||
{
|
||||
cipher_encrypt(cc, dest, src, bytes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Decrypts the given number of bytes, copying from src to dest. bytes is
|
||||
* known to be a multiple of 8.
|
||||
*/
|
||||
|
||||
void
|
||||
packet_decrypt(CipherContext *context, void *dest, void *src, u_int bytes)
|
||||
{
|
||||
/*
|
||||
* Cryptographic attack detector for ssh - Modifications for packet.c
|
||||
* (C)1998 CORE-SDI, Buenos Aires Argentina Ariel Futoransky(futo@core-sdi.com)
|
||||
*/
|
||||
if (!compat20 &&
|
||||
context->cipher->number != SSH_CIPHER_NONE &&
|
||||
detect_attack(src, bytes, NULL) == DEATTACK_DETECTED)
|
||||
packet_disconnect("crc32 compensation attack: network attack detected");
|
||||
|
||||
cipher_decrypt(context, dest, src, bytes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Causes any further packets to be encrypted using the given key. The same
|
||||
* key is used for both sending and reception. However, both directions are
|
||||
* encrypted independently of each other.
|
||||
*/
|
||||
|
||||
void
|
||||
packet_set_encryption_key(const u_char *key, u_int keylen,
|
||||
int number)
|
||||
|
@ -349,61 +299,33 @@ packet_set_encryption_key(const u_char *key, u_int keylen,
|
|||
cipher_init(&send_context, cipher, key, keylen, NULL, 0);
|
||||
}
|
||||
|
||||
/* Starts constructing a packet to send. */
|
||||
|
||||
/* Start constructing a packet to send. */
|
||||
void
|
||||
packet_start1(int type)
|
||||
packet_start(u_char type)
|
||||
{
|
||||
char buf[9];
|
||||
u_char buf[9];
|
||||
int len;
|
||||
|
||||
buffer_clear(&outgoing_packet);
|
||||
memset(buf, 0, 8);
|
||||
buf[8] = type;
|
||||
buffer_append(&outgoing_packet, buf, 9);
|
||||
}
|
||||
|
||||
void
|
||||
packet_start2(int type)
|
||||
{
|
||||
char buf[4+1+1];
|
||||
|
||||
buffer_clear(&outgoing_packet);
|
||||
memset(buf, 0, sizeof buf);
|
||||
/* buf[0..3] = payload_len; */
|
||||
/* buf[4] = pad_len; */
|
||||
buf[5] = type & 0xff;
|
||||
buffer_append(&outgoing_packet, buf, sizeof buf);
|
||||
}
|
||||
|
||||
void
|
||||
packet_start(int type)
|
||||
{
|
||||
DBG(debug("packet_start[%d]", type));
|
||||
if (use_ssh2_packet_format)
|
||||
packet_start2(type);
|
||||
else
|
||||
packet_start1(type);
|
||||
len = compat20 ? 6 : 9;
|
||||
memset(buf, 0, len - 1);
|
||||
buf[len - 1] = type;
|
||||
buffer_clear(&outgoing_packet);
|
||||
buffer_append(&outgoing_packet, buf, len);
|
||||
}
|
||||
|
||||
/* Appends a character to the packet data. */
|
||||
|
||||
/* Append payload. */
|
||||
void
|
||||
packet_put_char(int value)
|
||||
{
|
||||
char ch = value;
|
||||
buffer_append(&outgoing_packet, &ch, 1);
|
||||
}
|
||||
|
||||
/* Appends an integer to the packet data. */
|
||||
|
||||
void
|
||||
packet_put_int(u_int value)
|
||||
{
|
||||
buffer_put_int(&outgoing_packet, value);
|
||||
}
|
||||
|
||||
/* Appends a string to packet data. */
|
||||
|
||||
void
|
||||
packet_put_string(const char *buf, u_int len)
|
||||
{
|
||||
|
@ -414,16 +336,11 @@ packet_put_cstring(const char *str)
|
|||
{
|
||||
buffer_put_string(&outgoing_packet, str, strlen(str));
|
||||
}
|
||||
|
||||
void
|
||||
packet_put_raw(const char *buf, u_int len)
|
||||
{
|
||||
buffer_append(&outgoing_packet, buf, len);
|
||||
}
|
||||
|
||||
|
||||
/* Appends an arbitrary precision integer to packet data. */
|
||||
|
||||
void
|
||||
packet_put_bignum(BIGNUM * value)
|
||||
{
|
||||
|
@ -468,7 +385,7 @@ packet_send1(void)
|
|||
|
||||
/* Insert padding. Initialized to zero in packet_start1() */
|
||||
padding = 8 - len % 8;
|
||||
if (cipher_type != SSH_CIPHER_NONE) {
|
||||
if (send_context.cipher->number != SSH_CIPHER_NONE) {
|
||||
cp = buffer_ptr(&outgoing_packet);
|
||||
for (i = 0; i < padding; i++) {
|
||||
if (i % 4 == 0)
|
||||
|
@ -494,7 +411,7 @@ packet_send1(void)
|
|||
PUT_32BIT(buf, len);
|
||||
buffer_append(&output, buf, 4);
|
||||
buffer_append_space(&output, &cp, buffer_len(&outgoing_packet));
|
||||
packet_encrypt(&send_context, cp, buffer_ptr(&outgoing_packet),
|
||||
cipher_encrypt(&send_context, cp, buffer_ptr(&outgoing_packet),
|
||||
buffer_len(&outgoing_packet));
|
||||
|
||||
#ifdef PACKET_DEBUG
|
||||
|
@ -568,12 +485,11 @@ void
|
|||
packet_send2(void)
|
||||
{
|
||||
static u_int32_t seqnr = 0;
|
||||
u_char *macbuf = NULL;
|
||||
u_char type, *ucp, *macbuf = NULL;
|
||||
char *cp;
|
||||
u_int packet_length = 0;
|
||||
u_int i, padlen, len;
|
||||
u_int32_t rand = 0;
|
||||
int type;
|
||||
Enc *enc = NULL;
|
||||
Mac *mac = NULL;
|
||||
Comp *comp = NULL;
|
||||
|
@ -586,8 +502,8 @@ packet_send2(void)
|
|||
}
|
||||
block_size = enc ? enc->cipher->block_size : 8;
|
||||
|
||||
cp = buffer_ptr(&outgoing_packet);
|
||||
type = cp[5] & 0xff;
|
||||
ucp = (u_char *) buffer_ptr(&outgoing_packet);
|
||||
type = ucp[5];
|
||||
|
||||
#ifdef PACKET_DEBUG
|
||||
fprintf(stderr, "plain: ");
|
||||
|
@ -633,9 +549,9 @@ packet_send2(void)
|
|||
}
|
||||
/* packet_length includes payload, padding and padding length field */
|
||||
packet_length = buffer_len(&outgoing_packet) - 4;
|
||||
cp = buffer_ptr(&outgoing_packet);
|
||||
PUT_32BIT(cp, packet_length);
|
||||
cp[4] = padlen & 0xff;
|
||||
ucp = (u_char *)buffer_ptr(&outgoing_packet);
|
||||
PUT_32BIT(ucp, packet_length);
|
||||
ucp[4] = padlen;
|
||||
DBG(debug("send: len %d (includes padlen %d)", packet_length+4, padlen));
|
||||
|
||||
/* compute MAC over seqnr and packet(length fields, payload, padding) */
|
||||
|
@ -647,7 +563,7 @@ packet_send2(void)
|
|||
}
|
||||
/* encrypt packet and append to output buffer. */
|
||||
buffer_append_space(&output, &cp, buffer_len(&outgoing_packet));
|
||||
packet_encrypt(&send_context, cp, buffer_ptr(&outgoing_packet),
|
||||
cipher_encrypt(&send_context, cp, buffer_ptr(&outgoing_packet),
|
||||
buffer_len(&outgoing_packet));
|
||||
/* append unencrypted MAC */
|
||||
if (mac && mac->enabled)
|
||||
|
@ -668,7 +584,7 @@ packet_send2(void)
|
|||
void
|
||||
packet_send()
|
||||
{
|
||||
if (use_ssh2_packet_format)
|
||||
if (compat20)
|
||||
packet_send2();
|
||||
else
|
||||
packet_send1();
|
||||
|
@ -699,7 +615,7 @@ packet_read(int *payload_len_ptr)
|
|||
for (;;) {
|
||||
/* Try to read a packet from the buffer. */
|
||||
type = packet_read_poll(payload_len_ptr);
|
||||
if (!use_ssh2_packet_format && (
|
||||
if (!compat20 && (
|
||||
type == SSH_SMSG_SUCCESS
|
||||
|| type == SSH_SMSG_FAILURE
|
||||
|| type == SSH_CMSG_EOF
|
||||
|
@ -772,8 +688,8 @@ int
|
|||
packet_read_poll1(int *payload_len_ptr)
|
||||
{
|
||||
u_int len, padded_len;
|
||||
u_char *ucp;
|
||||
char buf[8], *cp;
|
||||
u_char *ucp, type;
|
||||
char *cp;
|
||||
u_int checksum, stored_checksum;
|
||||
|
||||
/* Check if input size is less than minimum packet size. */
|
||||
|
@ -795,10 +711,20 @@ packet_read_poll1(int *payload_len_ptr)
|
|||
/* Consume packet length. */
|
||||
buffer_consume(&input, 4);
|
||||
|
||||
/* Copy data to incoming_packet. */
|
||||
/*
|
||||
* Cryptographic attack detector for ssh
|
||||
* (C)1998 CORE-SDI, Buenos Aires Argentina
|
||||
* Ariel Futoransky(futo@core-sdi.com)
|
||||
*/
|
||||
if (receive_context.cipher->number != SSH_CIPHER_NONE &&
|
||||
detect_attack(buffer_ptr(&input), padded_len, NULL) == DEATTACK_DETECTED)
|
||||
packet_disconnect("crc32 compensation attack: network attack detected");
|
||||
|
||||
/* Decrypt data to incoming_packet. */
|
||||
buffer_clear(&incoming_packet);
|
||||
buffer_append_space(&incoming_packet, &cp, padded_len);
|
||||
packet_decrypt(&receive_context, cp, buffer_ptr(&input), padded_len);
|
||||
cipher_decrypt(&receive_context, cp, buffer_ptr(&input), padded_len);
|
||||
|
||||
buffer_consume(&input, padded_len);
|
||||
|
||||
#ifdef PACKET_DEBUG
|
||||
|
@ -814,7 +740,6 @@ packet_read_poll1(int *payload_len_ptr)
|
|||
buffer_consume(&incoming_packet, 8 - len % 8);
|
||||
|
||||
/* Test check bytes. */
|
||||
|
||||
if (len != buffer_len(&incoming_packet))
|
||||
packet_disconnect("packet_read_poll: len %d != buffer_len %d.",
|
||||
len, buffer_len(&incoming_packet));
|
||||
|
@ -825,7 +750,6 @@ packet_read_poll1(int *payload_len_ptr)
|
|||
packet_disconnect("Corrupted check bytes on input.");
|
||||
buffer_consume_end(&incoming_packet, 4);
|
||||
|
||||
/* If using packet compression, decompress the packet. */
|
||||
if (packet_compression) {
|
||||
buffer_clear(&compression_buffer);
|
||||
buffer_uncompress(&incoming_packet, &compression_buffer);
|
||||
|
@ -833,14 +757,9 @@ packet_read_poll1(int *payload_len_ptr)
|
|||
buffer_append(&incoming_packet, buffer_ptr(&compression_buffer),
|
||||
buffer_len(&compression_buffer));
|
||||
}
|
||||
/* Get packet type. */
|
||||
buffer_get(&incoming_packet, &buf[0], 1);
|
||||
|
||||
/* Return length of payload (without type field). */
|
||||
type = buffer_get_char(&incoming_packet);
|
||||
*payload_len_ptr = buffer_len(&incoming_packet);
|
||||
|
||||
/* Return type. */
|
||||
return (u_char) buf[0];
|
||||
return type;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -849,10 +768,8 @@ packet_read_poll2(int *payload_len_ptr)
|
|||
static u_int32_t seqnr = 0;
|
||||
static u_int packet_length = 0;
|
||||
u_int padlen, need;
|
||||
u_char buf[8], *macbuf;
|
||||
u_char *ucp;
|
||||
u_char *macbuf, *ucp, type;
|
||||
char *cp;
|
||||
int type;
|
||||
int maclen, block_size;
|
||||
Enc *enc = NULL;
|
||||
Mac *mac = NULL;
|
||||
|
@ -875,7 +792,7 @@ packet_read_poll2(int *payload_len_ptr)
|
|||
return SSH_MSG_NONE;
|
||||
buffer_clear(&incoming_packet);
|
||||
buffer_append_space(&incoming_packet, &cp, block_size);
|
||||
packet_decrypt(&receive_context, cp, buffer_ptr(&input),
|
||||
cipher_decrypt(&receive_context, cp, buffer_ptr(&input),
|
||||
block_size);
|
||||
ucp = (u_char *) buffer_ptr(&incoming_packet);
|
||||
packet_length = GET_32BIT(ucp);
|
||||
|
@ -904,7 +821,7 @@ packet_read_poll2(int *payload_len_ptr)
|
|||
buffer_dump(&input);
|
||||
#endif
|
||||
buffer_append_space(&incoming_packet, &cp, need);
|
||||
packet_decrypt(&receive_context, cp, buffer_ptr(&input), need);
|
||||
cipher_decrypt(&receive_context, cp, buffer_ptr(&input), need);
|
||||
buffer_consume(&input, need);
|
||||
/*
|
||||
* compute MAC over seqnr and packet,
|
||||
|
@ -924,7 +841,7 @@ packet_read_poll2(int *payload_len_ptr)
|
|||
|
||||
/* get padlen */
|
||||
cp = buffer_ptr(&incoming_packet) + 4;
|
||||
padlen = *cp & 0xff;
|
||||
padlen = (u_char) *cp;
|
||||
DBG(debug("input: padlen %d", padlen));
|
||||
if (padlen < 4)
|
||||
packet_disconnect("Corrupted padlen %d on input.", padlen);
|
||||
|
@ -946,37 +863,30 @@ packet_read_poll2(int *payload_len_ptr)
|
|||
* get packet type, implies consume.
|
||||
* return length of payload (without type field)
|
||||
*/
|
||||
buffer_get(&incoming_packet, (char *)&buf[0], 1);
|
||||
*payload_len_ptr = buffer_len(&incoming_packet);
|
||||
|
||||
/* reset for next packet */
|
||||
packet_length = 0;
|
||||
|
||||
/* extract packet type */
|
||||
type = (u_char)buf[0];
|
||||
|
||||
type = buffer_get_char(&incoming_packet);
|
||||
if (type == SSH2_MSG_NEWKEYS)
|
||||
set_newkeys(MODE_IN);
|
||||
|
||||
*payload_len_ptr = buffer_len(&incoming_packet);
|
||||
#ifdef PACKET_DEBUG
|
||||
fprintf(stderr, "read/plain[%d]:\r\n", type);
|
||||
buffer_dump(&incoming_packet);
|
||||
#endif
|
||||
return (u_char)type;
|
||||
/* reset for next packet */
|
||||
packet_length = 0;
|
||||
return type;
|
||||
}
|
||||
|
||||
int
|
||||
packet_read_poll(int *payload_len_ptr)
|
||||
{
|
||||
int reason;
|
||||
u_char type;
|
||||
char *msg;
|
||||
for (;;) {
|
||||
int type = use_ssh2_packet_format ?
|
||||
packet_read_poll2(payload_len_ptr):
|
||||
packet_read_poll1(payload_len_ptr);
|
||||
|
||||
if(compat20) {
|
||||
int reason;
|
||||
if (type != 0)
|
||||
for (;;) {
|
||||
if (compat20) {
|
||||
type = packet_read_poll2(payload_len_ptr);
|
||||
if (type)
|
||||
DBG(debug("received packet type %d", type));
|
||||
switch(type) {
|
||||
case SSH2_MSG_IGNORE:
|
||||
|
@ -1002,6 +912,7 @@ packet_read_poll(int *payload_len_ptr)
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
type = packet_read_poll1(payload_len_ptr);
|
||||
switch(type) {
|
||||
case SSH_MSG_IGNORE:
|
||||
break;
|
||||
|
@ -1018,7 +929,7 @@ packet_read_poll(int *payload_len_ptr)
|
|||
xfree(msg);
|
||||
break;
|
||||
default:
|
||||
if (type != 0)
|
||||
if (type)
|
||||
DBG(debug("received packet type %d", type));
|
||||
return type;
|
||||
break;
|
||||
|
@ -1345,7 +1256,7 @@ packet_inject_ignore(int sumlen)
|
|||
int blocksize, padlen, have, need, nb, mini, nbytes;
|
||||
Enc *enc = NULL;
|
||||
|
||||
if (use_ssh2_packet_format == 0)
|
||||
if (compat20 == 0)
|
||||
return;
|
||||
|
||||
have = buffer_len(&outgoing_packet);
|
||||
|
|
7
packet.h
7
packet.h
|
@ -11,7 +11,7 @@
|
|||
* called by a name other than "ssh" or "Secure Shell".
|
||||
*/
|
||||
|
||||
/* RCSID("$OpenBSD: packet.h,v 1.22 2001/04/14 16:33:20 stevesk Exp $"); */
|
||||
/* RCSID("$OpenBSD: packet.h,v 1.23 2001/05/28 23:58:35 markus Exp $"); */
|
||||
|
||||
#ifndef PACKET_H
|
||||
#define PACKET_H
|
||||
|
@ -71,7 +71,7 @@ void packet_set_interactive(int interactive);
|
|||
int packet_is_interactive(void);
|
||||
|
||||
/* Starts constructing a packet to send. */
|
||||
void packet_start(int type);
|
||||
void packet_start(u_char type);
|
||||
|
||||
/* Appends a character to the packet data. */
|
||||
void packet_put_char(int ch);
|
||||
|
@ -208,9 +208,6 @@ do { \
|
|||
int packet_connection_is_on_socket(void);
|
||||
int packet_connection_is_ipv4(void);
|
||||
|
||||
/* enable SSH2 packet format */
|
||||
void packet_set_ssh2_format(void);
|
||||
|
||||
/* returns remaining payload bytes */
|
||||
int packet_remaining(void);
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
*/
|
||||
|
||||
#include "includes.h"
|
||||
RCSID("$OpenBSD: sshconnect.c,v 1.105 2001/04/30 11:18:52 markus Exp $");
|
||||
RCSID("$OpenBSD: sshconnect.c,v 1.106 2001/05/28 23:58:35 markus Exp $");
|
||||
|
||||
#include <openssl/bn.h>
|
||||
|
||||
|
@ -430,8 +430,6 @@ ssh_exchange_identification(void)
|
|||
fatal("Protocol major versions differ: %d vs. %d",
|
||||
(options.protocol & SSH_PROTO_2) ? PROTOCOL_MAJOR_2 : PROTOCOL_MAJOR_1,
|
||||
remote_major);
|
||||
if (compat20)
|
||||
packet_set_ssh2_format();
|
||||
/* Send our own protocol version identification. */
|
||||
snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s\n",
|
||||
compat20 ? PROTOCOL_MAJOR_2 : PROTOCOL_MAJOR_1,
|
||||
|
|
4
sshd.c
4
sshd.c
|
@ -40,7 +40,7 @@
|
|||
*/
|
||||
|
||||
#include "includes.h"
|
||||
RCSID("$OpenBSD: sshd.c,v 1.197 2001/05/19 19:43:57 stevesk Exp $");
|
||||
RCSID("$OpenBSD: sshd.c,v 1.198 2001/05/28 23:58:35 markus Exp $");
|
||||
|
||||
#include <openssl/dh.h>
|
||||
#include <openssl/bn.h>
|
||||
|
@ -435,8 +435,6 @@ sshd_exchange_identification(int sock_in, int sock_out)
|
|||
server_version_string, client_version_string);
|
||||
fatal_cleanup();
|
||||
}
|
||||
if (compat20)
|
||||
packet_set_ssh2_format();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue