svn commit: r326574 - head/usr.bin/logger
Cy Schubert
Cy.Schubert at komquats.com
Wed Dec 6 04:30:12 UTC 2017
In message <201712051955.vB5Jtrwp079953 at repo.freebsd.org>, Gleb Smirnoff
writes
:
> Author: glebius
> Date: Tue Dec 5 19:55:53 2017
> New Revision: 326574
> URL: https://svnweb.freebsd.org/changeset/base/326574
>
> Log:
> Generate fully RFC3164 compliant messages, with timestamp and hostname.
> Allow to set hostname to any string with -H.
>
> MFC after: 2 months
>
> Modified:
> head/usr.bin/logger/logger.1
> head/usr.bin/logger/logger.c
>
> Modified: head/usr.bin/logger/logger.1
> =============================================================================
> =
> --- head/usr.bin/logger/logger.1 Tue Dec 5 19:54:55 2017 (r32657
> 3)
> +++ head/usr.bin/logger/logger.1 Tue Dec 5 19:55:53 2017 (r32657
> 4)
> @@ -28,7 +28,7 @@
> .\" @(#)logger.1 8.1 (Berkeley) 6/6/93
> .\" $FreeBSD$
> .\"
> -.Dd December 23, 2016
> +.Dd December 5, 2017
> .Dt LOGGER 1
> .Os
> .Sh NAME
> @@ -38,6 +38,7 @@
> .Nm
> .Op Fl 46Ais
> .Op Fl f Ar file
> +.Op Fl H Ar hostname
> .Op Fl h Ar host
> .Op Fl P Ar port
> .Op Fl p Ar pri
> @@ -77,6 +78,11 @@ Log the message to standard error, as well as the syst
> .It Fl f Ar file
> Read the contents of the specified file into syslog.
> This option is ignored when a message is also specified.
> +.It Fl H Ar hostname
> +Set the hostname in the header of the message to specified value.
> +If not specified, host part of
> +.Xr gethostname 3
> +will be used.
> .It Fl h Ar host
> Send the message to the remote system
> .Ar host
>
> Modified: head/usr.bin/logger/logger.c
> =============================================================================
> =
> --- head/usr.bin/logger/logger.c Tue Dec 5 19:54:55 2017 (r32657
> 3)
> +++ head/usr.bin/logger/logger.c Tue Dec 5 19:55:53 2017 (r32657
> 4)
> @@ -44,7 +44,7 @@ static char sccsid[] = "@(#)logger.c 8.1 (Berkeley)
> 6/
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> -#include <sys/types.h>
> +#include <sys/param.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
>
> @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> +#include <time.h>
> #include <unistd.h>
>
> #define SYSLOG_NAMES
> @@ -71,8 +72,8 @@ static int decode(char *, const CODE *);
> static int pencode(char *);
> static ssize_t socksetup(const char *, const char *, const char *,
> struct socks **);
> -static void logmessage(int, const char *, struct socks *, ssize_t,
> - const char *);
> +static void logmessage(int, const char *, const char *, const char *,
> + struct socks *, ssize_t, const char *);
> static void usage(void);
>
> #ifdef INET6
> @@ -93,19 +94,22 @@ main(int argc, char *argv[])
> {
> struct socks *socks;
> ssize_t nsock;
> + time_t now;
> int ch, logflags, pri;
> - char *tag, *host, buf[1024];
> + char *tag, *host, buf[1024], *timestamp, tbuf[26],
> + *hostname, hbuf[MAXHOSTNAMELEN];
> const char *svcname, *src;
>
> tag = NULL;
> host = NULL;
> + hostname = NULL;
> svcname = "syslog";
> src = NULL;
> socks = NULL;
> pri = LOG_USER | LOG_NOTICE;
> logflags = 0;
> unsetenv("TZ");
> - while ((ch = getopt(argc, argv, "46Af:h:iP:p:S:st:")) != -1)
> + while ((ch = getopt(argc, argv, "46Af:H:h:iP:p:S:st:")) != -1)
> switch((char)ch) {
> case '4':
> family = PF_INET;
> @@ -123,6 +127,9 @@ main(int argc, char *argv[])
> err(1, "%s", optarg);
> setvbuf(stdin, 0, _IONBF, 0);
> break;
> + case 'H': /* hostname to set in message header */
> + hostname = optarg;
> + break;
> case 'h': /* hostname to deliver to */
> host = optarg;
> break;
> @@ -168,6 +175,17 @@ main(int argc, char *argv[])
> openlog(tag, logflags, 0);
> (void) fclose(stdout);
>
> + (void )time(&now);
> + (void )ctime_r(&now, tbuf);
> + tbuf[19] = '\0';
> + timestamp = tbuf + 4;
> +
> + if (hostname == NULL) {
> + hostname = hbuf;
> + (void )gethostname(hbuf, MAXHOSTNAMELEN);
> + *strchr(hostname, '.') = '\0';
Hi Gleb,
I'm getting a segfault here.
[New LWP 101396]
Core was generated by `logger -p daemon.notice -t local-dhclient(lagg0):4629
2 dhclient-script for inter'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000000000402152 in main (argc=<optimized out>, argv=<optimized out>)
at /opt/src/svn-current/usr.bin/logger/logger.c:186
186 *strchr(hostname, '.') = '\0';
(gdb) bt
#0 0x0000000000402152 in main (argc=<optimized out>, argv=<optimized out>)
at /opt/src/svn-current/usr.bin/logger/logger.c:186
(gdb)
> + }
> +
> /* log input line if appropriate */
> if (argc > 0) {
> char *p, *endp;
> @@ -176,11 +194,13 @@ main(int argc, char *argv[])
--
Cheers,
Cy Schubert <Cy.Schubert at cschubert.com>
FreeBSD UNIX: <cy at FreeBSD.org> Web: http://www.FreeBSD.org
The need of the many outweighs the greed of the few.
More information about the svn-src-all
mailing list