diff --git a/net/dante/Makefile b/net/dante/Makefile index e61a676baf11..0031bfd84ba0 100644 --- a/net/dante/Makefile +++ b/net/dante/Makefile @@ -1,52 +1,50 @@ PORTNAME= dante PORTVERSION= 1.4.3 CATEGORIES= net security MASTER_SITES= http://www.inet.no/dante/files/ \ ftp://ftp.inet.no/pub/socks/ MAINTAINER= ports@FreeBSD.org COMMENT= Circuit-level firewall/proxy WWW= https://www.inet.no/dante/ LICENSE= BSD4CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE -BROKEN= fails to configure - LIB_DEPENDS= libminiupnpc.so:net/miniupnpc \ libsasl2.so:security/cyrus-sasl2 CONFLICTS= socks5 -USES= libtool localbase +USES= autoreconf libtool localbase GNU_CONFIGURE= yes CONFIGURE_ARGS= --with-socks-conf=${PREFIX}/etc/socks.conf \ --with-sockd-conf=${PREFIX}/etc/sockd.conf INSTALL_TARGET= install-strip USE_LDCONFIG= yes 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 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} 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 .include diff --git a/net/dante/files/patch-acinclude.m4 b/net/dante/files/patch-acinclude.m4 new file mode 100644 index 000000000000..771468ccefc0 --- /dev/null +++ b/net/dante/files/patch-acinclude.m4 @@ -0,0 +1,276 @@ +--- 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 +-#include ++#This test is known to fail on the FreeBSD's official packaging ++#machine. Set it to recvbased as FreeBSD is known to be. + +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#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]) + ;;