[auth1.c auth-rsa.c channels.c clientloop.c packet.c packet.h serverloop.c session.c ssh.c sshconnect1.c sshd.c ttymodes.c]
get rid of packet_integrity_check, use packet_done() instead.
- markus@cvs.openbsd.org 2001/12/27 19:54:53
[auth1.c auth.h auth-rh-rsa.c]
auth_rhosts_rsa now accept generic keys.
+ - markus@cvs.openbsd.org 2001/12/27 20:39:58
+ [auth1.c auth-rsa.c channels.c clientloop.c packet.c packet.h]
+ [serverloop.c session.c ssh.c sshconnect1.c sshd.c ttymodes.c]
+ get rid of packet_integrity_check, use packet_done() instead.
20020121
- (djm) Rework ssh-rand-helper:
*/
#include "includes.h"
-RCSID("$OpenBSD: auth-rsa.c,v 1.48 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: auth-rsa.c,v 1.49 2001/12/28 12:14:27 markus Exp $");
#include <openssl/rsa.h>
#include <openssl/md5.h>
packet_read_expect(&plen, SSH_CMSG_AUTH_RSA_RESPONSE);
for (i = 0; i < 16; i++)
response[i] = packet_get_char();
- packet_done();
+ packet_check_eom();
/* The response is MD5 of decrypted challenge plus session id. */
len = BN_num_bytes(challenge);
*/
#include "includes.h"
-RCSID("$OpenBSD: auth1.c,v 1.31 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: auth1.c,v 1.32 2001/12/28 12:14:27 markus Exp $");
#include "xmalloc.h"
#include "rsa.h"
verbose("Kerberos authentication disabled.");
} else {
char *kdata = packet_get_string(&dlen);
- packet_done();
+ packet_check_eom();
if (kdata[0] == 4) { /* KRB_PROT_VERSION */
#ifdef KRB4
* IP-spoofing on a local network.)
*/
client_user = packet_get_string(&ulen);
- packet_done();
+ packet_check_eom();
/* Try to authenticate using /etc/hosts.equiv and .rhosts. */
authenticated = auth_rhosts(pw, client_user);
verbose("Warning: keysize mismatch for client_host_key: "
"actual %d, announced %d",
BN_num_bits(client_host_key->rsa->n), bits);
- packet_done();
+ packet_check_eom();
authenticated = auth_rhosts_rsa(pw, client_user,
client_host_key);
if ((n = BN_new()) == NULL)
fatal("do_authloop: BN_new failed");
packet_get_bignum(n, &nlen);
- packet_done();
+ packet_check_eom();
authenticated = auth_rsa(pw, n);
BN_clear_free(n);
break;
* not visible to an outside observer.
*/
password = packet_get_string(&dlen);
- packet_done();
+ packet_check_eom();
#ifdef USE_PAM
/* Do PAM auth with password */
if (options.challenge_response_authentication == 1) {
char *response = packet_get_string(&dlen);
debug("got response '%s'", response);
- packet_done();
+ packet_check_eom();
authenticated = verify_response(authctxt, response);
memset(response, 'r', dlen);
xfree(response);
/* Get the user name. */
user = packet_get_string(&ulen);
- packet_done();
+ packet_check_eom();
if ((style = strchr(user, ':')) != NULL)
*style++ = '\0';
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "includes.h"
-RCSID("$OpenBSD: auth2-chall.c,v 1.11 2001/12/20 22:50:24 djm Exp $");
+RCSID("$OpenBSD: auth2-chall.c,v 1.12 2001/12/28 12:14:27 markus Exp $");
#include "ssh2.h"
#include "auth.h"
for (i = 0; i < nresp; i++)
response[i] = packet_get_string(NULL);
}
- packet_done();
+ packet_check_eom();
if (authctxt->valid) {
res = kbdintctxt->device->respond(kbdintctxt->ctxt,
*/
#include "includes.h"
-RCSID("$OpenBSD: auth2.c,v 1.78 2001/12/20 22:50:24 djm Exp $");
+RCSID("$OpenBSD: auth2.c,v 1.79 2001/12/28 12:14:27 markus Exp $");
#include <openssl/evp.h>
u_int len;
int accept = 0;
char *service = packet_get_string(&len);
- packet_done();
+ packet_check_eom();
if (authctxt == NULL)
fatal("input_service_request: no authctxt");
Authmethod *m = authmethod_lookup("none");
if (m != NULL)
m->enabled = NULL;
- packet_done();
+ packet_check_eom();
userauth_banner();
if (authctxt->valid == 0)
if (change)
log("password change not supported");
password = packet_get_string(&len);
- packet_done();
+ packet_check_eom();
if (authctxt->valid &&
#ifdef HAVE_CYGWIN
check_nt_auth(1, authctxt->pw) &&
lang = packet_get_string(NULL);
devs = packet_get_string(NULL);
- packet_done();
+ packet_check_eom();
debug("keyboard-interactive devs %s", devs);
if (key != NULL) {
if (have_sig) {
sig = packet_get_string(&slen);
- packet_done();
+ packet_check_eom();
buffer_init(&b);
if (datafellows & SSH_OLD_SESSIONID) {
buffer_append(&b, session_id2, session_id2_len);
xfree(sig);
} else {
debug("test whether pkalg/pkblob are acceptable");
- packet_done();
+ packet_check_eom();
/* XXX fake reply and always send PK_OK ? */
/*
*/
#include "includes.h"
-RCSID("$OpenBSD: channels.c,v 1.151 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: channels.c,v 1.152 2001/12/28 12:14:27 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
}
c->local_window -= data_len;
}
- packet_done();
+ packet_check_eom();
buffer_append(&c->output, data, data_len);
xfree(data);
}
return;
}
data = packet_get_string(&data_len);
- packet_done();
+ packet_check_eom();
if (data_len > c->local_window) {
log("channel %d: rcvd too much extended_data %d, win %d",
c->self, data_len, c->local_window);
Channel *c;
id = packet_get_int();
- packet_done();
+ packet_check_eom();
c = channel_lookup(id);
if (c == NULL)
packet_disconnect("Received ieof for nonexistent channel %d.", id);
Channel *c;
id = packet_get_int();
- packet_done();
+ packet_check_eom();
c = channel_lookup(id);
if (c == NULL)
packet_disconnect("Received close for nonexistent channel %d.", id);
int id = packet_get_int();
Channel *c = channel_lookup(id);
- packet_done();
+ packet_check_eom();
if (c == NULL)
packet_disconnect("Received oclose for nonexistent channel %d.", id);
chan_rcvd_oclose(c);
int id = packet_get_int();
Channel *c = channel_lookup(id);
- packet_done();
+ packet_check_eom();
if (c == NULL)
packet_disconnect("Received close confirmation for "
"out-of-range channel %d.", id);
debug("channel %d: open confirm rwindow %d rmax %d", c->self,
c->remote_window, c->remote_maxpacket);
}
- packet_done();
+ packet_check_eom();
}
static char *
if (lang != NULL)
xfree(lang);
}
- packet_done();
+ packet_check_eom();
/* Free the channel. This will also close the socket. */
channel_free(c);
}
return;
}
adjust = packet_get_int();
- packet_done();
+ packet_check_eom();
debug2("channel %d: rcvd adjust %d", id, adjust);
c->remote_window += adjust;
}
} else {
originator_string = xstrdup("unknown (remote did not supply name)");
}
- packet_done();
+ packet_check_eom();
sock = channel_connect_to(host, host_port);
if (sock != -1) {
c = channel_new("connected socket",
} else {
remote_host = xstrdup("unknown (remote did not supply name)");
}
- packet_done();
+ packet_check_eom();
/* Obtain a connection to the real X display. */
sock = x11_connect_display();
/* Read the remote channel number from the message. */
remote_id = packet_get_int();
- packet_done();
+ packet_check_eom();
/*
* Get a connection to the local authentication agent (this may again
*/
#include "includes.h"
-RCSID("$OpenBSD: clientloop.c,v 1.92 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: clientloop.c,v 1.93 2001/12/28 12:14:27 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
{
u_int data_len;
char *data = packet_get_string(&data_len);
- packet_done();
+ packet_check_eom();
buffer_append(&stdout_buffer, data, data_len);
memset(data, 0, data_len);
xfree(data);
{
u_int data_len;
char *data = packet_get_string(&data_len);
- packet_done();
+ packet_check_eom();
buffer_append(&stderr_buffer, data, data_len);
memset(data, 0, data_len);
xfree(data);
client_input_exit_status(int type, int plen, u_int32_t seq, void *ctxt)
{
exit_status = packet_get_int();
- packet_done();
+ packet_check_eom();
/* Acknowledge the exit. */
packet_start(SSH_CMSG_EXIT_CONFIRMATION);
packet_send();
listen_port = packet_get_int();
originator_address = packet_get_string(NULL);
originator_port = packet_get_int();
- packet_done();
+ packet_check_eom();
debug("client_request_forwarded_tcpip: listen %s port %d, originator %s port %d",
listen_address, listen_port, originator_address, originator_port);
} else {
originator_port = packet_get_int();
}
- packet_done();
+ packet_check_eom();
/* XXX check permission */
debug("client_request_x11: request from %s %d", originator,
originator_port);
} else if (strcmp(rtype, "exit-status") == 0) {
success = 1;
exit_status = packet_get_int();
- packet_done();
+ packet_check_eom();
}
if (reply) {
packet_start(success ?
*/
#include "includes.h"
-RCSID("$OpenBSD: kex.c,v 1.38 2001/12/20 22:50:24 djm Exp $");
+RCSID("$OpenBSD: kex.c,v 1.39 2001/12/28 12:14:27 markus Exp $");
#include <openssl/crypto.h>
xfree(packet_get_string(NULL));
packet_get_char();
packet_get_int();
- packet_done();
+ packet_check_eom();
kex_kexinit_finish(kex);
}
*/
#include "includes.h"
-RCSID("$OpenBSD: kexdh.c,v 1.9 2001/12/27 19:37:22 markus Exp $");
+RCSID("$OpenBSD: kexdh.c,v 1.10 2001/12/28 12:14:27 markus Exp $");
#include <openssl/crypto.h>
#include <openssl/bn.h>
/* signed H */
signature = packet_get_string(&slen);
- packet_done();
+ packet_check_eom();
if (!dh_pub_is_valid(dh, dh_server_pub))
packet_disconnect("bad server public DH value");
*/
#include "includes.h"
-RCSID("$OpenBSD: kexgex.c,v 1.12 2001/12/27 19:37:23 markus Exp $");
+RCSID("$OpenBSD: kexgex.c,v 1.13 2001/12/28 12:14:27 markus Exp $");
#include <openssl/bn.h>
if ((g = BN_new()) == NULL)
fatal("BN_new");
packet_get_bignum2(g, &dlen);
- packet_done();
+ packet_check_eom();
if (BN_num_bits(p) < min || BN_num_bits(p) > max)
fatal("DH_GEX group out of range: %d !< %d !< %d",
/* signed H */
signature = packet_get_string(&slen);
- packet_done();
+ packet_check_eom();
if (!dh_pub_is_valid(dh, dh_server_pub))
packet_disconnect("bad server public DH value");
default:
fatal("protocol error during kex, no DH_GEX_REQUEST: %d", type);
}
- packet_done();
+ packet_check_eom();
if (max < min || nbits < min || max < nbits)
fatal("DH_GEX_REQUEST, bad parameters: %d !< %d !< %d",
*/
#include "includes.h"
-RCSID("$OpenBSD: packet.c,v 1.78 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: packet.c,v 1.79 2001/12/28 12:14:27 markus Exp $");
#include "xmalloc.h"
#include "buffer.h"
|| type == SSH_SMSG_FAILURE
|| type == SSH_CMSG_EOF
|| type == SSH_CMSG_EXIT_CONFIRMATION))
- packet_done();
+ packet_check_eom();
/* If we got a packet, return it. */
if (type != SSH_MSG_NONE) {
xfree(setp);
* called by a name other than "ssh" or "Secure Shell".
*/
-/* RCSID("$OpenBSD: packet.h,v 1.29 2001/12/27 20:39:58 markus Exp $"); */
+/* RCSID("$OpenBSD: packet.h,v 1.30 2001/12/28 12:14:27 markus Exp $"); */
#ifndef PACKET_H
#define PACKET_H
int packet_set_maxsize(int);
#define packet_get_maxsize() max_packet_size
-#define packet_done() \
+/* don't allow remaining bytes after the end of the message */
+#define packet_check_eom() \
do { \
int _len = packet_remaining(); \
if (_len > 0) { \
*/
#include "includes.h"
-RCSID("$OpenBSD: serverloop.c,v 1.90 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: serverloop.c,v 1.91 2001/12/28 12:14:27 markus Exp $");
#include "xmalloc.h"
#include "packet.h"
if (fdin == -1)
return;
data = packet_get_string(&data_len);
- packet_done();
+ packet_check_eom();
buffer_append(&stdin_buffer, data, data_len);
memset(data, 0, data_len);
xfree(data);
* drained.
*/
debug("EOF received for stdin.");
- packet_done();
+ packet_check_eom();
stdin_eof = 1;
}
int ypixel = packet_get_int();
debug("Window change received.");
- packet_done();
+ packet_check_eom();
if (fdin != -1)
pty_change_window_size(fdin, row, col, xpixel, ypixel);
}
target_port = packet_get_int();
originator = packet_get_string(NULL);
originator_port = packet_get_int();
- packet_done();
+ packet_check_eom();
debug("server_request_direct_tcpip: originator %s port %d, target %s port %d",
originator, originator_port, target, target_port);
Channel *c;
debug("input_session_request");
- packet_done();
+ packet_check_eom();
/*
* A server session has no fd to read or write until a
* CHANNEL_REQUEST for a shell is made, so we set the type to
*/
#include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.115 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.116 2001/12/28 12:14:27 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
switch (type) {
case SSH_CMSG_REQUEST_COMPRESSION:
compression_level = packet_get_int();
- packet_done();
+ packet_check_eom();
if (compression_level < 1 || compression_level > 9) {
packet_send_debug("Received illegal compression level %d.",
compression_level);
} else {
s->screen = 0;
}
- packet_done();
+ packet_check_eom();
success = session_setup_x11fwd(s);
if (!success) {
xfree(s->auth_proto);
verbose("Kerberos TGT passing disabled.");
} else {
char *kdata = packet_get_string(&dlen);
- packet_done();
+ packet_check_eom();
/* XXX - 0x41, see creds_to_radix version */
if (kdata[0] != 0x41) {
} else {
/* Accept AFS token. */
char *token = packet_get_string(&dlen);
- packet_done();
+ packet_check_eom();
if (auth_afs_token(s->authctxt, token))
success = 1;
} else {
do_exec(s, NULL);
}
- packet_done();
+ packet_check_eom();
session_close(s);
return;
s->row = packet_get_int();
s->xpixel = packet_get_int();
s->ypixel = packet_get_int();
- packet_done();
+ packet_check_eom();
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
return 1;
}
/* Set window size from the packet. */
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
- packet_done();
+ packet_check_eom();
session_proctitle(s);
return 1;
}
char *cmd, *subsys = packet_get_string(&len);
int i;
- packet_done();
+ packet_check_eom();
log("subsystem request for %s", subsys);
for (i = 0; i < options.num_subsystems; i++) {
s->auth_proto = packet_get_string(NULL);
s->auth_data = packet_get_string(NULL);
s->screen = packet_get_int();
- packet_done();
+ packet_check_eom();
success = session_setup_x11fwd(s);
if (!success) {
static int
session_shell_req(Session *s)
{
- packet_done();
+ packet_check_eom();
do_exec(s, NULL);
return 1;
}
{
u_int len;
char *command = packet_get_string(&len);
- packet_done();
+ packet_check_eom();
do_exec(s, command);
xfree(command);
return 1;
session_auth_agent_req(Session *s)
{
static int called = 0;
- packet_done();
+ packet_check_eom();
if (no_agent_forwarding_flag) {
debug("session_auth_agent_req: no_agent_forwarding_flag");
return 0;
*/
#include "includes.h"
-RCSID("$OpenBSD: ssh.c,v 1.154 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: ssh.c,v 1.155 2001/12/28 12:14:27 markus Exp $");
#include <openssl/evp.h>
#include <openssl/err.h>
/* Read response from the server. */
type = packet_read(&plen);
- packet_done();
+ packet_check_eom();
if (type != SSH_SMSG_SUCCESS)
log("Warning: Remote host denied authentication agent forwarding.");
}
len = buffer_len(&command);
if (len > 900)
len = 900;
- packet_done();
+ packet_check_eom();
if (type == SSH2_MSG_CHANNEL_FAILURE)
fatal("Request for subsystem '%.*s' failed on channel %d",
len, (u_char *)buffer_ptr(&command), id);
*/
#include "includes.h"
-RCSID("$OpenBSD: sshconnect1.c,v 1.44 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: sshconnect1.c,v 1.45 2001/12/28 12:14:27 markus Exp $");
#include <openssl/bn.h>
#include <openssl/evp.h>
type);
packet_get_bignum(challenge, &clen);
- packet_done();
+ packet_check_eom();
debug("Received RSA challenge from server.");
if ((challenge = BN_new()) == NULL)
fatal("try_rsa_authentication: BN_new failed");
packet_get_bignum(challenge, &clen);
- packet_done();
+ packet_check_eom();
debug("Received RSA challenge from server.");
if ((challenge = BN_new()) == NULL)
fatal("try_rhosts_rsa_authentication: BN_new failed");
packet_get_bignum(challenge, &clen);
- packet_done();
+ packet_check_eom();
debug("Received RSA challenge for host key from server.");
memcpy(auth.dat, reply, auth.length);
xfree(reply);
- packet_done();
+ packet_check_eom();
/*
* If his response isn't properly encrypted with the session
/* Get server's response. */
ap.data = packet_get_string((unsigned int *) &ap.length);
- packet_done();
+ packet_check_eom();
/* XXX je to dobre? */
problem = krb5_rd_rep(*context, *auth_context, &ap, &reply);
return 0;
}
challenge = packet_get_string(&clen);
- packet_done();
+ packet_check_eom();
snprintf(prompt, sizeof prompt, "%s%s", challenge,
strchr(challenge, '\n') ? "" : "\nResponse: ");
xfree(challenge);
supported_ciphers = packet_get_int();
supported_authentications = packet_get_int();
- packet_done();
+ packet_check_eom();
debug("Received server public key (%d bits) and host key (%d bits).",
BN_num_bits(server_key->rsa->n), BN_num_bits(host_key->rsa->n));
*/
#include "includes.h"
-RCSID("$OpenBSD: sshconnect2.c,v 1.89 2001/12/20 22:50:24 djm Exp $");
+RCSID("$OpenBSD: sshconnect2.c,v 1.90 2001/12/28 12:14:27 markus Exp $");
#include <openssl/bn.h>
#include <openssl/md5.h>
} else {
debug("buggy server: service_accept w/o service");
}
- packet_done();
+ packet_check_eom();
debug("got SSH2_MSG_SERVICE_ACCEPT");
if (options.preferred_authentications == NULL)
authlist = packet_get_string(NULL);
partial = packet_get_char();
- packet_done();
+ packet_check_eom();
if (partial != 0)
log("Authenticated with partial success.");
pkalg = packet_get_string(&alen);
pkblob = packet_get_string(&blen);
}
- packet_done();
+ packet_check_eom();
debug("input_userauth_pk_ok: pkalg %s blen %d lastkey %p hint %d",
pkalg, blen, authctxt->last_key, authctxt->last_key_hint);
xfree(response);
xfree(prompt);
}
- packet_done(); /* done with parsing incoming message. */
+ packet_check_eom(); /* done with parsing incoming message. */
packet_add_padding(64);
packet_send();
*/
#include "includes.h"
-RCSID("$OpenBSD: sshd.c,v 1.219 2001/12/27 20:39:58 markus Exp $");
+RCSID("$OpenBSD: sshd.c,v 1.220 2001/12/28 12:14:27 markus Exp $");
#include <openssl/dh.h>
#include <openssl/bn.h>
protocol_flags = packet_get_int();
packet_set_protocol_flags(protocol_flags);
- packet_done();
+ packet_check_eom();
/*
* Decrypt it using our private server key and private host key (key
*/
#include "includes.h"
-RCSID("$OpenBSD: ttymodes.c,v 1.15 2001/12/19 07:18:56 deraadt Exp $");
+RCSID("$OpenBSD: ttymodes.c,v 1.16 2001/12/27 20:39:58 markus Exp $");
#include "packet.h"
#include "log.h"
* more coming after the mode data.
*/
log("parse_tty_modes: unknown opcode %d", opcode);
- packet_integrity_check(0, 1, SSH_CMSG_REQUEST_PTY);
goto set;
}
} else {