mirror of
https://github.com/opnsense/src.git
synced 2026-06-04 06:15:33 -04:00
Highlights from the release notes are reproduced below. Some security and bug fixes were previously merged into FreeBSD and have been elided. See the upstream release notes for full details (https://www.openssh.com/releasenotes.html). --- Future deprecation notice ========================= OpenSSH plans to remove support for the DSA signature algorithm in early 2025. Potentially-incompatible changes -------------------------------- * sshd(8): the server will now block client addresses that repeatedly fail authentication, repeatedly connect without ever completing authentication or that crash the server. See the discussion of PerSourcePenalties below for more information. Operators of servers that accept connections from many users, or servers that accept connections from addresses behind NAT or proxies may need to consider these settings. * sshd(8): the server has been split into a listener binary, sshd(8), and a per-session binary "sshd-session". This allows for a much smaller listener binary, as it no longer needs to support the SSH protocol. As part of this work, support for disabling privilege separation (which previously required code changes to disable) and disabling re-execution of sshd(8) has been removed. Further separation of sshd-session into additional, minimal binaries is planned for the future. * sshd(8): several log messages have changed. In particular, some log messages will be tagged with as originating from a process named "sshd-session" rather than "sshd". * ssh-keyscan(1): this tool previously emitted comment lines containing the hostname and SSH protocol banner to standard error. This release now emits them to standard output, but adds a new "-q" flag to silence them altogether. * sshd(8): (portable OpenSSH only) sshd will no longer use argv[0] as the PAM service name. A new "PAMServiceName" sshd_config(5) directive allows selecting the service name at runtime. This defaults to "sshd". bz2101 New features ------------ * sshd(8): sshd(8) will now penalise client addresses that, for various reasons, do not successfully complete authentication. This feature is controlled by a new sshd_config(5) PerSourcePenalties option and is on by default. * ssh(8): allow the HostkeyAlgorithms directive to disable the implicit fallback from certificate host key to plain host keys. Portability ----------- * sshd(8): expose SSH_AUTH_INFO_0 always to PAM auth modules unconditionally. The previous behaviour was to expose it only when particular authentication methods were in use. * ssh(1), ssh-agent(8): allow the presence of the WAYLAND_DISPLAY environment variable to enable SSH_ASKPASS, similarly to the X11 DISPLAY environment variable. GHPR479 --- Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D48914 (cherry picked from commit0fdf8fae8b) (cherry picked from commitb4bb480ae9) (cherry picked from commite95979047a) (cherry picked from commitdcb4ae528d) Approved by: re (accelerated MFC)
125 lines
6.4 KiB
C
125 lines
6.4 KiB
C
/* $OpenBSD: log.h,v 1.34 2024/06/27 22:36:44 djm Exp $ */
|
|
|
|
/*
|
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
|
* All rights reserved
|
|
*
|
|
* As far as I am concerned, the code I have written for this software
|
|
* can be used freely for any purpose. Any derived versions of this
|
|
* software must be clearly marked as such, and if the derived work is
|
|
* incompatible with the protocol description in the RFC file, it must be
|
|
* called by a name other than "ssh" or "Secure Shell".
|
|
*/
|
|
|
|
#ifndef SSH_LOG_H
|
|
#define SSH_LOG_H
|
|
|
|
#include <stdarg.h> /* va_list */
|
|
#include "ssherr.h" /* ssh_err() */
|
|
|
|
/* Supported syslog facilities and levels. */
|
|
typedef enum {
|
|
SYSLOG_FACILITY_DAEMON,
|
|
SYSLOG_FACILITY_USER,
|
|
SYSLOG_FACILITY_AUTH,
|
|
#ifdef LOG_AUTHPRIV
|
|
SYSLOG_FACILITY_AUTHPRIV,
|
|
#endif
|
|
SYSLOG_FACILITY_LOCAL0,
|
|
SYSLOG_FACILITY_LOCAL1,
|
|
SYSLOG_FACILITY_LOCAL2,
|
|
SYSLOG_FACILITY_LOCAL3,
|
|
SYSLOG_FACILITY_LOCAL4,
|
|
SYSLOG_FACILITY_LOCAL5,
|
|
SYSLOG_FACILITY_LOCAL6,
|
|
SYSLOG_FACILITY_LOCAL7,
|
|
SYSLOG_FACILITY_NOT_SET = -1
|
|
} SyslogFacility;
|
|
|
|
typedef enum {
|
|
SYSLOG_LEVEL_QUIET,
|
|
SYSLOG_LEVEL_FATAL,
|
|
SYSLOG_LEVEL_ERROR,
|
|
SYSLOG_LEVEL_INFO,
|
|
SYSLOG_LEVEL_VERBOSE,
|
|
SYSLOG_LEVEL_DEBUG1,
|
|
SYSLOG_LEVEL_DEBUG2,
|
|
SYSLOG_LEVEL_DEBUG3,
|
|
SYSLOG_LEVEL_NOT_SET = -1
|
|
} LogLevel;
|
|
|
|
typedef void (log_handler_fn)(LogLevel, int, const char *, void *);
|
|
|
|
void log_init(const char *, LogLevel, SyslogFacility, int);
|
|
LogLevel log_level_get(void);
|
|
int log_change_level(LogLevel);
|
|
int log_is_on_stderr(void);
|
|
void log_redirect_stderr_to(const char *);
|
|
void log_verbose_add(const char *);
|
|
void log_verbose_reset(void);
|
|
|
|
SyslogFacility log_facility_number(char *);
|
|
const char * log_facility_name(SyslogFacility);
|
|
LogLevel log_level_number(char *);
|
|
const char * log_level_name(LogLevel);
|
|
|
|
void set_log_handler(log_handler_fn *, void *);
|
|
void cleanup_exit(int) __attribute__((noreturn));
|
|
|
|
void sshlog(const char *, const char *, int, int,
|
|
LogLevel, const char *, const char *, ...)
|
|
__attribute__((format(printf, 7, 8)));
|
|
void sshlogv(const char *, const char *, int, int,
|
|
LogLevel, const char *, const char *, va_list);
|
|
void sshlogdie(const char *, const char *, int, int,
|
|
LogLevel, const char *, const char *, ...) __attribute__((noreturn))
|
|
__attribute__((format(printf, 7, 8)));
|
|
void sshfatal(const char *, const char *, int, int,
|
|
LogLevel, const char *, const char *, ...) __attribute__((noreturn))
|
|
__attribute__((format(printf, 7, 8)));
|
|
void sshlogdirect(LogLevel, int, const char *, ...)
|
|
__attribute__((format(printf, 3, 4)));
|
|
|
|
#define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__)
|
|
#define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__)
|
|
#define debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__)
|
|
#define debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, NULL, __VA_ARGS__)
|
|
#define verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, NULL, __VA_ARGS__)
|
|
#define logit(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, NULL, __VA_ARGS__)
|
|
#define error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__)
|
|
#define fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, NULL, __VA_ARGS__)
|
|
#define logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__)
|
|
|
|
/* Variants that prepend the caller's function */
|
|
#define do_log2_f(level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, NULL, __VA_ARGS__)
|
|
#define debug3_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__)
|
|
#define debug2_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__)
|
|
#define debug_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, NULL, __VA_ARGS__)
|
|
#define verbose_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, NULL, __VA_ARGS__)
|
|
#define logit_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, NULL, __VA_ARGS__)
|
|
#define error_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__)
|
|
#define fatal_f(...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, NULL, __VA_ARGS__)
|
|
#define logdie_f(...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__)
|
|
|
|
/* Variants that appends a ssh_err message */
|
|
#define do_log2_r(r, level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, ssh_err(r), __VA_ARGS__)
|
|
#define debug3_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, ssh_err(r), __VA_ARGS__)
|
|
#define debug2_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, ssh_err(r), __VA_ARGS__)
|
|
#define debug_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, ssh_err(r), __VA_ARGS__)
|
|
#define verbose_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, ssh_err(r), __VA_ARGS__)
|
|
#define logit_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, ssh_err(r), __VA_ARGS__)
|
|
#define error_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
|
|
#define fatal_r(r, ...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), __VA_ARGS__)
|
|
#define logdie_r(r, ...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
|
|
#define do_log2_fr(r, level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, ssh_err(r), __VA_ARGS__)
|
|
#define debug3_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, ssh_err(r), __VA_ARGS__)
|
|
#define debug2_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, ssh_err(r), __VA_ARGS__)
|
|
#define debug_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, ssh_err(r), __VA_ARGS__)
|
|
#define verbose_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, ssh_err(r), __VA_ARGS__)
|
|
#define logit_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, ssh_err(r), __VA_ARGS__)
|
|
#define error_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
|
|
#define fatal_fr(r, ...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, ssh_err(r), __VA_ARGS__)
|
|
#define logdie_fr(r, ...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
|
|
|
|
#endif
|