[channels.c]
     do not accept unreasonable X ports numbers; ok djm
This commit is contained in:
Damien Miller 2006-03-31 23:11:07 +11:00
parent ddd63ab1d0
commit 57c4e875f8
2 changed files with 12 additions and 9 deletions

View File

@ -13,6 +13,9 @@
- deraadt@cvs.openbsd.org 2006/03/28 00:12:31 - deraadt@cvs.openbsd.org 2006/03/28 00:12:31
[README.tun ssh.c] [README.tun ssh.c]
spacing spacing
- deraadt@cvs.openbsd.org 2006/03/28 01:52:28
[channels.c]
do not accept unreasonable X ports numbers; ok djm
20060326 20060326
- OpenBSD CVS Sync - OpenBSD CVS Sync
@ -4462,4 +4465,4 @@
- (djm) Trim deprecated options from INSTALL. Mention UsePAM - (djm) Trim deprecated options from INSTALL. Mention UsePAM
- (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
$Id: ChangeLog,v 1.4291 2006/03/31 12:10:51 djm Exp $ $Id: ChangeLog,v 1.4292 2006/03/31 12:11:07 djm Exp $

View File

@ -1,4 +1,4 @@
/* $OpenBSD: channels.c,v 1.247 2006/03/25 18:58:10 deraadt Exp $ */ /* $OpenBSD: channels.c,v 1.248 2006/03/28 01:52:28 deraadt Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -2886,12 +2886,12 @@ connect_local_xsocket(u_int dnr)
int int
x11_connect_display(void) x11_connect_display(void)
{ {
int display_number, sock = 0; u_int display_number;
const char *display; const char *display;
char buf[1024], *cp; char buf[1024], *cp;
struct addrinfo hints, *ai, *aitop; struct addrinfo hints, *ai, *aitop;
char strport[NI_MAXSERV]; char strport[NI_MAXSERV];
int gaierr; int gaierr, sock = 0;
/* Try to open a socket for the local X server. */ /* Try to open a socket for the local X server. */
display = getenv("DISPLAY"); display = getenv("DISPLAY");
@ -2911,7 +2911,7 @@ x11_connect_display(void)
if (strncmp(display, "unix:", 5) == 0 || if (strncmp(display, "unix:", 5) == 0 ||
display[0] == ':') { display[0] == ':') {
/* Connect to the unix domain socket. */ /* Connect to the unix domain socket. */
if (sscanf(strrchr(display, ':') + 1, "%d", &display_number) != 1) { if (sscanf(strrchr(display, ':') + 1, "%u", &display_number) != 1) {
error("Could not parse display number from DISPLAY: %.100s", error("Could not parse display number from DISPLAY: %.100s",
display); display);
return -1; return -1;
@ -2936,7 +2936,7 @@ x11_connect_display(void)
} }
*cp = 0; *cp = 0;
/* buf now contains the host name. But first we parse the display number. */ /* buf now contains the host name. But first we parse the display number. */
if (sscanf(cp + 1, "%d", &display_number) != 1) { if (sscanf(cp + 1, "%u", &display_number) != 1) {
error("Could not parse display number from DISPLAY: %.100s", error("Could not parse display number from DISPLAY: %.100s",
display); display);
return -1; return -1;
@ -2946,7 +2946,7 @@ x11_connect_display(void)
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = IPv4or6; hints.ai_family = IPv4or6;
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
snprintf(strport, sizeof strport, "%d", 6000 + display_number); snprintf(strport, sizeof strport, "%u", 6000 + display_number);
if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) { if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) {
error("%.100s: unknown host. (%s)", buf, gai_strerror(gaierr)); error("%.100s: unknown host. (%s)", buf, gai_strerror(gaierr));
return -1; return -1;
@ -2960,7 +2960,7 @@ x11_connect_display(void)
} }
/* Connect it to the display. */ /* Connect it to the display. */
if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0) { if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
debug2("connect %.100s port %d: %.100s", buf, debug2("connect %.100s port %u: %.100s", buf,
6000 + display_number, strerror(errno)); 6000 + display_number, strerror(errno));
close(sock); close(sock);
continue; continue;
@ -2970,7 +2970,7 @@ x11_connect_display(void)
} }
freeaddrinfo(aitop); freeaddrinfo(aitop);
if (!ai) { if (!ai) {
error("connect %.100s port %d: %.100s", buf, 6000 + display_number, error("connect %.100s port %u: %.100s", buf, 6000 + display_number,
strerror(errno)); strerror(errno));
return -1; return -1;
} }