[RFC] Syslogd service patch
Tom Rhodes
trhodes at FreeBSD.org
Wed Mar 29 01:56:32 UTC 2006
On Tue, 28 Mar 2006 09:03:32 +0200
Rink Springer <rink at rink.nu> wrote:
> Hi everyone,
>
> I've devised a patch for syslogd, which allows you to specify a service
> name when logging remotely.
>
> This is all embedded in the current syntax. For logging remote under a
> different service, you can use @1.2.3.4:service [1]; for binding to a
> different service, you can use 'syslogd -b 1.2.3.4:service'. No breakage
> is introduced as the default service remains 'syslog'.
>
> The patch is at http://rink.nu/tmp/syslogd.diff, which I'd like to
> commit. Does anyone have questions or comments?
>
> [1] OpenBSD also has this functionality
diff -rubB /usr/src/usr.sbin/syslogd/syslog.conf.5 syslogd/syslog.conf.5
--- /usr/src/usr.sbin/syslogd/syslog.conf.5 Thu Aug 18 17:01:27 2005
+++ syslogd/syslog.conf.5 Sat Mar 25 17:40:56 2006
@@ -336,7 +336,9 @@
sign).
Selected messages are forwarded to the
.Xr syslogd 8
-program on the named host.
+program on the named host. host:service may be
Need a new line here, perhaps reword to avoid starting a
sentence with lower cased words.
+used to specify a host with a different service (default is
+syslog).
^^^^^^^
Add a period.
.It
A comma separated list of users.
Selected messages are written to those users
diff -rubB /usr/src/usr.sbin/syslogd/syslogd.8 syslogd/syslogd.8
--- /usr/src/usr.sbin/syslogd/syslogd.8 Wed Apr 13 05:19:41 2005
+++ syslogd/syslogd.8 Sat Mar 25 17:37:28 2006
@@ -38,7 +38,7 @@
.Nm
.Op Fl 46Acdknosuv
.Op Fl a Ar allowed_peer
-.Op Fl b Ar bind_address
+.Op Fl b Ar bind_address Oo Ar :service Oc
.Op Fl f Ar config_file
.Op Fl l Oo Ar mode : Oc Ns Ar path
.Op Fl m Ar mark_interval
@@ -127,7 +127,8 @@
will be substituted by 128.
.It Xo
.Sm off
-.Ar domainname Op : Ar service
+.Ar domainname
+.Op : Ar service
.Sm on
.Xc
Accept datagrams where the reverse address lookup yields
@@ -153,10 +154,11 @@
options are ignored if the
.Fl s
option is also specified.
-.It Fl b Ar bind_address
+.It Fl b Ar bind_address Op :service
Specify one specific IP address or hostname to bind to.
If a hostname is specified,
the IPv4 or IPv6 address which corresponds to it is used.
+An optional service can be supplied as well.
.It Fl c
Disable the compression of repeated instances of the same line
into a single line of the form
diff -rubB /usr/src/usr.sbin/syslogd/syslogd.c syslogd/syslogd.c
--- /usr/src/usr.sbin/syslogd/syslogd.c Sun Jan 15 18:50:37 2006
+++ syslogd/syslogd.c Sat Mar 25 17:28:49 2006
@@ -1715,7 +1715,7 @@
struct addrinfo hints, *res;
int error, i, pri, syncfile;
const char *p, *q;
- char *bp;
+ char *bp, *cp;
char buf[MAXLINE], ebuf[100];
dprintf("cfline(\"%s\", f, \"%s\", \"%s\")\n", line, prog, host);
@@ -1869,8 +1869,13 @@
switch (*p) {
case '@':
+ cp = strchr (p, ':');
+ if (cp != NULL)
+ *cp++ = 0;
?? *cp++ = 0?
Perhaps I'm just lost.
+
(void)strlcpy(f->f_un.f_forw.f_hname, ++p,
sizeof(f->f_un.f_forw.f_hname));
+
Is this new line on purpose?
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_DGRAM;
@@ -1874,7 +1879,8 @@
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_DGRAM;
- error = getaddrinfo(f->f_un.f_forw.f_hname, "syslog", &hints,
+ error = getaddrinfo(f->f_un.f_forw.f_hname,
+ (cp == NULL) ? "syslog" : cp, &hints,
&res);
if (error) {
logerror(gai_strerror(error));
@@ -2530,12 +2536,29 @@
{
struct addrinfo hints, *res, *r;
int error, maxs, *s, *socks;
+ char* cp, *tmpname;
+
+ if (bindhostname != NULL) {
+ tmpname = strdup (bindhostname);
+ if (tmpname == NULL) {
+ logerror(strerror(errno));
+ errno = 0;
+ die(0);
+ }
+
+ cp = strchr(tmpname, ':');
+ if (cp != NULL)
+ *cp++ = 0;
+ }
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = af;
hints.ai_socktype = SOCK_DGRAM;
- error = getaddrinfo(bindhostname, "syslog", &hints, &res);
+ error = getaddrinfo(tmpname, (cp == NULL) ? "syslog" : cp,
+ &hints, &res);
+ if (tmpname != NULL)
+ free (tmpname);
if (error) {
logerror(gai_strerror(error));
errno = 0;
--
Tom Rhodes
More information about the freebsd-arch
mailing list