Add DebianBanner server configuration option

Setting this to "no" causes sshd to omit the Debian revision from its
initial protocol handshake, for those scared by package-versioning.patch.

Bug-Debian: http://bugs.debian.org/562048
Forwarded: not-needed
Last-Update: 2021-11-05

Patch-Name: debian-banner.patch
This commit is contained in:
Kees Cook 2014-02-09 16:10:06 +00:00 коммит произвёл Colin Watson
Родитель af88ce7af9
Коммит 9221739b56
7 изменённых файлов: 22 добавлений и 5 удалений

5
kex.c
Просмотреть файл

@ -1230,7 +1230,7 @@ send_error(struct ssh *ssh, char *msg)
*/
int
kex_exchange_identification(struct ssh *ssh, int timeout_ms,
const char *version_addendum)
int debian_banner, const char *version_addendum)
{
int remote_major, remote_minor, mismatch, oerrno = 0;
size_t len, i, n;
@ -1248,7 +1248,8 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms,
if (version_addendum != NULL && *version_addendum == '\0')
version_addendum = NULL;
if ((r = sshbuf_putf(our_version, "SSH-%d.%d-%.100s%s%s\r\n",
PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_RELEASE,
PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2,
debian_banner ? SSH_RELEASE : SSH_RELEASE_MINIMUM,
version_addendum == NULL ? "" : " ",
version_addendum == NULL ? "" : version_addendum)) != 0) {
oerrno = errno;

2
kex.h
Просмотреть файл

@ -193,7 +193,7 @@ char *kex_names_cat(const char *, const char *);
int kex_assemble_names(char **, const char *, const char *);
int kex_gss_names_valid(const char *);
int kex_exchange_identification(struct ssh *, int, const char *);
int kex_exchange_identification(struct ssh *, int, int, const char *);
struct kex *kex_new(void);
int kex_ready(struct ssh *, char *[PROPOSAL_MAX]);

Просмотреть файл

@ -199,6 +199,7 @@ initialize_server_options(ServerOptions *options)
options->fingerprint_hash = -1;
options->disable_forwarding = -1;
options->expose_userauth_info = -1;
options->debian_banner = -1;
}
/* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */
@ -453,6 +454,8 @@ fill_default_server_options(ServerOptions *options)
options->expose_userauth_info = 0;
if (options->sk_provider == NULL)
options->sk_provider = xstrdup("internal");
if (options->debian_banner == -1)
options->debian_banner = 1;
assemble_algorithms(options);
@ -530,6 +533,7 @@ typedef enum {
sStreamLocalBindMask, sStreamLocalBindUnlink,
sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
sExposeAuthInfo, sRDomain, sPubkeyAuthOptions, sSecurityKeyProvider,
sDebianBanner,
sDeprecated, sIgnore, sUnsupported
} ServerOpCodes;
@ -700,6 +704,7 @@ static struct {
{ "rdomain", sRDomain, SSHCFG_ALL },
{ "casignaturealgorithms", sCASignatureAlgorithms, SSHCFG_ALL },
{ "securitykeyprovider", sSecurityKeyProvider, SSHCFG_GLOBAL },
{ "debianbanner", sDebianBanner, SSHCFG_GLOBAL },
{ NULL, sBadOption, 0 }
};
@ -2479,6 +2484,10 @@ process_server_config_line_depth(ServerOptions *options, char *line,
*charptr = xstrdup(arg);
break;
case sDebianBanner:
intptr = &options->debian_banner;
goto parse_flag;
case sDeprecated:
case sIgnore:
case sUnsupported:

Просмотреть файл

@ -232,6 +232,8 @@ typedef struct {
int expose_userauth_info;
u_int64_t timing_secret;
char *sk_provider;
int debian_banner;
} ServerOptions;
/* Information about the incoming connection as used by Match */

Просмотреть файл

@ -1560,7 +1560,7 @@ ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost,
lowercase(host);
/* Exchange protocol version identification strings with the server. */
if ((r = kex_exchange_identification(ssh, timeout_ms, NULL)) != 0)
if ((r = kex_exchange_identification(ssh, timeout_ms, 1, NULL)) != 0)
sshpkt_fatal(ssh, r, "banner exchange");
/* Put the connection into non-blocking mode. */

2
sshd.c
Просмотреть файл

@ -2228,7 +2228,7 @@ main(int ac, char **av)
if (!debug_flag)
alarm(options.login_grace_time);
if ((r = kex_exchange_identification(ssh, -1,
if ((r = kex_exchange_identification(ssh, -1, options.debian_banner,
options.version_addendum)) != 0)
sshpkt_fatal(ssh, r, "banner exchange");

Просмотреть файл

@ -546,6 +546,11 @@ or
.Cm no .
The default is
.Cm yes .
.It Cm DebianBanner
Specifies whether the distribution-specified extra version suffix is
included during initial protocol handshake.
The default is
.Cm yes .
.It Cm DenyGroups
This keyword can be followed by a list of group name patterns, separated
by spaces.