summaryrefslogtreecommitdiff
path: root/debian/patches/debian-banner.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/debian-banner.patch')
-rw-r--r--debian/patches/debian-banner.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/debian/patches/debian-banner.patch b/debian/patches/debian-banner.patch
new file mode 100644
index 000000000..acf995e27
--- /dev/null
+++ b/debian/patches/debian-banner.patch
@@ -0,0 +1,163 @@
1From 4eb06adf69f21f387e4f2d29dad01b2ca1303094 Mon Sep 17 00:00:00 2001
2From: Kees Cook <kees@debian.org>
3Date: Sun, 9 Feb 2014 16:10:06 +0000
4Subject: Add DebianBanner server configuration option
5
6Setting this to "no" causes sshd to omit the Debian revision from its
7initial protocol handshake, for those scared by package-versioning.patch.
8
9Bug-Debian: http://bugs.debian.org/562048
10Forwarded: not-needed
11Last-Update: 2019-06-05
12
13Patch-Name: debian-banner.patch
14---
15 kex.c | 5 +++--
16 kex.h | 2 +-
17 servconf.c | 9 +++++++++
18 servconf.h | 2 ++
19 sshconnect.c | 2 +-
20 sshd.c | 3 ++-
21 sshd_config.5 | 5 +++++
22 7 files changed, 23 insertions(+), 5 deletions(-)
23
24diff --git a/kex.c b/kex.c
25index 65ed6af02..f450bc2c7 100644
26--- a/kex.c
27+++ b/kex.c
28@@ -1221,7 +1221,7 @@ send_error(struct ssh *ssh, char *msg)
29 */
30 int
31 kex_exchange_identification(struct ssh *ssh, int timeout_ms,
32- const char *version_addendum)
33+ int debian_banner, const char *version_addendum)
34 {
35 int remote_major, remote_minor, mismatch;
36 size_t len, i, n;
37@@ -1239,7 +1239,8 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms,
38 if (version_addendum != NULL && *version_addendum == '\0')
39 version_addendum = NULL;
40 if ((r = sshbuf_putf(our_version, "SSH-%d.%d-%.100s%s%s\r\n",
41- PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_RELEASE,
42+ PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2,
43+ debian_banner ? SSH_RELEASE : SSH_RELEASE_MINIMUM,
44 version_addendum == NULL ? "" : " ",
45 version_addendum == NULL ? "" : version_addendum)) != 0) {
46 error("%s: sshbuf_putf: %s", __func__, ssh_err(r));
47diff --git a/kex.h b/kex.h
48index fe7141414..938dca03b 100644
49--- a/kex.h
50+++ b/kex.h
51@@ -194,7 +194,7 @@ char *kex_names_cat(const char *, const char *);
52 int kex_assemble_names(char **, const char *, const char *);
53 int kex_gss_names_valid(const char *);
54
55-int kex_exchange_identification(struct ssh *, int, const char *);
56+int kex_exchange_identification(struct ssh *, int, int, const char *);
57
58 struct kex *kex_new(void);
59 int kex_ready(struct ssh *, char *[PROPOSAL_MAX]);
60diff --git a/servconf.c b/servconf.c
61index 73b93c636..5576098a5 100644
62--- a/servconf.c
63+++ b/servconf.c
64@@ -184,6 +184,7 @@ initialize_server_options(ServerOptions *options)
65 options->fingerprint_hash = -1;
66 options->disable_forwarding = -1;
67 options->expose_userauth_info = -1;
68+ options->debian_banner = -1;
69 }
70
71 /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */
72@@ -437,6 +438,8 @@ fill_default_server_options(ServerOptions *options)
73 options->disable_forwarding = 0;
74 if (options->expose_userauth_info == -1)
75 options->expose_userauth_info = 0;
76+ if (options->debian_banner == -1)
77+ options->debian_banner = 1;
78
79 assemble_algorithms(options);
80
81@@ -523,6 +526,7 @@ typedef enum {
82 sStreamLocalBindMask, sStreamLocalBindUnlink,
83 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
84 sExposeAuthInfo, sRDomain,
85+ sDebianBanner,
86 sDeprecated, sIgnore, sUnsupported
87 } ServerOpCodes;
88
89@@ -682,6 +686,7 @@ static struct {
90 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL },
91 { "rdomain", sRDomain, SSHCFG_ALL },
92 { "casignaturealgorithms", sCASignatureAlgorithms, SSHCFG_ALL },
93+ { "debianbanner", sDebianBanner, SSHCFG_GLOBAL },
94 { NULL, sBadOption, 0 }
95 };
96
97@@ -2217,6 +2222,10 @@ process_server_config_line(ServerOptions *options, char *line,
98 *charptr = xstrdup(arg);
99 break;
100
101+ case sDebianBanner:
102+ intptr = &options->debian_banner;
103+ goto parse_flag;
104+
105 case sDeprecated:
106 case sIgnore:
107 case sUnsupported:
108diff --git a/servconf.h b/servconf.h
109index 29329ba1f..d5ad19065 100644
110--- a/servconf.h
111+++ b/servconf.h
112@@ -214,6 +214,8 @@ typedef struct {
113 int fingerprint_hash;
114 int expose_userauth_info;
115 u_int64_t timing_secret;
116+
117+ int debian_banner;
118 } ServerOptions;
119
120 /* Information about the incoming connection as used by Match */
121diff --git a/sshconnect.c b/sshconnect.c
122index 41e75a275..27daef74f 100644
123--- a/sshconnect.c
124+++ b/sshconnect.c
125@@ -1291,7 +1291,7 @@ ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost,
126 lowercase(host);
127
128 /* Exchange protocol version identification strings with the server. */
129- if (kex_exchange_identification(ssh, timeout_ms, NULL) != 0)
130+ if (kex_exchange_identification(ssh, timeout_ms, 1, NULL) != 0)
131 cleanup_exit(255); /* error already logged */
132
133 /* Put the connection into non-blocking mode. */
134diff --git a/sshd.c b/sshd.c
135index ea8beacb4..4e8ff0662 100644
136--- a/sshd.c
137+++ b/sshd.c
138@@ -2165,7 +2165,8 @@ main(int ac, char **av)
139 if (!debug_flag)
140 alarm(options.login_grace_time);
141
142- if (kex_exchange_identification(ssh, -1, options.version_addendum) != 0)
143+ if (kex_exchange_identification(ssh, -1, options.debian_banner,
144+ options.version_addendum) != 0)
145 cleanup_exit(255); /* error already logged */
146
147 ssh_packet_set_nonblocking(ssh);
148diff --git a/sshd_config.5 b/sshd_config.5
149index eec224158..46537f177 100644
150--- a/sshd_config.5
151+++ b/sshd_config.5
152@@ -545,6 +545,11 @@ or
153 .Cm no .
154 The default is
155 .Cm yes .
156+.It Cm DebianBanner
157+Specifies whether the distribution-specified extra version suffix is
158+included during initial protocol handshake.
159+The default is
160+.Cm yes .
161 .It Cm DenyGroups
162 This keyword can be followed by a list of group name patterns, separated
163 by spaces.