git: 2b81a5f3f73c - main - net/dante: unbreak
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 29 Jul 2023 16:58:04 UTC
The branch main has been updated by fernape: URL: https://cgit.FreeBSD.org/ports/commit/?id=2b81a5f3f73c8bcd910c246ff25bb1fc0135e7a9 commit 2b81a5f3f73c8bcd910c246ff25bb1fc0135e7a9 Author: Hiroo Ono <hiroo.ono+freebsd@gmail.com> AuthorDate: 2023-07-28 06:40:02 +0000 Commit: Fernando Apesteguía <fernape@FreeBSD.org> CommitDate: 2023-07-29 16:57:34 +0000 net/dante: unbreak Disable ran away test that works in local machines but for some reason fails in the official builders. PR: 272755 Reported by: hiroo.ono+freebsd@gmail.com --- net/dante/Makefile | 4 +- net/dante/files/patch-acinclude.m4 | 276 +++++++++++++++++++++++++++++++++++++ 2 files changed, 277 insertions(+), 3 deletions(-) diff --git a/net/dante/Makefile b/net/dante/Makefile index e61a676baf11..0031bfd84ba0 100644 --- a/net/dante/Makefile +++ b/net/dante/Makefile @@ -11,14 +11,12 @@ 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 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 <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]) + ;;