From nobody Wed Aug 9 13:04:43 2023 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RLVdS0Kn9z4px5J; Wed, 9 Aug 2023 13:04:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RLVdR6K8Bz4Fd8; Wed, 9 Aug 2023 13:04:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691586283; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=K7A52e+AkZdA8W28t0BtlRMnCW/roai0ScSUGHeX1lc=; b=evKyp0xjOypriR36pDT+FqcdRql1LNVPHySowbWbimZdUqfYCS2Pjdpw9HyWAhuV57Y9Gj kaWx9kGlQ1UF5844cIdQP71jUFP6kjDaaI010elh3tZOsVfjGOz+M6Z5TZfEdUptmyOyle O2gMb94O4eL3cPxRCLIDmP2wUCB+gltCOhw8QU0zTVFVNj9V958DESn0gEurfQ7lDq/zyh fQpDhbsGFkHO4QNKHhIUFOhZXQCrnxq1x003tKm1tChBvtMYXgQikpjP8g7wHpDNflXRHC ruoOMeigOHPihENaNwDb6gbtk+nUnoiKo1tcdaRZT0RcSKF+L0QeOzuhnNNlIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691586283; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=K7A52e+AkZdA8W28t0BtlRMnCW/roai0ScSUGHeX1lc=; b=lnZR7Gxvpzg4iCXPKp+riyZH6L+XdeiHnIUmNXaEZe/26b/s6ig+l1QwbAC9xeTuvFjk8D ynMObf5gAYsGISSgAzDcJHeIFS+k+bDYahDg9E4XyL5yVEbxLb0+og20gMcms7kgyDLbfb Z7P+fNXQzEgQ9zeRW3RpAjnhtc44gwvDgkP7h9aXAhdfCZKO4k0StK3jkmoa2ej4mcBaic k1ko2Ev5lL0Yk5EEd++Xc7mhpQFfTf+X85/cqpxrnB6SVhp9jg9OjBkJt2YRt0UgDD1+x5 XFhtXJQFt7fnSwswci3KN9SKc5Fes+7z6lVw9grbM6bSsQi+pvvao+Wez0xwag== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1691586283; a=rsa-sha256; cv=none; b=DkShvSpVsppQETnEschZ0Tgm/RnGfYEuyPoYgfiXZ4slx78ibPb1hKawaJgOJvOSUhjbxt iJFd7qQU/jSSZw3JY+/3hwyCjTPTxOqJFAQ0vdwoc/Mvuyd/uOdYKh8u+y4iasPTHcSe8Y 7JlSOCZdXztv3JFdRvrwygv1CimmeaNz0ZjF25P/ZDR+YGEaztuhHFVr3hKT3BwgPEXL4P 8j2IyBEtSoNFnFn0BF5P3D6y/nIrcGgaPKY9lBJTfcp0asonfdsaSOW5jxyxP7LBZjFIMN rXMcxzdtwz3oFNRN4rFVbIBU1iQ/Wq7zNskYKk0f+df6Qy1OkdTUaAVSbbdo6A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RLVdR5NLmz2Xk; Wed, 9 Aug 2023 13:04:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 379D4hRU090438; Wed, 9 Aug 2023 13:04:43 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 379D4hEJ090435; Wed, 9 Aug 2023 13:04:43 GMT (envelope-from git) Date: Wed, 9 Aug 2023 13:04:43 GMT Message-Id: <202308091304.379D4hEJ090435@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Robert Clausecker Subject: git: b10e091f6f2d - main - security/knock: update to 0.8 List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fuz X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b10e091f6f2df5d65453e060d8e82a9a8d603e33 Auto-Submitted: auto-generated The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/ports/commit/?id=b10e091f6f2df5d65453e060d8e82a9a8d603e33 commit b10e091f6f2df5d65453e060d8e82a9a8d603e33 Author: Michelangelo De Simone AuthorDate: 2023-07-23 06:26:39 +0000 Commit: Robert Clausecker CommitDate: 2023-08-09 13:01:18 +0000 security/knock: update to 0.8 - chase to new home Changelog: https://github.com/jvinet/knock/blob/master/ChangeLog PR: 267232 Approved by: sbz (maintainer timeout) --- security/knock/Makefile | 8 +- security/knock/distinfo | 5 +- security/knock/files/patch-Makefile.in | 31 +- security/knock/files/patch-config.h.in | 89 ----- security/knock/files/patch-doc__knock.1.in | 15 - security/knock/files/patch-doc__knockd.1.in | 58 ---- security/knock/files/patch-knockd.conf | 7 +- security/knock/files/patch-src__knock.c | 132 ------- security/knock/files/patch-src__knockd.c | 520 ---------------------------- security/knock/files/patch-src_knock.c | 11 + security/knock/files/patch-src_knockd.c | 20 ++ 11 files changed, 52 insertions(+), 844 deletions(-) diff --git a/security/knock/Makefile b/security/knock/Makefile index 51999a0fc6f5..2d149ead0e9a 100644 --- a/security/knock/Makefile +++ b/security/knock/Makefile @@ -1,14 +1,12 @@ PORTNAME= knock -PORTVERSION= 0.5 -PORTREVISION= 1 -PORTEPOCH= 1 +DISTVERSION= 0.8 CATEGORIES= security -MASTER_SITES= http://www.zeroflux.org/proj/knock/files/ \ +MASTER_SITES= https://github.com/jvinet/${PORTNAME}/releases/download/v${DISTVERSION}/ \ LOCAL/sbz MAINTAINER= sbz@FreeBSD.org COMMENT= Flexible port-knocking server and client -WWW= http://www.zeroflux.org/projects/knock +WWW= https://github.com/jvinet/knock LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/COPYING diff --git a/security/knock/distinfo b/security/knock/distinfo index e311b633ed71..20ec53a120dc 100644 --- a/security/knock/distinfo +++ b/security/knock/distinfo @@ -1,2 +1,3 @@ -SHA256 (knock-0.5.tar.gz) = c4c141166a10c45b139e5e656d0c98bbb99567abb35163863fc1df1a025cde15 -SIZE (knock-0.5.tar.gz) = 83990 +TIMESTAMP = 1690093412 +SHA256 (knock-0.8.tar.gz) = 698d8c965624ea2ecb1e3df4524ed05afe387f6d20ded1e8a231209ad48169c7 +SIZE (knock-0.8.tar.gz) = 377107 diff --git a/security/knock/files/patch-Makefile.in b/security/knock/files/patch-Makefile.in index 0a36bf5117c9..259573be2bc1 100644 --- a/security/knock/files/patch-Makefile.in +++ b/security/knock/files/patch-Makefile.in @@ -1,20 +1,11 @@ ---- ./Makefile.in.orig 2005-06-27 07:11:34.000000000 +0200 -+++ ./Makefile.in 2011-08-17 13:19:00.000000000 +0200 -@@ -15,7 +15,7 @@ - # - # You should have received a copy of the GNU General Public License - # along with this program; if not, write to the Free Software --# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - # USA. - # - -@@ -48,7 +48,7 @@ - $(SRCDIR)knock.c \ - $(SRCDIR)list.c - --all: knockd knock man -+all: knockd knock - - knockd: $(OBJDIR)knockd.o $(OBJDIR)list.o - $(CXX) $(OBJDIR)knockd.o $(OBJDIR)list.o -o $@ $(LDFLAGS) -lpcap +--- Makefile.in.orig 2023-07-23 19:53:46 UTC ++++ Makefile.in +@@ -864,7 +864,7 @@ distcleancheck: distclean + exit 1; } >&2 + check-am: all-am + check: check-am +-all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) config.h ++all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA) config.h + installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ diff --git a/security/knock/files/patch-config.h.in b/security/knock/files/patch-config.h.in deleted file mode 100644 index 847da6a1cc65..000000000000 --- a/security/knock/files/patch-config.h.in +++ /dev/null @@ -1,89 +0,0 @@ ---- ./config.h.in.orig 2004-04-19 09:22:07.000000000 +0200 -+++ ./config.h.in 2011-08-17 13:19:00.000000000 +0200 -@@ -3,12 +3,24 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_ARPA_INET_H - -+/* Define to 1 if you have the `bzero' function. */ -+#undef HAVE_BZERO -+ - /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ - #undef HAVE_DOPRNT - -+/* Define to 1 if you have the header file. */ -+#undef HAVE_FCNTL_H -+ - /* Define to 1 if you have the `fork' function. */ - #undef HAVE_FORK - -+/* Define to 1 if you have the `gethostbyaddr' function. */ -+#undef HAVE_GETHOSTBYADDR -+ -+/* Define to 1 if you have the `gethostbyname' function. */ -+#undef HAVE_GETHOSTBYNAME -+ - /* Define to 1 if you have the `inet_ntoa' function. */ - #undef HAVE_INET_NTOA - -@@ -28,14 +40,21 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_MEMORY_H - -+/* Define to 1 if you have the `memset' function. */ -+#undef HAVE_MEMSET -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_NETDB_H - - /* Define to 1 if you have the header file. */ - #undef HAVE_NETINET_IN_H - --/* Define to 1 if you have the header file. */ --#undef HAVE_PCAP_H -+/* Define to 1 if your system has a GNU libc compatible `realloc' function, -+ and to 0 otherwise. */ -+#undef HAVE_REALLOC -+ -+/* Define to 1 if you have the `socket' function. */ -+#undef HAVE_SOCKET - - /* Define to 1 if you have the header file. */ - #undef HAVE_STDINT_H -@@ -43,12 +62,15 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_STDLIB_H - --/* Define to 1 if you have the `strcasecmp' function. */ --#undef HAVE_STRCASECMP -+/* Define to 1 if you have the `strchr' function. */ -+#undef HAVE_STRCHR - - /* Define to 1 if you have the `strdup' function. */ - #undef HAVE_STRDUP - -+/* Define to 1 if you have the `strerror' function. */ -+#undef HAVE_STRERROR -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_STRINGS_H - -@@ -61,6 +83,9 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_SYSLOG_H - -+/* Define to 1 if you have the header file. */ -+#undef HAVE_SYS_IOCTL_H -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_SOCKET_H - -@@ -124,6 +149,9 @@ - /* Define to `int' if does not define. */ - #undef pid_t - -+/* Define to rpl_realloc if the replacement function should be used. */ -+#undef realloc -+ - /* Define to `unsigned' if does not define. */ - #undef size_t - diff --git a/security/knock/files/patch-doc__knock.1.in b/security/knock/files/patch-doc__knock.1.in deleted file mode 100644 index aea05e8af562..000000000000 --- a/security/knock/files/patch-doc__knock.1.in +++ /dev/null @@ -1,15 +0,0 @@ ---- ./doc/knock.1.in.orig 2005-06-27 07:10:30.000000000 +0200 -+++ ./doc/knock.1.in 2011-08-17 13:28:24.000000000 +0200 -@@ -15,6 +15,12 @@ - If you want each port to use a different protocol (TCP or UDP), then you - can specify the protocol on a per-port basis. See the example below. - .TP -+.B "\-d , \-\-delay " -+Wait milliseconds between each port hit. This can be used in situations -+where a router mistakes your stream of SYN packets as a port scan and blocks -+them. If the packet rate is slowed with --delay, then the router should let -+the packets through. -+.TP - .B "\-v, \-\-verbose" - Output verbose status messages. - .TP diff --git a/security/knock/files/patch-doc__knockd.1.in b/security/knock/files/patch-doc__knockd.1.in deleted file mode 100644 index 09a23f5d0056..000000000000 --- a/security/knock/files/patch-doc__knockd.1.in +++ /dev/null @@ -1,58 +0,0 @@ ---- ./doc/knockd.1.in.orig 2005-06-29 20:45:17.000000000 +0200 -+++ ./doc/knockd.1.in 2011-08-17 13:29:55.000000000 +0200 -@@ -60,13 +60,13 @@ - sequence = 7000,8000,9000 - seq_timeout = 10 - tcpflags = syn -- command = /usr/sbin/iptables -A INPUT -s %IP% -j ACCEPT -+ command = /usr/sbin/iptables -A INPUT -s %IP% --dport 22 -j ACCEPT - - [closeSSH] - sequence = 9000,8000,7000 - seq_timeout = 10 - tcpflags = syn -- command = /usr/sbin/iptables -D INPUT -s %IP% -j ACCEPT -+ command = /usr/sbin/iptables -D INPUT -s %IP% --dport 22 -j ACCEPT - - .fi - .RE -@@ -115,7 +115,7 @@ - start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 25 -j ACCEPT - cmd_timeout = 5 - stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 25 -j ACCEPT -- -+ - .fi - .RE - .SH CONFIGURATION: GLOBAL DIRECTIVES -@@ -132,7 +132,7 @@ - .TP - .B "Interface = " - Network interface to listen on. Only its name has to be given, not the path to --the device (eg, "eth0" and not "/dev/eth0"). Default: eth0. -+the device (eg, "fxp0" and not "/dev/fxp0"). Default: fxp0. - .SH CONFIGURATION: KNOCK/EVENT DIRECTIVES - .TP - .B "Sequence = [:][,[:] ...]" -@@ -158,7 +158,7 @@ - \fBNote\fP: Do not edit the file while knockd is running! - .TP - .B "Seq_Timeout = " --Time to wait for a sequence to complete in seconds. If the time elapses -+Time to wait (in seconds) for a sequence to complete in seconds. If the time elapses - before the knock is complete, it is discarded. - .TP - .B "TCPFlags = fin|syn|rst|psh|ack|urg" -@@ -183,10 +183,10 @@ - directive is optional, only required if \fBStop_Command\fP is used. - .TP - .B "Stop_Command = " --Specify the command to be executed when \fBCmd_Timeout\fP seconds have passed -+Specify the command to be executed when \fBCmd_Timeout\fP seconds have passed - since \fBStart_Command\fP has been executed. All instances of \fB%IP%\fP will - be replaced with the knocker's IP address. This directive is optional. --.SH SECURITY NOTES -+.SH SECURITY NOTES - Using the \fB-l\fP or \fB--lookup\fP commandline option to resolve DNS names - for log entries may be a security risk! An attacker may find out the first port - of a sequence if he can monitor the DNS traffic of the host running knockd. diff --git a/security/knock/files/patch-knockd.conf b/security/knock/files/patch-knockd.conf index 1bd5062b1919..13a8dbef2676 100644 --- a/security/knock/files/patch-knockd.conf +++ b/security/knock/files/patch-knockd.conf @@ -1,6 +1,6 @@ ---- ./knockd.conf.orig 2004-05-07 00:56:03.000000000 +0200 -+++ ./knockd.conf 2011-08-17 13:19:00.000000000 +0200 -@@ -1,15 +1,16 @@ +--- knockd.conf.orig 2023-07-23 19:53:02 UTC ++++ knockd.conf +@@ -1,16 +1,17 @@ [options] logfile = /var/log/knockd.log + interface = fxp0 @@ -19,3 +19,4 @@ + command = /sbin/ipfw -q delete pass proto tcp src-ip %IP% dst-port 22 tcpflags = syn + [openHTTPS] diff --git a/security/knock/files/patch-src__knock.c b/security/knock/files/patch-src__knock.c deleted file mode 100644 index d69598407cdb..000000000000 --- a/security/knock/files/patch-src__knock.c +++ /dev/null @@ -1,132 +0,0 @@ ---- ./src/knock.c.orig 2005-06-27 07:11:34.000000000 +0200 -+++ ./src/knock.c 2011-08-17 13:21:28.000000000 +0200 -@@ -1,8 +1,8 @@ - /* - * knock.c -- * -+ * - * Copyright (c) 2004-2005 by Judd Vinet -- * -+ * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or -@@ -15,7 +15,7 @@ - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -@@ -23,16 +23,20 @@ - #include - #include - #include --#include - #include -+#include -+#if defined(__FreeBSD__) || defined(__APPLE__) -+#include -+#endif - #include - #include - #include -+#include - #include - #include - #include - --static char version[] = "0.5"; -+static char version[] = "#VERSION#"; - - #define PROTO_TCP 1 - #define PROTO_UDP 2 -@@ -44,6 +48,7 @@ - - int o_verbose = 0; - int o_udp = 0; -+int o_delay = 0; - - int main(int argc, char** argv) - { -@@ -55,12 +60,13 @@ - { - {"verbose", no_argument, 0, 'v'}, - {"udp", no_argument, 0, 'u'}, -+ {"delay", required_argument, 0, 'd'}, - {"help", no_argument, 0, 'h'}, - {"version", no_argument, 0, 'V'}, - {0, 0, 0, 0} - }; - -- while((opt = getopt_long(argc, argv, "vuhV", opts, &optidx))) { -+ while((opt = getopt_long(argc, argv, "vud:hV", opts, &optidx))) { - if(opt < 0) { - break; - } -@@ -68,6 +74,7 @@ - case 0: break; - case 'v': o_verbose = 1; break; - case 'u': o_udp = 1; break; -+ case 'd': o_delay = (int)atoi(optarg); break; - case 'V': ver(); - case 'h': /* fallthrough */ - default: usage(); -@@ -77,6 +84,11 @@ - usage(); - } - -+ if(o_delay < 0) { -+ fprintf(stderr, "error: delay cannot be negative\n"); -+ exit(1); -+ } -+ - host = gethostbyname(argv[optind++]); - if(host == NULL) { - fprintf(stderr, "Cannot resolve hostname\n"); -@@ -98,16 +110,16 @@ - } else { - port = atoi(arg); - } -- -+ - if(o_udp || proto == PROTO_UDP) { -- sd = socket(PF_INET, SOCK_DGRAM, 0); -+ sd = socket(PF_INET, SOCK_DGRAM, 0); - if(sd == -1) { - fprintf(stderr, "Cannot open socket\n"); - exit(1); - } - } else { - int flags; -- sd = socket(PF_INET, SOCK_STREAM, 0); -+ sd = socket(PF_INET, SOCK_STREAM, 0); - if(sd == -1) { - fprintf(stderr, "Cannot open socket\n"); - exit(1); -@@ -121,13 +133,13 @@ - addr.sin_port = htons(port); - if(o_udp || proto == PROTO_UDP) { - vprint("hitting udp %s:%u\n", inet_ntoa(addr.sin_addr), port); -- connect(sd, (struct sockaddr*)&addr, sizeof(struct sockaddr)); -- send(sd, NULL, 0, MSG_DONTWAIT); -+ sendto(sd, "", 1, 0, (struct sockaddr*)&addr, sizeof(addr)); - } else { - vprint("hitting tcp %s:%u\n", inet_ntoa(addr.sin_addr), port); - connect(sd, (struct sockaddr*)&addr, sizeof(struct sockaddr)); - } - close(sd); -+ usleep(1000*o_delay); - } - - return(0); -@@ -148,6 +160,7 @@ - printf("usage: knock [options] [port[:proto]] ...\n"); - printf("options:\n"); - printf(" -u, --udp make all ports hits use UDP (default is TCP)\n"); -+ printf(" -d, --delay wait milliseconds between port hits\n"); - printf(" -v, --verbose be verbose\n"); - printf(" -V, --version display version\n"); - printf(" -h, --help this help\n"); diff --git a/security/knock/files/patch-src__knockd.c b/security/knock/files/patch-src__knockd.c deleted file mode 100644 index 4325e6c745e0..000000000000 --- a/security/knock/files/patch-src__knockd.c +++ /dev/null @@ -1,520 +0,0 @@ ---- ./src/knockd.c.orig 2005-06-27 07:11:34.000000000 +0200 -+++ ./src/knockd.c 2011-08-17 13:24:16.000000000 +0200 -@@ -1,8 +1,8 @@ - /* - * knockd.c -- * -+ * - * Copyright (c) 2004-2005 by Judd Vinet -- * -+ * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or -@@ -15,7 +15,7 @@ - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software -- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -@@ -28,6 +28,11 @@ - #include - #include - #include -+#if defined(__FreeBSD__) || defined(__APPLE__) -+#include -+#include -+#include -+#endif - #include - #include - #include -@@ -35,8 +40,9 @@ - #include - #include - #include -+#if !defined(__FreeBSD__) && !defined(__APPLE__) - #include --#include -+#endif - #include - #include - #include -@@ -48,7 +54,7 @@ - #include - #include "list.h" - --static char version[] = "0.5"; -+static char version[] = "#VERSION#"; - - #define SEQ_TIMEOUT 25 /* default knock timeout in seconds */ - #define CMD_TIMEOUT 10 /* default timeout in seconds between start and stop commands */ -@@ -131,7 +137,7 @@ - int o_daemon = 0; - int o_lookup = 0; - char o_int[32] = ""; /* default (eth0) is set after parseconfig() */ --char o_cfg[PATH_MAX] = "/etc/knockd.conf"; -+char o_cfg[PATH_MAX] = "%%PREFIX%%/etc/knockd.conf"; - char o_pidfile[PATH_MAX] = "/var/run/knockd.pid"; - char o_logfile[PATH_MAX] = ""; - -@@ -193,7 +199,11 @@ - } - } - -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ cap = pcap_open_live(o_int, 65535, 0, 1, pcapErr); -+#else - cap = pcap_open_live(o_int, 65535, 0, 0, pcapErr); -+#endif - if(strlen(pcapErr)) { - fprintf(stderr, "could not open %s: %s\n", o_int, pcapErr); - } -@@ -212,7 +222,10 @@ - case DLT_RAW: - dprint("raw interface detected, no encapsulation\n"); - break; -- default: -+ case DLT_NULL: -+ dprint("tun interface detected. pppoe on freebsd\n"); -+ break; -+ default: - fprintf(stderr, "error: unsupported link-layer type: %d\n", lltype); - cleanup(1); - break; -@@ -301,9 +314,9 @@ - struct tm *tm; - t = time(NULL); - tm = localtime(&t); -- -- fprintf(logfd, "[%04d-%02d-%02d %02d:%02d] %s\n", tm->tm_year+1900, -- tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, msg); -+ -+ fprintf(logfd, "[%04d-%02d-%02d %02d:%02d:%02d] %s\n", tm->tm_year+1900, -+ tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, msg); - fflush(logfd); - } - } -@@ -420,7 +433,7 @@ - if(pch != str) { - memmove(str, pch, (strlen(pch) + 1)); - } -- -+ - pch = (char*)(str + (strlen(str) - 1)); - while(isspace(*pch)) { - pch--; -@@ -503,7 +516,7 @@ - dprint("config: usesyslog\n"); - } else { - fprintf(stderr, "config: line %d: syntax error\n", linenum); -- return(1); -+ return(1); - } - } else { - trim(ptr); -@@ -681,7 +694,7 @@ - return(1); - } - dprint_sequence(door, "new sequence for door %s: ", door->name); -- -+ - return(0); - } - -@@ -694,7 +707,7 @@ - { - char line[PATH_MAX+1]; - int pos; -- -+ - pos = ftell(door->one_time_sequences_fd); - while(fgets(line, PATH_MAX, door->one_time_sequences_fd)) { - trim(line); -@@ -746,7 +759,7 @@ - - rewind(door->one_time_sequences_fd); - pseudo_door.one_time_sequences_fd = door->one_time_sequences_fd; -- -+ - pos = get_next_one_time_sequence(&pseudo_door); - while(pos >= 0) { - if(door->seqcount == pseudo_door.seqcount) { -@@ -769,10 +782,10 @@ - void generate_pcap_filter() - { - /* NOTE: We're doing string manipulations in a daemon -- use defensive programming! */ -- -+ - PMList *lp; - opendoor_t *door; -- char *buffer = NULL; /* temporary buffer to create the individual filter strings */ -+ char *buffer = NULL; /* temporary buffer to create the individual filter strings */ - size_t bufsize = 0; /* size of buffer */ - char port_str[10]; /* used by snprintf to convert unsigned short --> string */ - short head_set = 0; /* flag indicating if protocol head is set (i.e. "((tcp dst port") */ -@@ -781,7 +794,7 @@ - unsigned int i; - short modified_filters = 0; /* flag indicating if at least one filter has changed --> recompile the filter */ - struct bpf_program bpf_prog; /* compiled BPF filter program */ -- -+ - /* generate subfilters for each door having a NULL pcap_filter_exp - * - * Example filter for one single door: -@@ -796,11 +809,11 @@ - - /* if we get here at least one door had a pcap_filter_exp == NULL */ - modified_filters = 1; -- -+ - head_set = 0; - tcp_present = 0; - udp_present = 0; -- -+ - /* allocate memory for buffer if needed. - * The first allocation will be 200 Bytes (should be large enough for common sequences). If there is - * not enough space, a call to realloc_strcat() will eventually increase its size. The buffer will be -@@ -913,7 +926,7 @@ - if(udp_present) { - bufsize = realloc_strcat(&buffer, ")", bufsize); /* close parentheses of UDP ports */ - } -- -+ - /* test if in any of the precedent calls to realloc_strcat() failed. We can do this safely here because - * realloc_strcat() returns 0 on failure and if a buffer size of 0 is passed to it, the function does - * nothing but returning 0 again. Because we never read buffer in the above code, it is secure to test -@@ -930,7 +943,7 @@ - perror("malloc"); - cleanup(1); - } -- strcpy(door->pcap_filter_exp, buffer); -+ strcpy(door->pcap_filter_exp, buffer); - - buffer[0] = '\0'; /* "clear" the buffer */ - } -@@ -941,7 +954,7 @@ - * Note that we don't check if a port is included in multiple doors, we simply concatenate the individual door - * filters and rely on pcap's optimization capabilities. - * -- * Example filter for two doors with sequences 8000:tcp,4000:udp,8001:tcp,4001:udp,8002:tcp (syn) and -+ * Example filter for two doors with sequences 8000:tcp,4000:udp,8001:tcp,4001:udp,8002:tcp (syn) and - * 1234:tcp,4567:tcp,8901:tcp (syn,ack) : - * dst host the.hosts.ip.address and ( - * ((tcp dst port 8000 or 8001 or 8002) and tcp[tcpflags] & tcp-syn != 0) or (udp dst port 4000 or 4001) -@@ -1005,7 +1018,7 @@ - - needed_size = strlen(*dest) + strlen(src) + 1; /* '+ 1' for '\0' */ - new_size = size; -- -+ - while(needed_size > new_size) { - new_size *= 2; - } -@@ -1018,7 +1031,7 @@ - - /* now dest is large enough to strcat() the src */ - strcat(*dest, src); -- -+ - return new_size; - } - -@@ -1059,7 +1072,11 @@ - } - buf[0] = '\0'; - -+#if defined(__FreeBSD__) || defined(__APPLE__) - s = socket(AF_INET, SOCK_DGRAM, 0); -+#else -+ s = socket(PF_PACKET, SOCK_DGRAM, 0); -+#endif - if(s < 0) { - return(NULL); - } -@@ -1161,12 +1178,17 @@ - void sniff(u_char* arg, const struct pcap_pkthdr* hdr, const u_char* packet) - { - /* packet structs */ -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ struct ether_header* eth = NULL; -+ struct ip* ip = NULL; -+#else - struct ethhdr* eth = NULL; - struct iphdr* ip = NULL; -+#endif - struct tcphdr* tcp = NULL; - struct udphdr* udp = NULL; - char proto[8]; -- /* TCP/IP data */ -+ /* TCP/IP data */ - struct in_addr inaddr; - unsigned short sport, dport; - char srcIP[16], dstIP[16]; -@@ -1179,23 +1201,46 @@ - knocker_t *attempt = NULL; - - if(lltype == DLT_EN10MB) { -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ eth = (struct ether_header*)packet; -+ if(ntohs(eth->ether_type) != ETHERTYPE_IP) { -+ return; -+ } -+ -+ ip = (struct ip*)(packet + sizeof(struct ether_header)); -+ } else if(lltype == DLT_LINUX_SLL) { -+ ip = (struct ip*)((u_char*)packet + 16); -+ } else if(lltype == DLT_RAW) { -+ ip = (struct ip*)((u_char*)packet); -+ } else if(lltype == DLT_NULL) { -+ ip = (struct ip*)((u_char*)packet + 4); -+ } -+ -+ if(ip->ip_v != 4) { -+#else - eth = (struct ethhdr*)packet; - if(ntohs(eth->h_proto) != ETH_P_IP) { - return; - } -+ - ip = (struct iphdr*)(packet + sizeof(struct ethhdr)); - } else if(lltype == DLT_LINUX_SLL) { - ip = (struct iphdr*)((u_char*)packet + 16); - } else if(lltype == DLT_RAW) { - ip = (struct iphdr*)((u_char*)packet); - } -- -+ - if(ip->version != 4) { -+#endif - /* no IPv6 yet */ - dprint("packet is not IPv4, ignoring...\n"); - return; - } -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ if(ip->ip_p == IPPROTO_ICMP) { -+#else - if(ip->protocol == IPPROTO_ICMP) { -+#endif - /* we don't do ICMP */ - return; - } -@@ -1207,12 +1252,30 @@ - fprintf(stderr, "error: could not understand IP address: %s\n", myip); - return; - } -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ if(ip->ip_dst.s_addr != inaddr.s_addr) { -+#else - if(ip->daddr != inaddr.s_addr) { -+#endif - dprint("packet destined for another host, ignoring...\n"); - return; - } -- -+ - sport = dport = 0; -+ -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ if(ip->ip_p == IPPROTO_TCP) { -+ strncpy(proto, "tcp", sizeof(proto)); -+ tcp = (struct tcphdr*)((u_char*)ip + (ip->ip_hl *4)); -+ sport = ntohs(tcp->th_sport); -+ dport = ntohs(tcp->th_dport); -+ } -+ if(ip->ip_p == IPPROTO_UDP) { -+ strncpy(proto, "udp", sizeof(proto)); -+ udp = (struct udphdr*)((u_char*)ip + (ip->ip_hl * 4)); -+ sport = ntohs(udp->uh_sport); -+ dport = ntohs(udp->uh_dport); -+#else - if(ip->protocol == IPPROTO_TCP) { - strncpy(proto, "tcp", sizeof(proto)); - tcp = (struct tcphdr*)((u_char*)ip + (ip->ihl * 4)); -@@ -1224,6 +1287,7 @@ - udp = (struct udphdr*)((u_char*)ip + (ip->ihl * 4)); - sport = ntohs(udp->source); - dport = ntohs(udp->dest); -+#endif - } - - /* get the date/time */ -@@ -1234,10 +1298,17 @@ - pkt_tm->tm_sec); - - /* convert IPs from binary to string */ -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ inaddr.s_addr = ip->ip_src.s_addr; -+ strncpy(srcIP, inet_ntoa(inaddr), sizeof(srcIP)-1); -+ srcIP[sizeof(srcIP)-1] = '\0'; -+ inaddr.s_addr = ip->ip_dst.s_addr; -+#else - inaddr.s_addr = ip->saddr; - strncpy(srcIP, inet_ntoa(inaddr), sizeof(srcIP)-1); - srcIP[sizeof(srcIP)-1] = '\0'; - inaddr.s_addr = ip->daddr; -+#endif - strncpy(dstIP, inet_ntoa(inaddr), sizeof(dstIP)-1); - dstIP[sizeof(dstIP)-1] = '\0'; - -@@ -1297,6 +1368,73 @@ - /* if tcp, check the flags to ignore the packets we don't want - * (don't even use it to cancel sequences) - */ -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ if(ip->ip_p == IPPROTO_TCP) { -+ if(attempt->door->flag_fin != DONT_CARE) { -+ if(attempt->door->flag_fin == SET && !(tcp->th_flags & TH_FIN)) { -+ dprint("packet is not FIN, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_fin == NOT_SET && (tcp->th_flags & TH_FIN)) { -+ dprint("packet is not !FIN, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ if(attempt->door->flag_syn != DONT_CARE) { -+ if(attempt->door->flag_syn == SET && !(tcp->th_flags & TH_SYN)) { -+ dprint("packet is not SYN, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_syn == NOT_SET && (tcp->th_flags & TH_SYN)) { -+ dprint("packet is not !SYN, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ if(attempt->door->flag_rst != DONT_CARE) { -+ if(attempt->door->flag_rst == SET && !(tcp->th_flags & TH_RST)) { -+ dprint("packet is not RST, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_rst == NOT_SET && (tcp->th_flags & TH_RST)) { -+ dprint("packet is not !RST, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ if(attempt->door->flag_psh != DONT_CARE) { -+ if(attempt->door->flag_psh == SET && !(tcp->th_flags & TH_PUSH)) { -+ dprint("packet is not PSH, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_psh == NOT_SET && (tcp->th_flags & TH_PUSH)) { -+ dprint("packet is not !PSH, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ if(attempt->door->flag_ack != DONT_CARE) { -+ if(attempt->door->flag_ack == SET && !(tcp->th_flags & TH_ACK)) { -+ dprint("packet is not ACK, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_ack == NOT_SET && !(tcp->th_flags & TH_ACK)) { -+ dprint("packet is not !ACK, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ if(attempt->door->flag_urg != DONT_CARE) { -+ if(attempt->door->flag_urg == SET && !(tcp->th_flags & TH_URG)) { -+ dprint("packet is not URG, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ if(attempt->door->flag_urg == NOT_SET && !(tcp->th_flags & TH_URG)) { -+ dprint("packet is not !URG, ignoring...\n"); -+ flagsmatch = 0; -+ } -+ } -+ } -+ if(flagsmatch && ip->ip_p == attempt->door->protocol[attempt->stage] && -+ dport == attempt->door->sequence[attempt->stage]) { -+ -+#else - if(ip->protocol == IPPROTO_TCP) { - if(attempt->door->flag_fin != DONT_CARE) { - if(attempt->door->flag_fin == SET && tcp->fin != 1) { -@@ -1361,6 +1499,7 @@ - } - if(flagsmatch && ip->protocol == attempt->door->protocol[attempt->stage] && - dport == attempt->door->sequence[attempt->stage]) { -+#endif - /* level up! */ - attempt->stage++; - if(attempt->srchost) { -@@ -1387,7 +1526,7 @@ - size_t cmd_len = 0; - - setsid(); -- -+ - /* parse start and stop command and check if the parsed commands fit in the given buffer. Don't - * execute any command if one of them has been truncated */ - cmd_len = parse_cmd(parsed_start_cmd, sizeof(parsed_start_cmd), attempt->door->start_command, attempt->src); -@@ -1419,7 +1558,7 @@ - } - exec_cmd(parsed_stop_cmd, attempt->door->name); - } -- -+ - exit(0); /* exit child */ - } - } -@@ -1451,6 +1590,36 @@ - for(lp = doors; lp; lp = lp->next) { - opendoor_t *door = (opendoor_t*)lp->data; - /* if we're working with TCP, try to match the flags */ -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ if(ip->ip_p == IPPROTO_TCP){ -+ if(door->flag_fin != DONT_CARE) { -+ if(door->flag_fin == SET && !(tcp->th_flags & TH_FIN)) {dprint("packet is not FIN, ignoring...\n");continue;} -+ if(door->flag_fin == NOT_SET && (tcp->th_flags & TH_FIN)) {dprint("packet is not !FIN, ignoring...\n");continue;} -+ } -+ if(door->flag_syn != DONT_CARE) { -+ if(door->flag_syn == SET && !(tcp->th_flags & TH_SYN)) {dprint("packet is not SYN, ignoring...\n");continue;} -+ if(door->flag_syn == NOT_SET && (tcp->th_flags & TH_SYN)) {dprint("packet is not !SYN, ignoring...\n");continue;} -+ } -+ if(door->flag_rst != DONT_CARE) { -+ if(door->flag_rst == SET && !(tcp->th_flags & TH_RST)) {dprint("packet is not RST, ignoring...\n");continue;} -+ if(door->flag_rst == NOT_SET && (tcp->th_flags & TH_RST)) {dprint("packet is not !RST, ignoring...\n");continue;} -+ } -+ if(door->flag_psh != DONT_CARE) { -+ if(door->flag_psh == SET && !(tcp->th_flags & TH_PUSH)) {dprint("packet is not PSH, ignoring...\n");continue;} -+ if(door->flag_psh == NOT_SET && (tcp->th_flags & TH_PUSH)) {dprint("packet is not !PSH, ignoring...\n");continue;} -+ } -+ if(door->flag_ack != DONT_CARE) { -+ if(door->flag_ack == SET && !(tcp->th_flags & TH_ACK)) {dprint("packet is not ACK, ignoring...\n");continue;} -+ if(door->flag_ack == NOT_SET && (tcp->th_flags & TH_ACK)) {dprint("packet is not !ACK, ignoring...\n");continue;} -+ } -+ if(door->flag_urg != DONT_CARE) { -+ if(door->flag_urg == SET && !(tcp->th_flags & TH_URG)) {dprint("packet is not URG, ignoring...\n");continue;} -+ if(door->flag_urg == NOT_SET && (tcp->th_flags & TH_URG)) {dprint("packet is not !URG, ignoring...\n");continue;} -+ } -+ } -+ -+ if(ip->ip_p == door->protocol[0] && dport == door->sequence[0]) { -+#else - if(ip->protocol == IPPROTO_TCP){ - if(door->flag_fin != DONT_CARE) { - if(door->flag_fin == SET && tcp->fin != 1) {dprint("packet is not FIN, ignoring...\n");continue;} -@@ -1479,6 +1648,7 @@ - } - - if(ip->protocol == door->protocol[0] && dport == door->sequence[0]) { -+#endif - struct hostent *he; - /* create a new entry */ - attempt = (knocker_t*)malloc(sizeof(knocker_t)); -@@ -1490,7 +1660,11 @@ - strcpy(attempt->src, srcIP); - /* try a reverse lookup if enabled */ - if (o_lookup) { -+#if defined(__FreeBSD__) || defined(__APPLE__) -+ inaddr.s_addr = ip->ip_src.s_addr; -+#else - inaddr.s_addr = ip->saddr; -+#endif - he = gethostbyaddr((void *)&inaddr, sizeof(inaddr), AF_INET); - if(he) { - attempt->srchost = strdup(he->h_name); diff --git a/security/knock/files/patch-src_knock.c b/security/knock/files/patch-src_knock.c new file mode 100644 index 000000000000..f1550fac945f --- /dev/null +++ b/security/knock/files/patch-src_knock.c @@ -0,0 +1,11 @@ +--- src/knock.c.orig 2023-07-23 20:01:56 UTC ++++ src/knock.c +@@ -35,7 +35,7 @@ + #include + #include + +-static char version[] = "0.8"; ++static char version[] = "#VERSION#"; + + #define PROTO_TCP 1 + #define PROTO_UDP 2 diff --git a/security/knock/files/patch-src_knockd.c b/security/knock/files/patch-src_knockd.c new file mode 100644 index 000000000000..bce069c7ca1a --- /dev/null +++ b/security/knock/files/patch-src_knockd.c @@ -0,0 +1,20 @@ +--- src/knockd.c.orig 2021-04-24 16:54:37 UTC *** 19 LINES SKIPPED ***