git: 1b25faa3f9e7 - main - net/dante: restore read/send-side pipe system check during configure

From: Alexey Dokuchaev <danfe_at_FreeBSD.org>
Date: Mon, 05 Feb 2024 10:46:16 UTC
The branch main has been updated by danfe:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1b25faa3f9e7604f59613b5d52bd562148f63c04

commit 1b25faa3f9e7604f59613b5d52bd562148f63c04
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2024-02-05 10:44:44 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2024-02-05 10:44:44 +0000

    net/dante: restore read/send-side pipe system check during configure
    
    It was disabled (patched out) in July 2023 based on the pkg-fallout@
    emails, nearly seven months after the last regression which could be
    causing it had been fixed.  Evidently, the cluster was running buggy
    kernel for its port-building jails long enough to confuse people the
    problem was still somehow exhibiting itself.
    
    While here, assume maintainership, fix some DRY bugs in the Makefile,
    and install the manpages under $PREFIX/share/man per new world order.
    
    PR:     272755
    Fixes:  2b81a5f3f73c
---
 net/dante/Makefile                 |  31 +++--
 net/dante/files/patch-acinclude.m4 | 276 -------------------------------------
 net/dante/pkg-plist                |   8 +-
 3 files changed, 21 insertions(+), 294 deletions(-)

diff --git a/net/dante/Makefile b/net/dante/Makefile
index 0031bfd84ba0..458dbabda958 100644
--- a/net/dante/Makefile
+++ b/net/dante/Makefile
@@ -4,7 +4,7 @@ CATEGORIES=	net security
 MASTER_SITES=	http://www.inet.no/dante/files/ \
 		ftp://ftp.inet.no/pub/socks/
 
-MAINTAINER=	ports@FreeBSD.org
+MAINTAINER=	danfe@FreeBSD.org
 COMMENT=	Circuit-level firewall/proxy
 WWW=		https://www.inet.no/dante/
 
@@ -16,8 +16,9 @@ LIB_DEPENDS=	libminiupnpc.so:net/miniupnpc \
 
 CONFLICTS=	socks5
 
-USES=		autoreconf libtool localbase
+USES=		libtool localbase
 GNU_CONFIGURE=	yes
+GNU_CONFIGURE_MANPREFIX=	${PREFIX}/share
 CONFIGURE_ARGS=	--with-socks-conf=${PREFIX}/etc/socks.conf \
 		--with-sockd-conf=${PREFIX}/etc/sockd.conf
 INSTALL_TARGET=	install-strip
@@ -28,23 +29,25 @@ USE_RC_SUBR=	sockd
 OPTIONS_DEFINE=	DOCS EXAMPLES
 
 post-install:
-	${INSTALL_DATA} ${WRKSRC}/example/socks.conf ${STAGEDIR}${PREFIX}/etc/socks.conf.sample
-	${INSTALL_DATA} ${WRKSRC}/example/sockd.conf ${STAGEDIR}${PREFIX}/etc/sockd.conf.sample
+.for x in s d
+	${INSTALL_DATA} ${WRKSRC}/example/sock${x}.conf \
+		${STAGEDIR}${PREFIX}/etc/sock${x}.conf.sample
+.endfor
 
 post-install-EXAMPLES-on:
 	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
-	${INSTALL_DATA} ${WRKSRC}/example/sockd-basic.conf ${STAGEDIR}${EXAMPLESDIR}
-	${INSTALL_DATA} ${WRKSRC}/example/sockd-chaining.conf ${STAGEDIR}${EXAMPLESDIR}
-	${INSTALL_DATA} ${WRKSRC}/example/socks-simple-withoutnameserver.conf ${STAGEDIR}${EXAMPLESDIR}
-	${INSTALL_DATA} ${WRKSRC}/example/socks-simple.conf ${STAGEDIR}${EXAMPLESDIR}
+	${INSTALL_DATA} ${WRKSRC}/example/sockd-basic.conf \
+		${WRKSRC}/example/sockd-chaining.conf \
+		${WRKSRC}/example/socks-simple-withoutnameserver.conf \
+		${WRKSRC}/example/socks-simple.conf ${STAGEDIR}${EXAMPLESDIR}
 
 post-install-DOCS-on:
-	@${MKDIR} ${STAGEDIR}${DOCSDIR}
 	@${MKDIR} ${STAGEDIR}${DOCSDIR}/contrib
-	${INSTALL_DATA} ${WRKSRC}/doc/README* ${STAGEDIR}${DOCSDIR}
-	${INSTALL_DATA} ${WRKSRC}/doc/rfc* ${STAGEDIR}${DOCSDIR}
-	${INSTALL_DATA} ${WRKSRC}/doc/SOCKS4*.protocol ${STAGEDIR}${DOCSDIR}
-	${INSTALL_DATA} ${WRKSRC}/UPGRADE ${STAGEDIR}${DOCSDIR}
-	${INSTALL_DATA} ${WRKSRC}/contrib/sockd-stat.awk ${STAGEDIR}${DOCSDIR}/contrib/sockd-stat.awk
+	${INSTALL_DATA} ${WRKSRC}/doc/README* \
+		${WRKSRC}/doc/rfc* \
+		${WRKSRC}/doc/SOCKS4*.protocol \
+		${WRKSRC}/UPGRADE ${STAGEDIR}${DOCSDIR}
+	${INSTALL_DATA} ${WRKSRC}/contrib/sockd-stat.awk \
+		${STAGEDIR}${DOCSDIR}/contrib
 
 .include <bsd.port.mk>
diff --git a/net/dante/files/patch-acinclude.m4 b/net/dante/files/patch-acinclude.m4
deleted file mode 100644
index 771468ccefc0..000000000000
--- a/net/dante/files/patch-acinclude.m4
+++ /dev/null
@@ -1,276 +0,0 @@
---- acinclude.m4.orig	2023-07-27 14:17:06 UTC
-+++ acinclude.m4
-@@ -437,270 +437,10 @@ unset pipeside
- #This little hack tries to make an educated guess as to what is the
- #case on this particular system.
- AC_MSG_CHECKING(read/send-side pipe system)
--AC_TRY_RUN([
--#include <sys/types.h>
--#include <sys/socket.h>
-+#This test is known to fail on the FreeBSD's official packaging
-+#machine. Set it to recvbased as FreeBSD is known to be.
- 
--#include <assert.h>
--#include <stdio.h>
--#include <stdlib.h>
--#include <string.h>
--#include <unistd.h>
--#include <fcntl.h>
--#include <errno.h>
--
--#ifndef MIN
--#define MIN(a,b) ((a) < (b) ? (a) : (b))
--#endif /* !MIN */
--
--#if NEED_AF_LOCAL
--#define AF_LOCAL AF_UNIX
--#endif /* NEED_AF_LOCAL */
--
--#define PACKETSIZE  (1024)
--
--#define PADBYTES    (sizeof(short) * (64))
--/*
-- * Just a wild guess.  Dante uses sizeof(long).
-- */
--
--#define SEND_PIPE   (0)
--#define RECV_PIPE   (1)
--
--#define EXIT_OK      (0) /* type successfully determined */
--#define EXIT_UNKNOWN (1) /* error: unable to determine type */
--
--static void
--setsockets(const int doreverse, const size_t packetsize,
--           const int s, const int r,
--           int *sndbuf, int *sndbuf_set,
--           int *rcvbuf, int *rcvbuf_set);
--
--static size_t
--sendtest(const int s, const char *buf, const size_t buflen);
--
--void
--reswrite(const char *res);
--
--int
--main(void)
--{
--   size_t sent, packetcount;
--   int sndbuf, sndbuf_set, rcvbuf, rcvbuf_set;
--   char buf[PACKETSIZE];
--   int datapipev[2];
--
--   if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, datapipev) != 0) {
--      perror("socketpair()");
--      exit(EXIT_UNKNOWN);
--   }
--
--   setsockets(0,
--              PACKETSIZE,
--              datapipev[SEND_PIPE],
--              datapipev[RECV_PIPE],
--              &sndbuf, &sndbuf_set,
--              &rcvbuf, &rcvbuf_set);
--
--   packetcount = MIN(sndbuf, sndbuf_set) / (PACKETSIZE + PADBYTES);
--
--   fprintf(stderr,
--           "Requested sndbuf to be %d, is %d.  "
--           "Requested rcvbuf to be %d, is %d.\n"
--           "Calculated packetcount is %lu\n",
--           sndbuf, sndbuf_set,
--           rcvbuf, rcvbuf_set,
--           (unsigned long)packetcount);
--
--   sent = sendtest(datapipev[SEND_PIPE], buf, PACKETSIZE) / PACKETSIZE;
--
--   if (sent >= packetcount) {
--      fprintf(stderr, "status determined by send-side\n");
--      reswrite("sendbased");
--      exit(EXIT_OK);
--   }
--
--   /*
--    * Try the reverse.  Perhaps this system wants a large rcvbuf rather than
--    * a large sndbuf.
--    */
--   close(datapipev[SEND_PIPE]);
--   close(datapipev[RECV_PIPE]);
--
--   if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, datapipev) != 0) {
--      perror("socketpair()");
--      exit(EXIT_UNKNOWN);
--   }
--
--   setsockets(1,
--              PACKETSIZE,
--              datapipev[SEND_PIPE],
--              datapipev[RECV_PIPE],
--              &sndbuf, &sndbuf_set,
--              &rcvbuf, &rcvbuf_set);
--
--   packetcount = MIN(rcvbuf, rcvbuf_set) / (PACKETSIZE + PADBYTES);
--
--   fprintf(stderr,
--           "Requested sndbuf to be %d, is %d.  "
--           "Requested rcvbuf to be %d, is %d.\n"
--           "Calculated packetcount is %lu\n",
--           sndbuf, sndbuf_set,
--           rcvbuf, rcvbuf_set,
--           (unsigned long)packetcount);
--
--   sent = sendtest(datapipev[SEND_PIPE], buf, PACKETSIZE) / PACKETSIZE;
--
--   if (sent >= packetcount) {
--      fprintf(stderr, "status determined by read-side\n");
--      reswrite("recvbased");
--      exit(EXIT_OK);
--   }
--
--   fprintf(stderr, "status is unknown\n");
--   return EXIT_UNKNOWN;
--}
--
--static void
--setsockets(doreverse, packetsize, s, r, sndbuf, sndbuf_set, rcvbuf, rcvbuf_set)
--   const int doreverse;
--   const size_t packetsize;
--   const int s;
--   const int r;
--   int *sndbuf, *sndbuf_set;
--   int *rcvbuf, *rcvbuf_set;
--{
--   socklen_t len;
--   int p;
--
--   if ((p = fcntl(s, F_GETFL, 0))        == -1
--   ||  fcntl(s, F_SETFL, p | O_NONBLOCK) == -1
--   ||  fcntl(r, F_SETFL, p | O_NONBLOCK) == -1) {
--      perror("fcntl(F_SETFL/F_GETFL, O_NONBLOCK) failed");
--      exit(EXIT_UNKNOWN);
--   }
--
--   len = sizeof(*sndbuf_set);
--
--   if (doreverse) {
--      *sndbuf = packetsize + PADBYTES;
--
--      if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf, sizeof(*sndbuf)) != 0) {
--         perror("setsockopt(SO_SNDBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--
--      if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf_set, &len) != 0) {
--         perror("getsockopt(SO_SNDBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--
--      *rcvbuf = *sndbuf_set * 10;
--      if (setsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf, sizeof(*rcvbuf)) != 0) {
--         perror("setsockopt(SO_RCVBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--   }
--   else {
--      *rcvbuf = packetsize + PADBYTES;
--
--      if (setsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf, sizeof(*rcvbuf)) != 0) {
--         perror("setsockopt(SO_RCVBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--
--      if (getsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf_set, &len) != 0) {
--         perror("getsockopt(SO_RCVBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--
--      *sndbuf = *rcvbuf_set * 10;
--      if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf, sizeof(*sndbuf)) != 0) {
--         perror("setsockopt(SO_SNDBUF)");
--         exit(EXIT_UNKNOWN);
--      }
--   }
--
--   if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf_set, &len) != 0
--   ||  getsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf_set, &len) != 0) {
--      perror("getsockopt(SO_SNDBUF/SO_RCVBUF)");
--      exit(EXIT_UNKNOWN);
--   }
--
--   fprintf(stderr, "sndbuf is %lu, rcvbuf is %lu\n",
--          (unsigned long)*sndbuf_set, (unsigned long)*rcvbuf_set);
--
--   if (doreverse) {
--      if (*rcvbuf_set < *rcvbuf) {
--         fprintf(stderr, "failed to set rcvbuf to %lu.  Is %lu\n",
--                 (unsigned long)*rcvbuf, (unsigned long)*rcvbuf_set);
--         exit(EXIT_UNKNOWN);
--      }
--   }
--   else {
--      if (*sndbuf_set < *sndbuf) {
--         fprintf(stderr, "failed to set sndbuf to %lu (is %lu)\n",
--                 (unsigned long)*sndbuf, (unsigned long)*sndbuf_set);
--         exit(EXIT_UNKNOWN);
--      }
--   }
--}
--
--static size_t
--sendtest(s, buf, buflen)
--   const int s;
--   const char *buf;
--   const size_t buflen;
--{
--   ssize_t rc;
--   size_t sent;
--   int i;
--
--   i        = 1;
--   sent     = 0;
--   errno    = 0;
--
--   while (1) {
--      if ((rc = write(s, buf, buflen)) == -1)
--         break;
--      else {
--         assert(rc == (ssize_t)buflen);
--
--         ++i;
--         sent += rc;
--      }
--   }
--
--   fprintf(stderr,
--          "failed sending packet #%d, sent %ld/%ld.  "
--          "Total bytes sent: %lu.  Error on last packet: %s\n",
--          i,
--          (long)rc,
--          (unsigned long)buflen,
--          (unsigned long)sent,
--          strerror(errno));
--
--   return sent;
--}
--
--void
--reswrite(res)
--   const char *res;
--{
--   FILE *fp;
--   if ((fp = fopen("conftest.out", "w")) == NULL) {
--      perror("fopen");
--      exit(1);
--   }
--   fprintf(fp, "%s\n", res);
--   fclose(fp);
--}], [pipeside=`cat conftest.out`
--     AC_MSG_RESULT([$pipeside])
--], [AC_MSG_RESULT(unknown)],
--   [dnl XXX assume no when cross-compiling
--    AC_MSG_RESULT(cross-compiling, assuming unknown)])
--
--case $pipeside in
-+case "recvbased" in
-     recvbased)
- 	AC_DEFINE(HAVE_PIPEBUFFER_RECV_BASED, 1, [platform pipe behavior])
- 	;;
diff --git a/net/dante/pkg-plist b/net/dante/pkg-plist
index 5d5e703139d2..009b96a3336c 100644
--- a/net/dante/pkg-plist
+++ b/net/dante/pkg-plist
@@ -8,10 +8,6 @@ lib/libsocks.so
 lib/libsocks.so.0
 lib/libsocks.so.0.1.1
 sbin/sockd
-man/man1/socksify.1.gz
-man/man5/sockd.conf.5.gz
-man/man5/socks.conf.5.gz
-man/man8/sockd.8.gz
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/sockd-basic.conf
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/sockd-chaining.conf
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/socks-simple-withoutnameserver.conf
@@ -26,3 +22,7 @@ man/man8/sockd.8.gz
 %%PORTDOCS%%%%DOCSDIR%%/rfc1928.txt
 %%PORTDOCS%%%%DOCSDIR%%/rfc1929.txt
 %%PORTDOCS%%%%DOCSDIR%%/rfc1961.txt
+share/man/man1/socksify.1.gz
+share/man/man5/sockd.conf.5.gz
+share/man/man5/socks.conf.5.gz
+share/man/man8/sockd.8.gz