mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
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
This commit is contained in:
parent
1238b1e82d
commit
2b81a5f3f7
2 changed files with 277 additions and 3 deletions
|
@ -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
|
||||
|
|
276
net/dante/files/patch-acinclude.m4
Normal file
276
net/dante/files/patch-acinclude.m4
Normal file
|
@ -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])
|
||||
;;
|
Loading…
Add table
Reference in a new issue