summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2016-07-17 04:20:16 +0000
committerDamien Miller <djm@mindrot.org>2016-07-17 14:21:38 +1000
commit65c6c6b567ab5ab12945a5ad8e0ab3a8c26119cc (patch)
treea26611a8f9877e4d5e0a1d55e4d96c3955f1c397
parente4eb7d910976fbfc7ce3e90c95c11b07b483d0d7 (diff)
upstream commit
support UTF-8 characters in ssh(1) banners using schwarze@'s safe fmprintf printer; bz#2058 feedback schwarze@ ok dtucker@ Upstream-ID: a72ce4e3644c957643c9524eea2959e41b91eea7
-rw-r--r--ssh.c5
-rw-r--r--sshconnect2.c21
2 files changed, 12 insertions, 14 deletions
diff --git a/ssh.c b/ssh.c
index 4e4ff610..03a23fb6 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh.c,v 1.444 2016/07/16 06:57:55 jmc Exp $ */
+/* $OpenBSD: ssh.c,v 1.445 2016/07/17 04:20:16 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -67,6 +67,7 @@
#include <string.h>
#include <unistd.h>
#include <limits.h>
+#include <locale.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -592,6 +593,8 @@ main(int ac, char **av)
*/
umask(022);
+ setlocale(LC_CTYPE, "");
+
/*
* Initialize option structure to indicate that no values have been
* set.
diff --git a/sshconnect2.c b/sshconnect2.c
index 3d3c7bf4..6742a318 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect2.c,v 1.245 2016/05/24 04:43:45 dtucker Exp $ */
+/* $OpenBSD: sshconnect2.c,v 1.246 2016/07/17 04:20:16 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Damien Miller. All rights reserved.
@@ -71,6 +71,7 @@
#include "uidswap.h"
#include "hostfile.h"
#include "ssherr.h"
+#include "utf8.h"
#ifdef GSSAPI
#include "ssh-gss.h"
@@ -495,21 +496,15 @@ input_userauth_error(int type, u_int32_t seq, void *ctxt)
int
input_userauth_banner(int type, u_int32_t seq, void *ctxt)
{
- char *msg, *raw, *lang;
+ char *msg, *lang;
u_int len;
- debug3("input_userauth_banner");
- raw = packet_get_string(&len);
+ debug3("%s", __func__);
+ msg = packet_get_string(&len);
lang = packet_get_string(NULL);
- if (len > 0 && options.log_level >= SYSLOG_LEVEL_INFO) {
- if (len > 65536)
- len = 65536;
- msg = xmalloc(len * 4 + 1); /* max expansion from strnvis() */
- strnvis(msg, raw, len * 4 + 1, VIS_SAFE|VIS_OCTAL|VIS_NOSLASH);
- fprintf(stderr, "%s", msg);
- free(msg);
- }
- free(raw);
+ if (len > 0 && options.log_level >= SYSLOG_LEVEL_INFO)
+ fmprintf(stderr, "%s", msg);
+ free(msg);
free(lang);
return 0;
}