Skip to content

Commit

Permalink
net/dante: unbreak
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Hiroo Ono authored and fernape committed Jul 29, 2023
1 parent 1238b1e commit 2b81a5f
Show file tree
Hide file tree
Showing 2 changed files with 277 additions and 3 deletions.
4 changes: 1 addition & 3 deletions net/dante/Makefile
Expand Up @@ -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
Expand Down
276 changes: 276 additions & 0 deletions 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])
;;

0 comments on commit 2b81a5f

Please sign in to comment.