mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 01:26:39 -04:00
net/rinetd: Downgrade to 0.62, take maintainership
This fixes massive performance issues, but also loses IPv6 support. Updates will come back, once regressions have been corrected. PR: 281873
This commit is contained in:
parent
588504901f
commit
9e46f71b46
7 changed files with 244 additions and 41 deletions
|
@ -1,24 +1,23 @@
|
||||||
PORTNAME= rinetd
|
PORTNAME= rinetd
|
||||||
PORTVERSION= 0.73
|
PORTVERSION= 0.62
|
||||||
PORTREVISION= 2
|
|
||||||
DISTVERSIONPREFIX= v
|
DISTVERSIONPREFIX= v
|
||||||
|
PORTEPOCH= 1
|
||||||
CATEGORIES= net
|
CATEGORIES= net
|
||||||
|
|
||||||
MAINTAINER= garga@FreeBSD.org
|
MAINTAINER= grembo@FreeBSD.org
|
||||||
COMMENT= Simple TCP port redirector
|
COMMENT= Simple TCP port redirector
|
||||||
WWW= https://github.com/samhocevar/rinetd
|
WWW= https://github.com/samhocevar/rinetd
|
||||||
|
|
||||||
LICENSE= GPLv2
|
LICENSE= GPLv2
|
||||||
|
|
||||||
USES= cpe dos2unix autoreconf
|
USES= cpe dos2unix
|
||||||
USE_GITHUB= yes
|
USE_GITHUB= yes
|
||||||
GH_ACCOUNT= samhocevar
|
GH_ACCOUNT= samhocevar
|
||||||
GH_TAGNAME= d4e0a60
|
GH_TAGNAME= 1c95abb27dbf3
|
||||||
USE_RC_SUBR= rinetd
|
USE_RC_SUBR= rinetd
|
||||||
|
|
||||||
GNU_CONFIGURE= yes
|
PLIST_FILES= sbin/rinetd \
|
||||||
GNU_CONFIGURE_MANPREFIX= ${PREFIX}/share
|
share/man/man8/rinetd.8.gz
|
||||||
|
|
||||||
PORTDOCS= index.html
|
PORTDOCS= index.html
|
||||||
|
|
||||||
OPTIONS_DEFINE= DOCS
|
OPTIONS_DEFINE= DOCS
|
||||||
|
@ -29,11 +28,8 @@ post-patch:
|
||||||
-e "s,/usr(/sbin/rinetd),${PREFIX}\1," \
|
-e "s,/usr(/sbin/rinetd),${PREFIX}\1," \
|
||||||
${WRKSRC}/rinetd.8
|
${WRKSRC}/rinetd.8
|
||||||
@${REINPLACE_CMD} -E "s,(/etc/rinetd.conf),${PREFIX}\1," \
|
@${REINPLACE_CMD} -E "s,(/etc/rinetd.conf),${PREFIX}\1," \
|
||||||
${WRKSRC}/src/rinetd.h
|
${WRKSRC}/rinetd.c
|
||||||
|
@${REINPLACE_CMD} -e "s,cc ,${CC} ,g" ${WRKSRC}/Makefile
|
||||||
post-install:
|
|
||||||
${MV} ${STAGEDIR}${PREFIX}/etc/rinetd.conf \
|
|
||||||
${STAGEDIR}${PREFIX}/etc/rinetd.conf.sample
|
|
||||||
|
|
||||||
post-install-DOCS-on:
|
post-install-DOCS-on:
|
||||||
${MKDIR} ${STAGEDIR}${DOCSDIR}
|
${MKDIR} ${STAGEDIR}${DOCSDIR}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
TIMESTAMP = 1696686326
|
TIMESTAMP = 1733754055
|
||||||
SHA256 (samhocevar-rinetd-v0.73-d4e0a60_GH0.tar.gz) = 76eef19e0af8459c9434ac8ac0b58edac1bba353f5aaceb1d5f971fb3f6a3016
|
SHA256 (samhocevar-rinetd-v0.62-1c95abb27dbf3_GH0.tar.gz) = 6567abbcad830004b32eed8e0e21c9fb28a7843bd2916f60ab5d289d1f3327fd
|
||||||
SIZE (samhocevar-rinetd-v0.73-d4e0a60_GH0.tar.gz) = 45544
|
SIZE (samhocevar-rinetd-v0.62-1c95abb27dbf3_GH0.tar.gz) = 24036
|
||||||
|
|
22
net/rinetd/files/patch-Makefile
Normal file
22
net/rinetd/files/patch-Makefile
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
--- Makefile.orig 2024-12-09 14:53:18 UTC
|
||||||
|
+++ Makefile
|
||||||
|
@@ -1,9 +1,14 @@
|
||||||
|
-CFLAGS=-DLINUX -g
|
||||||
|
+CFLAGS+=-I. -DLINUX
|
||||||
|
|
||||||
|
-rinetd: rinetd.o match.o
|
||||||
|
- gcc rinetd.o match.o -o rinetd
|
||||||
|
+all: rinetd
|
||||||
|
|
||||||
|
+rinetd: rinetd.o match.o getopt.o
|
||||||
|
+ ${CC} ${CFLAGS} rinetd.o match.o getopt.o -o rinetd
|
||||||
|
+
|
||||||
|
+getopt.o:
|
||||||
|
+ ${CC} ${CFLAGS} -c getopt.c
|
||||||
|
+
|
||||||
|
install: rinetd
|
||||||
|
- install -m 700 rinetd /usr/sbin
|
||||||
|
- install -m 644 rinetd.8 /usr/man/man8
|
||||||
|
+ install -s -m 755 rinetd ${DESTDIR}${PREFIX}/sbin
|
||||||
|
+ install -m 644 rinetd.8 ${DESTDIR}${PREFIX}/share/man/man8
|
||||||
|
|
210
net/rinetd/files/patch-rinetd.c
Normal file
210
net/rinetd/files/patch-rinetd.c
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
--- rinetd.c.orig 2024-12-09 14:53:18 UTC
|
||||||
|
+++ rinetd.c
|
||||||
|
@@ -12,6 +12,7 @@
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <errno.h>
|
||||||
|
+#include <poll.h>
|
||||||
|
#define INVALID_SOCKET (-1)
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif /* WIN32 */
|
||||||
|
@@ -94,6 +95,7 @@ void Sleep(long ms)
|
||||||
|
#include "match.h"
|
||||||
|
|
||||||
|
SOCKET *seFds = 0;
|
||||||
|
+static int first_set = 0;
|
||||||
|
/* In network order, for network purposes */
|
||||||
|
struct in_addr *seLocalAddrs = 0;
|
||||||
|
unsigned short *seLocalPorts = 0;
|
||||||
|
@@ -243,6 +245,7 @@ int main(int argc, char *argv[])
|
||||||
|
signal(SIGHUP, hup);
|
||||||
|
#endif /* WIN32 */
|
||||||
|
signal(SIGTERM, term);
|
||||||
|
+ setsid();
|
||||||
|
initArrays();
|
||||||
|
readConfiguration();
|
||||||
|
RegisterPID();
|
||||||
|
@@ -646,6 +649,7 @@ void readConfiguration(void)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ fclose(in);
|
||||||
|
/* Open the log file */
|
||||||
|
if (logFile) {
|
||||||
|
fclose(logFile);
|
||||||
|
@@ -750,15 +754,82 @@ void handleAccept(int i);
|
||||||
|
void openLocalFd(int se, int i);
|
||||||
|
int getAddress(char *host, struct in_addr *iaddr);
|
||||||
|
|
||||||
|
+inline void poll_init_fds(struct pollfd *pfds, int size) {
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ memset(pfds, 0, sizeof(struct pollfd) * size);
|
||||||
|
+ first_set = 1;
|
||||||
|
+ for(i = 0; i < size; i++)
|
||||||
|
+ pfds[i].fd = -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+inline int poll_set_fd(struct pollfd *pfds, int size, int count,
|
||||||
|
+ int fd, short int ev) {
|
||||||
|
+#ifdef _NEW_POLL_SET_FD
|
||||||
|
+ if(first_set) {
|
||||||
|
+ pfds[count].fd = fd;
|
||||||
|
+ pfds[count].events |= ev;
|
||||||
|
+ first_set = 0;
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ if(pfds[count].fd != fd && !first_set) {
|
||||||
|
+ count++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ pfds[count].fd = fd;
|
||||||
|
+ pfds[count].events |= ev;
|
||||||
|
+
|
||||||
|
+ return count;
|
||||||
|
+#else
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for(i = 0; i < size; i++) {
|
||||||
|
+ if(pfds[i].fd == -1) {
|
||||||
|
+ pfds[i].fd = fd;
|
||||||
|
+ pfds[i].events |= ev;
|
||||||
|
+ count++;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if(pfds[i].fd == fd) {
|
||||||
|
+ pfds[i].events |= ev;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return count;
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int poll_fd_isset(struct pollfd *pfds, int nfds, int fd, short event) {
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for(i = 0; i < nfds; i++) {
|
||||||
|
+ if(pfds[i].fd == fd)
|
||||||
|
+ return pfds[i].revents & event;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void selectPass(void) {
|
||||||
|
int i;
|
||||||
|
- fd_set readfds, writefds;
|
||||||
|
- FD_ZERO(&readfds);
|
||||||
|
- FD_ZERO(&writefds);
|
||||||
|
+ int nfds = 0;
|
||||||
|
+ int total = 0;
|
||||||
|
+ static struct pollfd *pfds = NULL;
|
||||||
|
+
|
||||||
|
/* Server sockets */
|
||||||
|
+ total = seTotal + (coTotal * 2);
|
||||||
|
+
|
||||||
|
+ if(!pfds) {
|
||||||
|
+ pfds = malloc(sizeof(struct pollfd) * total);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ poll_init_fds(pfds, total);
|
||||||
|
+
|
||||||
|
for (i = 0; (i < seTotal); i++) {
|
||||||
|
if (seFds[i] != INVALID_SOCKET) {
|
||||||
|
- FD_SET(seFds[i], &readfds);
|
||||||
|
+ //FD_SET(seFds[i], &readfds)
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds, seFds[i], POLLIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Connection sockets */
|
||||||
|
@@ -768,35 +839,47 @@ void selectPass(void) {
|
||||||
|
}
|
||||||
|
if (coClosing[i]) {
|
||||||
|
if (!reClosed[i]) {
|
||||||
|
- FD_SET(reFds[i], &writefds);
|
||||||
|
+ //FD_SET(reFds[i], &writefds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds,
|
||||||
|
+ reFds[i], POLLOUT);
|
||||||
|
}
|
||||||
|
- if (!loClosed[i]) {
|
||||||
|
- FD_SET(loFds[i], &writefds);
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
/* Get more input if we have room for it */
|
||||||
|
if ((!reClosed[i]) && (coInputRPos[i] < bufferSpace)) {
|
||||||
|
- FD_SET(reFds[i], &readfds);
|
||||||
|
+ //FD_SET(reFds[i], &readfds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds, reFds[i], POLLIN);
|
||||||
|
}
|
||||||
|
/* Send more output if we have any */
|
||||||
|
if ((!reClosed[i]) && (coOutputWPos[i] < coOutputRPos[i])) {
|
||||||
|
- FD_SET(reFds[i], &writefds);
|
||||||
|
+ //FD_SET(reFds[i], &writefds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds, reFds[i], POLLOUT);
|
||||||
|
}
|
||||||
|
+ if (coClosing[i]) {
|
||||||
|
+ if (!loClosed[i]) {
|
||||||
|
+ //FD_SET(loFds[i], &writefds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds,
|
||||||
|
+ loFds[i], POLLOUT);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
/* Accept more output from the local
|
||||||
|
server if there's room */
|
||||||
|
if ((!loClosed[i]) && (coOutputRPos[i] < bufferSpace)) {
|
||||||
|
- FD_SET(loFds[i], &readfds);
|
||||||
|
+ //FD_SET(loFds[i], &readfds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds, loFds[i], POLLIN);
|
||||||
|
}
|
||||||
|
/* Send more input to the local server
|
||||||
|
if we have any */
|
||||||
|
if ((!loClosed[i]) && (coInputWPos[i] < coInputRPos[i])) {
|
||||||
|
- FD_SET(loFds[i], &writefds);
|
||||||
|
+ //FD_SET(loFds[i], &writefds);
|
||||||
|
+ nfds = poll_set_fd(pfds, total, nfds, loFds[i], POLLOUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- select(maxfd + 1, &readfds, &writefds, 0, 0);
|
||||||
|
+ //select(maxfd + 1, &readfds, &writefds, 0, 0);
|
||||||
|
+ poll(pfds, nfds + 1, -1);
|
||||||
|
for (i = 0; (i < seTotal); i++) {
|
||||||
|
if (seFds[i] != -1) {
|
||||||
|
- if (FD_ISSET(seFds[i], &readfds)) {
|
||||||
|
+ //if (FD_ISSET(seFds[i], &readfds)) {
|
||||||
|
+ if (poll_fd_isset(pfds, nfds, seFds[i], POLLIN)) {
|
||||||
|
handleAccept(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -806,22 +889,26 @@ void selectPass(void) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!reClosed[i]) {
|
||||||
|
- if (FD_ISSET(reFds[i], &readfds)) {
|
||||||
|
+ //if (FD_ISSET(reFds[i], &readfds)) {
|
||||||
|
+ if (poll_fd_isset(pfds, nfds, reFds[i], POLLIN)) {
|
||||||
|
handleRemoteRead(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!reClosed[i]) {
|
||||||
|
- if (FD_ISSET(reFds[i], &writefds)) {
|
||||||
|
+ //if (FD_ISSET(reFds[i], &writefds)) {
|
||||||
|
+ if (poll_fd_isset(pfds, nfds, reFds[i], POLLOUT)) {
|
||||||
|
handleRemoteWrite(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!loClosed[i]) {
|
||||||
|
- if (FD_ISSET(loFds[i], &readfds)) {
|
||||||
|
+ //if (FD_ISSET(loFds[i], &readfds)) {
|
||||||
|
+ if (poll_fd_isset(pfds, nfds, loFds[i], POLLIN)) {
|
||||||
|
handleLocalRead(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!loClosed[i]) {
|
||||||
|
- if (FD_ISSET(loFds[i], &writefds)) {
|
||||||
|
+ //if (FD_ISSET(loFds[i], &writefds)) {
|
||||||
|
+ if (poll_fd_isset(pfds, nfds, loFds[i], POLLOUT)) {
|
||||||
|
handleLocalWrite(i);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +0,0 @@
|
||||||
--- src/Makefile.am.orig 2023-10-07 16:13:36 UTC
|
|
||||||
+++ src/Makefile.am
|
|
||||||
@@ -18,7 +18,7 @@ parse.c: parse.peg
|
|
||||||
# _DARWIN_C_SOURCE is for NI_MAXHOST on OS X
|
|
||||||
# _XOPEN_SOURCE is for struct sigaction
|
|
||||||
# _GNU_SOURCE is for h_errno and gethostbyname-related macros
|
|
||||||
-___rinetd_CFLAGS = -std=c99 -D_POSIX_C_SOURCE=200809L \
|
|
||||||
+___rinetd_CFLAGS = -std=c99 \
|
|
||||||
-D_XOPEN_SOURCE -D_GNU_SOURCE -D_DARWIN_C_SOURCE \
|
|
||||||
-Wall -Wextra -Wwrite-strings
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- src/rinetd.c.orig 2023-10-07 16:13:36 UTC
|
|
||||||
+++ src/rinetd.c
|
|
||||||
@@ -927,7 +927,7 @@ RETSIGTYPE quit(int s)
|
|
||||||
|
|
||||||
void registerPID(char const *pid_file_name)
|
|
||||||
{
|
|
||||||
-#if defined(__linux__)
|
|
||||||
+#if defined(__linux__) || defined(__FreeBSD__)
|
|
||||||
FILE *pid_file = fopen(pid_file_name, "w");
|
|
||||||
if (pid_file == NULL) {
|
|
||||||
/* non-fatal, non-Linux may lack /var/run... */
|
|
|
@ -1,3 +0,0 @@
|
||||||
@sample etc/rinetd.conf.sample
|
|
||||||
sbin/rinetd
|
|
||||||
share/man/man8/rinetd.8.gz
|
|
Loading…
Add table
Reference in a new issue