This commit is contained in:
Mario Fetka 2017-03-30 14:53:08 +02:00
parent a679a55d0c
commit 14323d0932
4 changed files with 1018 additions and 0 deletions

196
debian/patches/rinetd-doc.patch vendored Normal file
View File

@ -0,0 +1,196 @@
--- CHANGES
+++ CHANGES
@@ -52,4 +52,10 @@
accommodate more connections. Thanks to
Sam Hocevar.
+Version 0.62+syslog: added logging to syslog
+support (SuSE)
+Version 0.62+syslog+bind: added optional
+sourceaddress column in configuration file to bind
+to a specific local address for outgoing connections
+(Lutz Pressler, <lp@SerNet.DE>)
--- index.html
+++ index.html
@@ -26,7 +26,7 @@
<p>
<font color="#FF8888" size="4">VERSION</font>
<p>
-Version 0.62, 04/13/2003. Version 0.62 corrects a potential
+Version 0.62+syslog+bind, 04/13/2003. Version 0.62 corrects a potential
buffer overflow when reallocating memory to accommodate more
connections. Upgrading is strongly recommended.
<p>
@@ -66,7 +66,7 @@
Most entries in the configuration file are forwarding rules. The
format of a forwarding rule is as follows:
<pre>
-bindaddress bindport connectaddress connectport
+bindaddress bindport connectaddress connectport [sourceaddress]
</pre>
For example:
<pre>
@@ -96,6 +96,9 @@
Both IP addresses and hostnames are accepted for
bindaddress and connectaddress.
<p>
+The optional sourceaddress can be used to bind to a specific local
+address for the outgoing connection.
+<p>
<font color="#FF8888" size="4">ALLOW AND DENY RULES</font>
<p>
Configuration files can also contain allow and deny rules.
@@ -146,8 +149,9 @@
<p>
<font color="#FF8888" size="4">LOGGING</font>
<p>
-rinetd is able to produce a log file in either of two formats:
-tab-delimited and web server-style "common log format."
+rinetd is able to produce a log output in three ways:
+tab-delimited , web server-style "common log format." both are file-based
+or as syslog output.
<p>
By default, rinetd does not produce a log file. To activate logging, add
the following line to the configuration file:
@@ -184,6 +188,33 @@
logcommon
</pre>
<p>
+To activate syslog output enter the following line to the
+configuration file:
+<pre>
+syslog facility priority
+</pre>
+Example1:
+<pre>
+syslog local0 info
+</pre>
+in this case all output is logged to the destination configured
+in your syslogd config for facility local0 and priority info
+<p>
+Example2:
+<pre>
+syslog
+</pre>
+in this case everything goes to daemon info
+<p>
+Example3:
+<pre>
+syslog wrongfacility wrongpriority
+</pre>
+logging to default: daemon info
+<p>
+If configured, the local source address is given in square brackets
+after the "listening host" entry.
+<p>
<font color="#FF8888" size="4">COMMAND LINE OPTIONS</font>
<p>
The -c command line option is used to specify an alternate
@@ -231,6 +262,10 @@
Thomas Boutell can be reached by email:
<a href="mailto:boutell@boutell.com">boutell@boutell.com</a>
<p>
+Logging to syslog added by SuSE.<br>
+Sourceaddress extension added by Lutz Pressler
+<<a href="mailto:lp@SerNet.DE">lp@SerNet.DE</a href>>.
+<p>
<font color="#FF8888" size="4">THANKS</font>
<p>
Thanks are due to Bill Davidsen, Libor Pechachek, Sascha Ziemann,
--- rinetd.8
+++ rinetd.8
@@ -12,7 +12,7 @@
.Sh SYNOPSIS
.Nm /usr/sbin/rinetd
.Sh VERSION
-Version 0.62, 04/14/2003.
+Version 0.62+syslog+bind, 04/14/2003.
.Sh DESCRIPTION
.Nm rinetd
redirects TCP connections from one IP address and port to another. rinetd
@@ -34,7 +34,7 @@
Most entries in the configuration file are forwarding rules. The
format of a forwarding rule is as follows:
.Pp
-bindaddress bindport connectaddress connectport
+bindaddress bindport connectaddress connectport [sourceaddress]
.Pp
For example:
.Pp
@@ -64,6 +64,9 @@
Both IP addresses and hostnames are accepted for
bindaddress and connectaddress.
.Pp
+The optional sourceaddress can be used to bind to a specific local
+address for the outgoing connection.
+.Pp
.Sh ALLOW AND DENY RULES
Configuration files can also contain allow and deny rules.
.Pp
@@ -82,7 +85,7 @@
.Pp
Deny rules which appear before the first forwarding rule are
applied globally: if the address of a new connection satisfies
-any of the global allow rules, that connection
+any of the global deny rules, that connection
is immediately rejected, regardless of any other rules.
.Pp
Deny rules which appear after a specific forwarding rule apply
@@ -111,8 +114,9 @@
connections would be forced to pause during the address lookup.
.Pp
.Sh LOGGING
-rinetd is able to produce a log file in either of two formats:
-tab-delimited and web server-style "common log format."
+rinetd is able to produce a log output in three ways:
+tab-delimited , web server-style "common log format." both are file-based
+or as syslog output.
.Pp
By default, rinetd does not produce a log file. To activate logging, add
the following line to the configuration file:
@@ -146,6 +150,34 @@
add the following line to the configuration file:
.Pp
logcommon
+
+to activate syslog output enter the following line to the
+configuration file:
+
+syslog facility priority
+
+Example1:
+
+syslog local0 info
+
+in this case all output is logged to the destination configured
+in your syslogd config for facility local0 and priority info
+
+Example2:
+
+syslog
+
+in this case everything goes to daemon info
+
+Example3:
+
+syslog wrongfacility wrongpriority
+
+logging to default: daemon info
+
+.Pp
+If configured, the local source address is given in square brackets
+after the "listening host" entry.
.Sh COMMAND LINE OPTIONS
The -c command line option is used to specify an alternate
configuration file.
@@ -184,6 +216,9 @@
.Sh CONTACT INFORMATION
See http://www.boutell.com/rinetd/ for the latest release.
Thomas Boutell can be reached by email: boutell@boutell.com
+.Pp
+Logging to syslog added by SuSE.
+Sourceaddress extension added by Lutz Pressler <lp@SerNet.DE>.
.Sh THANKS
Thanks are due to Bill Davidsen, Libor Pechachek, Sascha Ziemann, the
Apache Group, and many others who have contributed advice

819
debian/patches/rinetd-syslog.patch vendored Normal file
View File

@ -0,0 +1,819 @@
Index: rinetd.c
===================================================================
--- rinetd.c.orig
+++ rinetd.c
@@ -1,10 +1,11 @@
-#define VERSION "0.62"
+#define VERSION "0.62+syslog+bind"
#ifdef WIN32
#include <windows.h>
#include <winsock.h>
#include "getopt.h"
#else
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
@@ -14,8 +15,12 @@
#include <errno.h>
#define INVALID_SOCKET (-1)
#include <sys/time.h>
+/* kus@suse.de at 24.08.99 */
+#define SYSLOG
+#define SYSLOG_NAMES
+#include <syslog.h>
#endif /* WIN32 */
-
+
#include <stdio.h>
#include <string.h>
#include <signal.h>
@@ -23,53 +28,53 @@
#include <fcntl.h>
#include <time.h>
#include <ctype.h>
-
-#ifndef WIN32
-/* Windows sockets compatibility defines */
-#define INVALID_SOCKET (-1)
-#define SOCKET_ERROR (-1)
-int closesocket(int s);
-
-int closesocket(int s) {
- return close(s);
-}
-#define ioctlsocket ioctl
-#define MAKEWORD(a, b)
-#define WSAStartup(a, b) (0)
-#define WSACleanup()
-#ifdef __MAC__
-/* The constants for these are a little screwy in the prelinked
- MSL GUSI lib and we can't rebuild it, so roll with it */
-#define WSAEWOULDBLOCK EWOULDBLOCK
-#define WSAEAGAIN EAGAIN
-#define WSAEINPROGRESS EINPROGRESS
-#else
-#define WSAEWOULDBLOCK EWOULDBLOCK
-#define WSAEAGAIN EAGAIN
-#define WSAEINPROGRESS EINPROGRESS
-#endif /* __MAC__ */
-#define WSAEINTR EINTR
-#define SOCKET int
-#define GetLastError() (errno)
-typedef struct {
- int dummy;
-} WSADATA;
-
-void Sleep(long ms);
-
-void Sleep(long ms)
-{
- struct timeval tv;
- tv.tv_sec = ms / 1000;
- tv.tv_usec = ms * 1000;
- select(0, 0, 0, 0, &tv);
-}
-#else
-/* WIN32 doesn't really have WSAEAGAIN */
-#ifndef WSAEAGAIN
-#define WSAEAGAIN WSAEWOULDBLOCK
-#endif
-#endif /* WIN32 */
+
+#ifndef WIN32
+/* Windows sockets compatibility defines */
+#define INVALID_SOCKET (-1)
+#define SOCKET_ERROR (-1)
+int closesocket(int s);
+
+int closesocket(int s) {
+ return close(s);
+}
+#define ioctlsocket ioctl
+#define MAKEWORD(a, b)
+#define WSAStartup(a, b) (0)
+#define WSACleanup()
+#ifdef __MAC__
+/* The constants for these are a little screwy in the prelinked
+ MSL GUSI lib and we can't rebuild it, so roll with it */
+#define WSAEWOULDBLOCK EWOULDBLOCK
+#define WSAEAGAIN EAGAIN
+#define WSAEINPROGRESS EINPROGRESS
+#else
+#define WSAEWOULDBLOCK EWOULDBLOCK
+#define WSAEAGAIN EAGAIN
+#define WSAEINPROGRESS EINPROGRESS
+#endif /* __MAC__ */
+#define WSAEINTR EINTR
+#define SOCKET int
+#define GetLastError() (errno)
+typedef struct {
+ int dummy;
+} WSADATA;
+
+void Sleep(long ms);
+
+void Sleep(long ms)
+{
+ struct timeval tv;
+ tv.tv_sec = ms / 1000;
+ tv.tv_usec = ms * 1000;
+ select(0, 0, 0, 0, &tv);
+}
+#else
+/* WIN32 doesn't really have WSAEAGAIN */
+#ifndef WSAEAGAIN
+#define WSAEAGAIN WSAEWOULDBLOCK
+#endif
+#endif /* WIN32 */
#ifndef TRUE
#define TRUE 1
@@ -91,15 +96,17 @@ void Sleep(long ms)
#include <sys/filio.h>
#endif /* FIONBIO */
-#include "match.h"
+#include "match.h"
SOCKET *seFds = 0;
/* In network order, for network purposes */
struct in_addr *seLocalAddrs = 0;
unsigned short *seLocalPorts = 0;
+struct in_addr *seLocalSAddrs = 0;
/* In ASCII and local byte order, for logging purposes */
char **seFromHosts;
int *seFromPorts;
+char **seFromSHosts;
char **seToHosts;
int *seToPorts;
@@ -143,6 +150,15 @@ char *pidLogFileName = 0;
int logFormatCommon = 0;
FILE *logFile = 0;
+#ifdef SYSLOG
+ int decode __P((char *, CODE *));
+ char *syslogFacility_default = "daemon";
+ char *syslogFacility = 0;
+ char *syslogLevel_default = "info";
+ char *syslogLevel = 0;
+ int syslogpriority = -1;
+#endif
+
/* If 'newsize' bytes can be allocated, *data is set to point
to them, the previous data is copied, and 1 is returned.
If 'size' bytes cannot be allocated, *data is UNCHANGED,
@@ -174,8 +190,9 @@ void RegisterPID(void);
void selectLoop(void);
void log(int i, int coSe, int result);
-
-int getAddress(char *host, struct in_addr *iaddr);
+void simplelog(char *message);
+
+int getAddress(char *host, struct in_addr *iaddr);
char *logMessages[] = {
"done-local-closed",
@@ -191,6 +208,8 @@ char *logMessages[] = {
"not-allowed",
0,
"denied",
+ 0,
+ "started",
0
};
@@ -201,6 +220,7 @@ char *logMessages[] = {
#define logLocalConnectFailed 8
#define logNotAllowed 10
#define logDenied 12
+#define logStarted 14
#define logLocalClosedFirst 0
#define logRemoteClosedFirst 1
@@ -222,32 +242,32 @@ int readArgs (int argc,
RinetdOptions *options);
int main(int argc, char *argv[])
-{
- WSADATA wsaData;
- int result = WSAStartup(MAKEWORD(1, 1), &wsaData);
- if (result != 0) {
- fprintf(stderr, "Your computer was not connected "
- "to the Internet at the time that "
- "this program was launched, or you "
- "do not have a 32-bit "
- "connection to the Internet.");
- exit(1);
- }
+{
+ WSADATA wsaData;
+ int result = WSAStartup(MAKEWORD(1, 1), &wsaData);
+ if (result != 0) {
+ fprintf(stderr, "Your computer was not connected "
+ "to the Internet at the time that "
+ "this program was launched, or you "
+ "do not have a 32-bit "
+ "connection to the Internet.");
+ exit(1);
+ }
readArgs(argc, argv, &options);
-#ifndef WIN32
+#ifndef WIN32
#ifndef DEBUG
if (!fork()) {
if (!fork()) {
#endif /* DEBUG */
signal(SIGPIPE, plumber);
signal(SIGHUP, hup);
-#endif /* WIN32 */
+#endif /* WIN32 */
signal(SIGTERM, term);
initArrays();
readConfiguration();
RegisterPID();
selectLoop();
-#ifndef WIN32
+#ifndef WIN32
#ifndef DEBUG
} else {
exit(0);
@@ -256,7 +276,7 @@ int main(int argc, char *argv[])
exit(0);
}
#endif /* DEBUG */
-#endif /* WIN32 */
+#endif /* WIN32 */
return 0;
}
@@ -264,6 +284,30 @@ int getConfLine(FILE *in, char *line, in
int patternBad(char *pattern);
+/*
+ kus@suse.de at 25.08.1999
+ Thanks to the logger.c folks
+*/
+#ifdef SYSLOG
+int decode(name, codetab)
+ char *name;
+ CODE *codetab;
+{
+ register CODE *c;
+
+ if (isdigit(*name))
+ return (atoi(name));
+
+ for (c = codetab; c->c_name; c++)
+ if (!strcasecmp(name, c->c_name))
+ return (c->c_val);
+
+ return (-1);
+}
+
+#endif
+/*End kus@suse.de at 25.08.1999 */
+
void readConfiguration(void)
{
FILE *in;
@@ -285,8 +329,10 @@ void readConfiguration(void)
free(seFds);
free(seLocalAddrs);
free(seLocalPorts);
+ free(seLocalSAddrs);
free(seFromHosts);
free(seFromPorts);
+ free(seFromSHosts);
free(seToHosts);
free(seToPorts);
free(seAllowRules);
@@ -319,6 +365,16 @@ void readConfiguration(void)
free(logFileName);
logFileName = 0;
}
+/* kus@suse.de at 25.08.1999 syslog stuff */
+ if (syslogLevel){
+ free(syslogLevel);
+ syslogLevel=0;
+ }
+ if (syslogFacility){
+ free(syslogFacility);
+ syslogFacility=0;
+ }
+/* End kus@suse.de at 25.08.1999 */
if (pidLogFileName) {
free(pidLogFileName);
pidLogFileName = 0;
@@ -342,6 +398,11 @@ void readConfiguration(void)
continue;
} else if (!strcmp(t, "logcommon")) {
continue;
+/* kus@suse.de at 24.08.1999 */
+#ifdef SYSLOG
+ } else if (!strcmp(t, "syslog")) {
+ continue;
+#endif
} else if (!strcmp(t, "allow")) {
allowRulesTotal++;
} else if (!strcmp(t, "deny")) {
@@ -366,6 +427,11 @@ void readConfiguration(void)
if (!seLocalPorts) {
goto lowMemory;
}
+ seLocalSAddrs = (struct in_addr *) malloc(sizeof(struct in_addr) *
+ seTotal);
+ if (!seLocalSAddrs) {
+ goto lowMemory;
+ }
seFromHosts = (char **)
malloc(sizeof(char *) * seTotal);
if (!seFromHosts) {
@@ -376,6 +442,11 @@ void readConfiguration(void)
if (!seFromPorts) {
goto lowMemory;
}
+ seFromSHosts = (char **)
+ malloc(sizeof(char *) * seTotal);
+ if (!seFromSHosts) {
+ goto lowMemory;
+ }
seToHosts = (char **)
malloc(sizeof(char *) * seTotal);
if (!seToHosts) {
@@ -436,10 +507,12 @@ void readConfiguration(void)
char *bindPortS;
char *connectPortS;
unsigned short connectPort;
+ char *sourceAddress;
struct in_addr iaddr;
struct sockaddr_in saddr;
struct servent *service;
int j;
+
if (!getConfLine(in, line, sizeof(line), &lnum)) {
break;
}
@@ -527,6 +600,82 @@ void readConfiguration(void)
strcpy(pidLogFileName, nt);
} else if (!strcmp(bindAddress, "logcommon")) {
logFormatCommon = 1;
+/* kus@suse.de at 24.08.1999 */
+#ifdef SYSLOG
+ } else if (!strcmp(bindAddress, "syslog")) {
+ char dummy[100]="";
+ char *param1 = strtok(0, " \t\r\n");
+ char *param2 = strtok(0, " \t\r\n");
+ int level = -1;
+ int facility = -1;
+/*
+ If we don't got a param after the syslog statment in the conf-file
+ we set the Facility and the Level to default
+*/
+ if (!param1) {
+ syslogFacility = malloc(strlen(syslogFacility_default) + 1);
+ if (!syslogFacility) {
+ goto lowMemory;
+ }
+ syslogLevel = malloc(strlen(syslogLevel_default) + 1);
+ if (!syslogLevel) {
+ goto lowMemory;
+ }
+ strcpy(syslogFacility,syslogFacility_default);
+ strcpy(syslogLevel,syslogLevel_default);
+ } else {
+
+ facility = decode(param1, facilitynames);
+ if (facility >= 0) {
+ syslogFacility = malloc(strlen(param1) + 1);
+ if (!syslogFacility) {
+ goto lowMemory;
+ }
+ strcpy(syslogFacility,param1);
+ } else {
+ // log that param 1 isn't vaild
+ syslogFacility = malloc(strlen(syslogFacility_default) + 1);
+ if (!syslogFacility) {
+ goto lowMemory;
+ }
+ strcpy(syslogFacility,syslogFacility_default);
+ }
+ if (param2) {
+ level = decode(param2, prioritynames);
+ if (level >=0) {
+ syslogLevel = malloc(strlen(param2) + 1);
+ if (!syslogLevel) {
+ goto lowMemory;
+ }
+ strcpy(syslogLevel,param2);
+ } else {
+ // log that param 2 isn't vaild
+ syslogLevel = malloc(strlen(syslogLevel_default) + 1);
+ if (!syslogLevel) {
+ goto lowMemory;
+ }
+ strcpy(syslogLevel,syslogLevel_default);
+ }
+ } else {
+ /* set level to default */
+ syslogLevel = malloc(strlen(syslogLevel_default) + 1);
+ if (!syslogLevel) {
+ goto lowMemory;
+ }
+ strcpy(syslogLevel,syslogLevel_default);
+ }
+ }
+
+ logFormatCommon = 2;
+ syslogpriority = decode(syslogLevel, prioritynames);
+ strcat(dummy,"Start with Facility: ");
+ strcat(dummy,syslogFacility);
+ strcat(dummy," Priority: ");
+ strcat(dummy,syslogLevel);
+ simplelog(dummy);
+ continue;
+#endif
+/* End kus@suse.de at 24.08.1999 */
} else {
/* A regular forwarding rule. */
bindPortS = strtok(0, " \t\r\n");
@@ -569,6 +718,8 @@ void readConfiguration(void)
"or out of range on line %d.\n", lnum);
continue;
}
+ sourceAddress = strtok(0, " \t\r\n");
+
/* Turn all of this stuff into reasonable addresses */
if (!getAddress(bindAddress, &iaddr)) {
fprintf(stderr, "rinetd: host %s could not be "
@@ -583,12 +734,12 @@ void readConfiguration(void)
"server socket!\n");
seFds[i] = -1;
continue;
- }
+ }
#ifndef WIN32
if (seFds[i] > maxfd) {
maxfd = seFds[i];
}
-#endif
+#endif
saddr.sin_family = AF_INET;
memcpy(&saddr.sin_addr, &iaddr, sizeof(iaddr));
saddr.sin_port = htons(bindPort);
@@ -614,8 +765,8 @@ void readConfiguration(void)
closesocket(seFds[i]);
seFds[i] = INVALID_SOCKET;
continue;
- }
- ioctlsocket(seFds[i], FIONBIO, &j);
+ }
+ ioctlsocket(seFds[i], FIONBIO, &j);
if (!getAddress(connectAddress, &iaddr)) {
/* Warn -- don't exit. */
fprintf(stderr, "rinetd: host %s could not be "
@@ -627,6 +778,27 @@ void readConfiguration(void)
}
seLocalAddrs[i] = iaddr;
seLocalPorts[i] = htons(connectPort);
+ if (sourceAddress) {
+ if (!getAddress(sourceAddress, &iaddr)) {
+ /* Warn -- don't exit. */
+ fprintf(stderr, "rinetd: host %s could "
+ "not be resolved on line %d.\n",
+ sourceAddress, lnum);
+ closesocket(seFds[i]);
+ seFds[i] = INVALID_SOCKET;
+ continue;
+ }
+ seLocalSAddrs[i] = iaddr;
+ seFromSHosts[i] =
+ malloc(strlen(sourceAddress) + 1);
+ if (!seFromSHosts[i]) {
+ goto lowMemory;
+ }
+ strcpy(seFromSHosts[i], sourceAddress);
+ } else {
+ seLocalSAddrs[i].s_addr = 0;
+ seFromSHosts[i] = NULL;
+ }
seFromHosts[i] = malloc(strlen(bindAddress) + 1);
if (!seFromHosts[i]) {
goto lowMemory;
@@ -646,18 +818,22 @@ void readConfiguration(void)
}
}
}
- /* Open the log file */
- if (logFile) {
- fclose(logFile);
- logFile = 0;
- }
- if (logFileName) {
- logFile = fopen(logFileName, "a");
- if (!logFile) {
- fprintf(stderr, "rinetd: could not open %s to append.\n",
- logFileName);
- }
- }
+ /* Open the log file */
+/* kus@suse.de at 25.08.1999 */
+ if (logFormatCommon != 2) {
+ if (logFile) {
+ fclose(logFile);
+ logFile = 0;
+ }
+ if (logFileName) {
+ logFile = fopen(logFileName, "a");
+ if (!logFile) {
+ fprintf(stderr, "rinetd: could not open %s to append.\n",
+ logFileName);
+ }
+ }
+ }
+/* End kus@suse.de at 25.08.1999 */
return;
lowMemory:
fprintf(stderr, "rinetd: not enough memory to start rinetd.\n");
@@ -955,7 +1131,7 @@ void handleCloseFromLocal(int i)
loClosed[i] = 1;
if (!reClosed[i]) {
#ifndef LINUX
-#ifndef WIN32
+#ifndef WIN32
/* Now set up the remote end for a polite closing */
/* Request a low-water mark equal to the entire
@@ -963,7 +1139,7 @@ void handleCloseFromLocal(int i)
tells us for sure that we can close the socket. */
arg = 1024;
setsockopt(reFds[i], SOL_SOCKET, SO_SNDLOWAT,
- &arg, sizeof(arg));
+ &arg, sizeof(arg));
#endif /* WIN32 */
#endif /* LINUX */
coLog[i] = logLocalClosedFirst;
@@ -980,7 +1156,7 @@ void handleCloseFromRemote(int i)
closesocket(reFds[i]);
reClosed[i] = 1;
if (!loClosed[i]) {
-#ifndef LINUX
+#ifndef LINUX
#ifndef WIN32
/* Now set up the local end for a polite closing */
@@ -989,7 +1165,7 @@ void handleCloseFromRemote(int i)
tells us for sure that we can close the socket. */
arg = 1024;
setsockopt(loFds[i], SOL_SOCKET, SO_SNDLOWAT,
- &arg, sizeof(arg));
+ &arg, sizeof(arg));
#endif /* WIN32 */
#endif /* LINUX */
loClosed[i] = 0;
@@ -1016,17 +1192,17 @@ void handleAccept(int i)
log(-1, i, logAcceptFailed);
return;
}
-#ifndef WIN32
+#ifndef WIN32
if (nfd > maxfd) {
maxfd = nfd;
}
-#endif /* WIN32 */
+#endif /* WIN32 */
j = 1;
- ioctlsocket(nfd, FIONBIO, &j);
+ ioctlsocket(nfd, FIONBIO, &j);
j = 0;
-#ifndef WIN32
+#ifndef WIN32
setsockopt(nfd, SOL_SOCKET, SO_LINGER, &j, sizeof(j));
-#endif
+#endif
for (j = 0; (j < coTotal); j++) {
if (coClosed[j]) {
index = j;
@@ -1190,6 +1366,9 @@ void handleAccept(int i)
for (j = 0; (j < globalDenyRules); j++) {
if (match(addressText, denyRules[j])) {
refuse(index, logDenied);
+/* kus@suse.de at 25.08.1999 */
+ return;
+/* End kus@suse.de at 25.08.1999 */
}
}
}
@@ -1217,6 +1396,9 @@ void handleAccept(int i)
if (match(addressText,
denyRules[seDenyRules[i] + j])) {
refuse(index, logDenied);
+/* kus@suse.de at 25.08.1999 */
+ return;
+/* End kus@suse.de at 25.08.1999 */
}
}
}
@@ -1224,6 +1406,7 @@ void handleAccept(int i)
This, too, is nonblocking. Why wait
for anything when you don't have to? */
openLocalFd(i, index);
+ log(i, coSe[i], logStarted);
return;
shortage:
fprintf(stderr, "rinetd: not enough memory to "
@@ -1245,15 +1428,15 @@ void openLocalFd(int se, int i)
log(i, coSe[i], logLocalSocketFailed);
return;
}
-#ifndef WIN32
+#ifndef WIN32
if (loFds[i] > maxfd) {
maxfd = loFds[i];
}
-#endif /* WIN32 */
+#endif /* WIN32 */
/* Bind the local socket */
saddr.sin_family = AF_INET;
saddr.sin_port = INADDR_ANY;
- saddr.sin_addr.s_addr = 0;
+ memcpy(&saddr.sin_addr, &seLocalSAddrs[se], sizeof(struct in_addr));
if (bind(loFds[i], (struct sockaddr *) &saddr, sizeof(saddr)) == SOCKET_ERROR) {
closesocket(loFds[i]);
closesocket(reFds[i]);
@@ -1267,7 +1450,7 @@ void openLocalFd(int se, int i)
saddr.sin_family = AF_INET;
memcpy(&saddr.sin_addr, &seLocalAddrs[se], sizeof(struct in_addr));
saddr.sin_port = seLocalPorts[se];
-#ifndef WIN32
+#ifndef WIN32
#ifdef LINUX
j = 0;
setsockopt(loFds[i], SOL_SOCKET, SO_LINGER, &j, sizeof(j));
@@ -1275,14 +1458,14 @@ void openLocalFd(int se, int i)
j = 1024;
setsockopt(loFds[i], SOL_SOCKET, SO_SNDBUF, &j, sizeof(j));
#endif /* LINUX */
-#endif /* WIN32 */
- j = 1;
- ioctlsocket(loFds[i], FIONBIO, &j);
+#endif /* WIN32 */
+ j = 1;
+ ioctlsocket(loFds[i], FIONBIO, &j);
if (connect(loFds[i], (struct sockaddr *)&saddr,
sizeof(struct sockaddr_in)) == INVALID_SOCKET)
{
- if ((GetLastError() != WSAEINPROGRESS) &&
- (GetLastError() != WSAEWOULDBLOCK))
+ if ((GetLastError() != WSAEINPROGRESS) &&
+ (GetLastError() != WSAEWOULDBLOCK))
{
PERROR("rinetd: connect");
closesocket(loFds[i]);
@@ -1323,11 +1506,14 @@ int getAddress(char *host, struct in_add
return 1;
}
}
-
+
#ifndef WIN32
void plumber(int s)
{
/* Just reinstall */
+#ifdef SYSLOG
+ simplelog("SIGPIPE");
+#endif
signal(SIGPIPE, plumber);
}
@@ -1338,7 +1524,7 @@ void hup(int s)
/* And reinstall the signal handler */
signal(SIGHUP, hup);
}
-#endif /* WIN32 */
+#endif /* WIN32 */
int safeRealloc(void **data, int oldsize, int newsize)
{
@@ -1380,6 +1566,18 @@ void RegisterPID(void)
unsigned char nullAddress[4] = { 0, 0, 0, 0 };
struct tm *get_gmtoff(int *tz);
+/* Funktion for some extra logging info
+ kus@suse.de at 25.08.1999
+*/
+
+void simplelog(char *message)
+{
+ char *facility = syslogFacility?syslogFacility:syslogFacility_default;
+ openlog("",LOG_PID,decode(facility, facilitynames));
+ syslog(syslogpriority,"%s\n",message);
+ closelog();
+}
+/* kus@suse.de at 25.08.1999 */
void log(int i, int coSe, int result)
{
@@ -1412,7 +1610,7 @@ void log(int i, int coSe, int result)
bytesInput = 0;
}
if (logFile) {
- if (logFormatCommon) {
+ if (logFormatCommon == 1) {
/* Fake a common log format log file in a way that
most web analyzers can do something interesting with.
We lie and say the protocol is HTTP because we don't
@@ -1425,9 +1623,14 @@ void log(int i, int coSe, int result)
after several placeholders meant to fill the
positions frequently occupied by user agent,
referrer, and server name information. */
- fprintf(logFile, "%d.%d.%d.%d - - "
+ fprintf(logFile, seFromSHosts[coSe] ?
+ "%d.%d.%d.%d - - "
+ "[%s %c%.2d%.2d] "
+ "\"GET /rinetd-services/%s[%s]/%d/%s/%d/%s HTTP/1.0\" "
+ "200 %d - - - %d\n" :
+ "%d.%d.%d.%d - - "
"[%s %c%.2d%.2d] "
- "\"GET /rinetd-services/%s/%d/%s/%d/%s HTTP/1.0\" "
+ "\"GET /rinetd-services/%s%.0s/%d/%s/%d/%s HTTP/1.0\" "
"200 %d - - - %d\n",
reAddress[0],
reAddress[1],
@@ -1437,7 +1640,8 @@ void log(int i, int coSe, int result)
sign,
timz / 60,
timz % 60,
- seFromHosts[coSe], seFromPorts[coSe],
+ seFromHosts[coSe], seFromSHosts[coSe],
+ seFromPorts[coSe],
seToHosts[coSe], seToPorts[coSe],
logMessages[result],
bytesOutput,
@@ -1445,19 +1649,39 @@ void log(int i, int coSe, int result)
} else {
/* Write an rinetd-specific log entry with a
less goofy format. */
- fprintf(logFile, "%s\t%d.%d.%d.%d\t%s\t%d\t%s\t%d\t%d"
- "\t%d\t%s\n",
- tstr,
+ fprintf(logFile, seFromSHosts[coSe] ?
+ "%s\t%d.%d.%d.%d\t%s[%s]\t%d\t%s\t%d\t%d"
+ "\t%d\t%s\n" :
+ "%s\t%d.%d.%d.%d\t%s%.0s\t%d\t%s\t%d\t%d"
+ "\t%d\t%s\n",
+ tstr,
reAddress[0],
reAddress[1],
reAddress[2],
reAddress[3],
- seFromHosts[coSe], seFromPorts[coSe],
+ seFromHosts[coSe], seFromSHosts[coSe],
+ seFromPorts[coSe],
seToHosts[coSe], seToPorts[coSe],
bytesInput,
bytesOutput,
logMessages[result]);
}
+/* kus@suse.de at 25.08.1999 */
+#ifdef SYSLOG
+ } else if (logFormatCommon == 2) {
+ /* kus@suse.de at 24.08.1999 */
+ syslog(syslogpriority,"%d.%d.%d.%d %s:%d %s:%d in:%d out:%d %s",
+ reAddress[0],
+ reAddress[1],
+ reAddress[2],
+ reAddress[3],
+ seFromHosts[coSe], seFromPorts[coSe],
+ seToHosts[coSe], seToPorts[coSe],
+ bytesInput,
+ bytesOutput,
+ logMessages[result]);
+#endif
+/* End kus@suse.de at 25.08.1999 */
}
}
@@ -1508,7 +1732,7 @@ int readArgs (int argc,
default:
exit (1);
}
- }
+ }
return 0;
}
@@ -1557,6 +1781,9 @@ void refuse(int index, int logCode)
void term(int s)
{
/* Obey the request, but first flush the log */
+#ifdef SYSLOG
+ simplelog("TERM");
+#endif
if (logFile) {
fclose(logFile);
}

2
debian/patches/series vendored Normal file
View File

@ -0,0 +1,2 @@
rinetd-doc.patch
rinetd-syslog.patch

1
debian/source/format vendored Normal file
View File

@ -0,0 +1 @@
3.0 (quilt)