mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 17:59:20 -04:00
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: 2b81a5f3f7
This commit is contained in:
parent
6fcbf445d8
commit
1b25faa3f9
3 changed files with 21 additions and 294 deletions
|
@ -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>
|
||||
|
|
|
@ -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])
|
||||
;;
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue