summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2007-07-23 12:16:31 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2007-07-23 12:16:31 +0000
commit0d9264f88145887b75bcf3df71bd1185b8c50607 (patch)
tree1e236de1895fbac45ed13ad0856dc9fe517d94ce
parentc1592571e4cda302cdc90843cbf7c467e2802e61 (diff)
downloadrsyslog-0d9264f88145887b75bcf3df71bd1185b8c50607.tar.gz
rsyslog-0d9264f88145887b75bcf3df71bd1185b8c50607.tar.xz
rsyslog-0d9264f88145887b75bcf3df71bd1185b8c50607.zip
rsyslogd now checks on startup if it is capable to performa any work at
all. If it cant, it complains and terminates thanks to Michel Samia for providing the patch!
-rw-r--r--ChangeLog3
-rw-r--r--syslogd.c31
2 files changed, 33 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1295127d..4b60298b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
---------------------------------------------------------------------------
Version 1.17.3 (rgerhards), 2007-07-2?
+- rsyslogd now checks on startup if it is capable to performa any work
+ at all. If it cant, it complains and terminates
+ thanks to Michel Samia for providing the patch!
---------------------------------------------------------------------------
Version 1.17.2 (rgerhards), 2007-07-23
- made the port part of the -r option optional. Needed for backward
diff --git a/syslogd.c b/syslogd.c
index d85333ff..e8fde594 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -1608,7 +1608,7 @@ void getCurrTime(struct syslogTime *t)
static int usage(void)
{
fprintf(stderr, "usage: rsyslogd [-46Adhvw] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
- " [-s domainlist] [-r[port]] [-tport[,max-sessions]] [-f conffile] [-x]\n");
+ " [-s domainlist] [-r[port]] [-tport[,max-sessions]] [-f conffile] [-i pidfile] [-x]\n");
exit(1); /* "good" exit - done to terminate usage() */
}
@@ -6121,6 +6121,33 @@ static void mainloop(void)
}
}
+/* If user is not root, prints warnings or even exits
+ * TODO: check all dynafiles for write permission */
+static void checkPermissions()
+{
+ /* we are not root */
+ if (geteuid() != 0)
+ {
+ fputs("WARNING: Local messages will not be logged! If you want to log them, run rsyslog as root.\n",stderr);
+
+ /* udp enabled and port number less than or equal to 1024 */
+ if ( AcceptRemote && (atoi(LogPort) <= 1024) )
+ fprintf(stderr, "WARNING: Will not listen on UDP port %s. Use port number higher than 1024 or run rsyslog as root!\n", LogPort);
+
+ /* tcp enabled and port number less or equal to 1024 */
+ if( bEnableTCP && (atoi(TCPLstnPort) <= 1024) )
+ fprintf(stderr, "WARNING: Will not listen on TCP port %s. Use port number higher than 1024 or run rsyslog as root!\n", TCPLstnPort);
+
+ /* Neither explicit high UDP port nor explicit high TCP port.
+ * It is useless to run anymore */
+ if( !(AcceptRemote && (atoi(LogPort) > 1024)) && !( bEnableTCP && (atoi(TCPLstnPort) > 1024)) )
+ {
+ fprintf(stderr, "ERROR: Nothing to log, no reason to run. Please run rsyslog as root.\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
int main(int argc, char **argv)
{ register int i;
register char *p;
@@ -6275,6 +6302,8 @@ int main(int argc, char **argv)
if ((argc -= optind))
usage();
+ checkPermissions();
+
#ifndef TESTING
if ( !(Debug || NoFork) )
{