aboutsummaryrefslogtreecommitdiff
path: root/net/rinetd
diff options
context:
space:
mode:
Diffstat (limited to 'net/rinetd')
-rw-r--r--net/rinetd/Makefile15
-rw-r--r--net/rinetd/files/patch-Makefile (renamed from net/rinetd/files/patch-aa)0
-rw-r--r--net/rinetd/files/patch-ab12
-rw-r--r--net/rinetd/files/patch-rinetd.c (renamed from net/rinetd/files/patch-ac)0
-rw-r--r--net/rinetd/files/patch-select2poll194
-rw-r--r--net/rinetd/files/rinetd.sh.in (renamed from net/rinetd/files/rinetd.sh)0
-rw-r--r--net/rinetd/pkg-message10
7 files changed, 205 insertions, 26 deletions
diff --git a/net/rinetd/Makefile b/net/rinetd/Makefile
index 3029ccfed82f..b58723523e92 100644
--- a/net/rinetd/Makefile
+++ b/net/rinetd/Makefile
@@ -7,29 +7,28 @@
PORTNAME= rinetd
PORTVERSION= 0.62
+PORTREVISION= 2
CATEGORIES= net
MASTER_SITES= http://www.boutell.com/rinetd/http/
DISTNAME= rinetd
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= garga@FreeBSD.org
COMMENT= A simple TCP port redirector
WRKSRC= ${WRKDIR}/rinetd/
MAN8= rinetd.8
PORTDOCS= index.html
-PLIST_FILES= etc/rc.d/rinetd.sh sbin/rinetd
+PLIST_FILES= sbin/rinetd
-
-USE_RC_SUBR= yes
-RC_SCRIPTS_SUB= PREFIX=${PREFIX} RC_SUBR=${RC_SUBR}
+USE_RC_SUBR= rinetd.sh
+USE_REINPLACE= yes
post-patch:
- @${SED} ${RC_SCRIPTS_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
- ${FILESDIR}/rinetd.sh > ${WRKDIR}/rinetd.sh
+ @${REINPLACE_CMD} -E "s,(/etc/rinetd.conf),${PREFIX}\1," \
+ ${WRKSRC}/rinetd.c
post-install:
- ${INSTALL_SCRIPT} -m 751 ${WRKDIR}/rinetd.sh ${PREFIX}/etc/rc.d/rinetd.sh
.if !defined(NOPORTDOCS)
${MKDIR} ${DOCSDIR}
cd ${WRKSRC} ; ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
diff --git a/net/rinetd/files/patch-aa b/net/rinetd/files/patch-Makefile
index 1e285ade8b5c..1e285ade8b5c 100644
--- a/net/rinetd/files/patch-aa
+++ b/net/rinetd/files/patch-Makefile
diff --git a/net/rinetd/files/patch-ab b/net/rinetd/files/patch-ab
deleted file mode 100644
index 084433fff3a2..000000000000
--- a/net/rinetd/files/patch-ab
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -u ../rinetd.orig/rinetd.c ./rinetd.c
---- ../rinetd.orig/rinetd.c Mon Mar 1 13:43:35 1999
-+++ rinetd.c Fri Jun 11 19:40:05 1999
-@@ -214,7 +214,7 @@
- };
-
- RinetdOptions options = {
-- "/etc/rinetd.conf"
-+ "/usr/local/etc/rinetd.conf"
- };
-
- int readArgs (int argc,
diff --git a/net/rinetd/files/patch-ac b/net/rinetd/files/patch-rinetd.c
index c7797d5978ce..c7797d5978ce 100644
--- a/net/rinetd/files/patch-ac
+++ b/net/rinetd/files/patch-rinetd.c
diff --git a/net/rinetd/files/patch-select2poll b/net/rinetd/files/patch-select2poll
new file mode 100644
index 000000000000..5fa3f1411d27
--- /dev/null
+++ b/net/rinetd/files/patch-select2poll
@@ -0,0 +1,194 @@
+--- rinetd.c.orig Mon Apr 14 22:19:23 2003
++++ rinetd.c Tue Oct 4 07:25:42 2005
+@@ -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 @@
+ #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;
+@@ -750,15 +752,82 @@
+ 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 +837,47 @@
+ }
+ if (coClosing[i]) {
+ if (!reClosed[i]) {
+- FD_SET(reFds[i], &writefds);
+- }
+- if (!loClosed[i]) {
+- FD_SET(loFds[i], &writefds);
++ //FD_SET(reFds[i], &writefds);
++ nfds = poll_set_fd(pfds, total, nfds,
++ reFds[i], POLLOUT);
+ }
+ }
+ /* 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 +887,26 @@
+ 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);
+ }
+ }
diff --git a/net/rinetd/files/rinetd.sh b/net/rinetd/files/rinetd.sh.in
index dc86c53b79ea..dc86c53b79ea 100644
--- a/net/rinetd/files/rinetd.sh
+++ b/net/rinetd/files/rinetd.sh.in
diff --git a/net/rinetd/pkg-message b/net/rinetd/pkg-message
index 81a5e478c2b4..eec133947b11 100644
--- a/net/rinetd/pkg-message
+++ b/net/rinetd/pkg-message
@@ -1,10 +1,8 @@
- ***********************************
- * !!!!!!!!!!! WARNING !!!!!!!!!!! *
- ***********************************
-Since 0.62_1, rinetd startup script is now enabled/disabled via
-rc.subr.
-Available variables:
+#
+# You can use the following parameters on /etc/rc.conf:
+#
# rinetd_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable rinetd
# rinetd_flags (str): Set to "" by default.
# Extra flags passed to start command
+#