Date: 23 Mar 2002 23:52:42 +0100 From: Dag-Erling Smorgrav <des@ofug.org> To: Mikhail Teterin <mi@aldan.algebra.com> Cc: arch@FreeBSD.org Subject: Re: review request for bin/11294 Message-ID: <xzpn0wydhhh.fsf@flood.ping.uio.no> In-Reply-To: <xzpr8mbcb1m.fsf@flood.ping.uio.no> References: <200203231928.g2NJSasb063343@aldan.algebra.com> <xzpr8mbcb1m.fsf@flood.ping.uio.no>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-=-=
Here's a patch. To log to a remote host, make /etc/loghost a symlink
to its name or IP address ('ln -fs 10.0.5.14 /etc/loghost').
DES
--
Dag-Erling Smorgrav - des@ofug.org
--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=syslog.diff
Index: lib/libc/gen/syslog.c
===================================================================
RCS file: /home/ncvs/src/lib/libc/gen/syslog.c,v
retrieving revision 1.25
diff -u -r1.25 syslog.c
--- lib/libc/gen/syslog.c 9 Mar 2002 11:38:01 -0000 1.25
+++ lib/libc/gen/syslog.c 23 Mar 2002 22:49:07 -0000
@@ -38,7 +38,7 @@
__FBSDID("$FreeBSD: src/lib/libc/gen/syslog.c,v 1.25 2002/03/09 11:38:01 dwmalone Exp $");
#include "namespace.h"
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/socket.h>
#include <sys/syslog.h>
#include <sys/uio.h>
@@ -71,6 +71,8 @@
static void disconnectlog(void); /* disconnect from syslogd */
static void connectlog(void); /* (re)connect to syslogd */
+static void connectlog_remote(const char *);
+static void connectlog_local(void);
/*
* Format of the magic cookie passed through the stdio hook
@@ -274,6 +276,7 @@
(void)_close(fd);
}
}
+
static void
disconnectlog()
{
@@ -289,8 +292,61 @@
connected = 0; /* retry connect */
}
+#define _PATH_LOGHOST "/etc/loghost"
static void
connectlog()
+{
+ char loghost[MAXHOSTNAMELEN];
+ int len;
+
+ if (LogFile != -1 && connected)
+ return;
+ if (LogFile != -1) {
+ _close(LogFile);
+ LogFile = -1;
+ }
+ connected = 0;
+ len = _readlink(_PATH_LOGHOST, loghost, sizeof loghost);
+ if (len > 0 && len < sizeof loghost) {
+ loghost[len] = '\0';
+ connectlog_remote(loghost);
+ }
+ if (!connected)
+ connectlog_local();
+}
+
+#define SYSLOG_SERVICE "syslog"
+static void
+connectlog_remote(const char *host)
+{
+ struct addrinfo hints, *res = NULL;
+
+ memset(&hints, 0, sizeof hints);
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ hints.ai_protocol = PF_UNSPEC;
+ if (getaddrinfo(host, SYSLOG_SERVICE, &hints, &res) != 0)
+ goto fail;
+ LogFile = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (LogFile == -1)
+ goto fail;
+ if (connect(LogFile, res->ai_addr, res->ai_addrlen) == -1)
+ goto fail;
+ (void)_fcntl(LogFile, F_SETFD, 1);
+ freeaddrinfo(res);
+ connected = 1;
+ return;
+ fail:
+ if (res != NULL)
+ freeaddrinfo(res);
+ if (LogFile != -1) {
+ _close(LogFile);
+ LogFile = 1;
+ }
+}
+
+static void
+connectlog_local()
{
struct sockaddr_un SyslogAddr; /* AF_UNIX address of local logger */
--=-=-=--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzpn0wydhhh.fsf>
