This allows setting which TLS versions are usable by syslogd. Some
environments require that TLSv1.0 is disabled. Manual wording stolen from
ftp(1). any comments? ok?

Index: syslogd.8
===================================================================
RCS file: /cvs/src/usr.sbin/syslogd/syslogd.8,v
retrieving revision 1.60
diff -u -p -r1.60 syslogd.8
--- syslogd.8   27 Sep 2018 08:33:25 -0000      1.60
+++ syslogd.8   9 Oct 2021 20:27:37 -0000
@@ -51,6 +51,7 @@
 .Op Fl S Ar listen_address
 .Op Fl s Ar reporting_socket
 .Op Fl T Ar listen_address
+.Op Fl t Ar tls_protocols
 .Op Fl U Ar bind_address
 .Ek
 .Sh DESCRIPTION
@@ -155,6 +156,12 @@ There is no well-known port for syslog o
 must be specified using the
 .Ar host : Ns Ar port
 syntax.
+.It Fl t Ar tls_protocols
+Specify the TLS protocols that will be supported by
+.Nm
+(see
+.Xr tls_config_parse_protocols 3
+for details).
 .It Fl U Ar bind_address
 Create a UDP socket for receiving messages and bind it to the
 specified address.
Index: syslogd.c
===================================================================
RCS file: /cvs/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.270
diff -u -p -r1.270 syslogd.c
--- syslogd.c   19 Sep 2021 10:17:36 -0000      1.270
+++ syslogd.c   9 Oct 2021 20:27:37 -0000
@@ -373,6 +373,7 @@ main(int argc, char *argv[])
        char            **path_unix, *path_ctlsock;
        char            **bind_host, **bind_port, **listen_host, **listen_port;
        char            *tls_hostport, **tls_host, **tls_port;
+       uint32_t        tls_protocols = TLS_PROTOCOLS_ALL;
 
        /* block signal until handler is set up */
        sigemptyset(&sigmask);
@@ -392,7 +393,7 @@ main(int argc, char *argv[])
        nbind = nlisten = ntls = 0;
 
        while ((ch = getopt(argc, argv,
-           "46a:C:c:dFf:hK:k:m:nP:p:rS:s:T:U:uVZ")) != -1) {
+           "46a:C:c:dFf:hK:k:m:nP:p:rS:s:T:t:U:uVZ")) != -1) {
                switch (ch) {
                case '4':               /* disable IPv6 */
                        Family = PF_INET;
@@ -463,6 +464,11 @@ main(int argc, char *argv[])
                        address_alloc("listen", optarg, &listen_host,
                            &listen_port, &nlisten);
                        break;
+               case 't':               /* specify protocols for TLS */
+                       if (tls_config_parse_protocols(&tls_protocols, optarg)
+                           != 0)
+                               errx(1, "failed to parse TLS protocols");
+                       break;
                case 'U':               /* allow udp only from address */
                        address_alloc("bind", optarg, &bind_host, &bind_port,
                            &nbind);
@@ -645,7 +651,7 @@ main(int argc, char *argv[])
                        log_warnx("options -c and -k must be used together");
                }
                if (tls_config_set_protocols(client_config,
-                   TLS_PROTOCOLS_ALL) != 0)
+                   tls_protocols) != 0)
                        log_warnx("set client TLS protocols: %s",
                            tls_config_error(client_config));
                if (tls_config_set_ciphers(client_config, "all") != 0)
@@ -695,7 +701,7 @@ main(int argc, char *argv[])
                        tls_config_verify_client(server_config);
                }
                if (tls_config_set_protocols(server_config,
-                   TLS_PROTOCOLS_ALL) != 0)
+                   tls_protocols) != 0)
                        log_warnx("set server TLS protocols: %s",
                            tls_config_error(server_config));
                if (tls_config_set_ciphers(server_config, "compat") != 0)

Reply via email to