summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Steves <stevesk@cvs.openbsd.org>2001-11-30 20:39:29 +0000
committerKevin Steves <stevesk@cvs.openbsd.org>2001-11-30 20:39:29 +0000
commit66fa4425712d6ad2ac1bf5e9967c63c017aeca41 (patch)
treec54a31bb4672f2bd43036849fe5fd8abfa383531
parentdf7b7851409d1065df9f641cfa6003dc1001b71e (diff)
sscanf() length dependencies are clearer now; can also shrink proto
and data if desired, but i have not done that. ok markus@
-rw-r--r--usr.bin/ssh/ssh.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/usr.bin/ssh/ssh.c b/usr.bin/ssh/ssh.c
index 0934812cf3d..fce36e2665c 100644
--- a/usr.bin/ssh/ssh.c
+++ b/usr.bin/ssh/ssh.c
@@ -39,7 +39,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: ssh.c,v 1.149 2001/10/24 08:51:35 markus Exp $");
+RCSID("$OpenBSD: ssh.c,v 1.150 2001/11/30 20:39:28 stevesk Exp $");
#include <openssl/evp.h>
#include <openssl/err.h>
@@ -767,19 +767,23 @@ again:
}
static void
-x11_get_proto(char *proto, int proto_len, char *data, int data_len)
+x11_get_proto(char **_proto, char **_data)
{
char line[512];
+ static char proto[512], data[512];
FILE *f;
int got_data = 0, i;
+ *_proto = proto;
+ *_data = data;
+ proto[0] = data[0] = '\0';
if (options.xauth_location) {
/* Try to get Xauthority information for the display. */
snprintf(line, sizeof line, "%.100s list %.200s 2>" _PATH_DEVNULL,
options.xauth_location, getenv("DISPLAY"));
f = popen(line, "r");
if (f && fgets(line, sizeof(line), f) &&
- sscanf(line, "%*s %s %s", proto, data) == 2)
+ sscanf(line, "%*s %511s %511s", proto, data) == 2)
got_data = 1;
if (f)
pclose(f);
@@ -795,11 +799,11 @@ x11_get_proto(char *proto, int proto_len, char *data, int data_len)
if (!got_data) {
u_int32_t rand = 0;
- strlcpy(proto, "MIT-MAGIC-COOKIE-1", proto_len);
+ strlcpy(proto, "MIT-MAGIC-COOKIE-1", sizeof proto);
for (i = 0; i < 16; i++) {
if (i % 4 == 0)
rand = arc4random();
- snprintf(data + 2 * i, data_len - 2 * i, "%02x", rand & 0xff);
+ snprintf(data + 2 * i, sizeof data - 2 * i, "%02x", rand & 0xff);
rand >>= 8;
}
}
@@ -923,9 +927,9 @@ ssh_session(void)
}
/* Request X11 forwarding if enabled and DISPLAY is set. */
if (options.forward_x11 && getenv("DISPLAY") != NULL) {
- char proto[512], data[512];
+ char *proto, *data;
/* Get reasonable local authentication information. */
- x11_get_proto(proto, sizeof proto, data, sizeof data);
+ x11_get_proto(&proto, &data);
/* Request forwarding with authentication spoofing. */
debug("Requesting X11 forwarding with authentication spoofing.");
x11_request_forwarding_with_spoofing(0, proto, data);
@@ -1039,9 +1043,9 @@ ssh_session2_setup(int id, void *arg)
}
if (options.forward_x11 &&
getenv("DISPLAY") != NULL) {
- char proto[512], data[512];
+ char *proto, *data;
/* Get reasonable local authentication information. */
- x11_get_proto(proto, sizeof proto, data, sizeof data);
+ x11_get_proto(&proto, &data);
/* Request forwarding with authentication spoofing. */
debug("Requesting X11 forwarding with authentication spoofing.");
x11_request_forwarding_with_spoofing(id, proto, data);