replace logger with NetBSD version

closes #265

Change-Id: I31cb8e0ae57cc2c18a6aab1d2749818e1656c294
This commit is contained in:
Christopher Simons 2018-10-26 21:12:41 -04:00 committed by Lionel Sambuc
parent 2ffe8daa0e
commit 03704f431e
8 changed files with 330 additions and 292 deletions

View File

@ -13,7 +13,7 @@ SUBDIR= at backup \
gcov-pull \
ifdef \
intr isoread \
loadkeys loadramdisk logger look lp \
loadkeys loadramdisk look lp \
lpd lspci mail MAKEDEV \
minix-service mount mt netconf \
prep printroot \

View File

@ -1,3 +0,0 @@
PROG= logger
.include <bsd.prog.mk>

View File

@ -1,100 +0,0 @@
.\" Copyright (c) 1983, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" from: @(#)logger.1 8.1 (Berkeley) 6/6/93
.\" Modified for Minix porting by G. Falzoni <gfalzoni@inwind.it>
.\"
.\" Local macros
.de Xr
.BR \\$1 (\\$2)\\$3
..
.de LB
.TP \\$1
\\fB\\$2\\fR
\\$3
..
.de LI
.TP \\$1
\\fI\\$2\\fR
\\$3
..
.de LR
.TP \\$1
\\fR\\$2\\fR
\\$3
..
.\" end local macros
.DD June 6, 1993
.TH LOGGER 1 "Jan. 18, 2000"
.\" Os BSD 4.3
.SH NAME
logger \- make entries in the system log
.SH SYNOPSIS
logger
.RB [ \-i ]
.RB [ \-f " " file ]
.RB [ \-p " " pri ]
.RB [ \-t " " tag ]
.B message ...
.SH DESCRIPTION
Logger provides a shell command interface to the
.Xr syslog 3
system log module.
.PP
The following options are available to control message formatting:
.PP
.LB 9 -i "Log the process id of the logger process with each line."
.\" LB 9 -s "Log the message to standard error, as well as the system log."
.LB 9 "-f file" "Log the specified file."
.LB 9 "-p pri" "Enter the message with the specified priority.
The priority may be specified numerically or as a `facility.level'
pair. For example, `\-p local3.info' logs the message(s) as
.BR info rmational
level in the
.B local3
facility. The default is `user.notice'.
.LB 9 "-t tag" "Mark every line in the log with the specified
.BR tag .
.LB 9 message "Write the message to log. If not specified, and the"
.B \-f
flag is not provided, standard input is logged.
.PP
The logger utility exits 0 on success, and >0 if an error occurs.
.SH EXAMPLES
.PP
logger System rebooted
.PP
logger \-p local0.notice \-t HOSTIDM \-f /dev/idmc
.SH SEE ALSO
.Xr syslog 3 ,
.Xr syslogd 8 .
.SH STANDARDS
The logger command is expected to be IEEE Std1003.2 (`POSIX') compatible.

View File

@ -1,187 +0,0 @@
/* Copyright (c) 1983, 1988, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* #ifndef lint
* char copyright[] =
* "@(#) Copyright (c) 1983 Regents of the University of California.\n\
* All rights reserved.\n";
* #endif
*
* #ifndef lint
* static char sccsid[] = "@(#)logger.c 6.8 (Berkeley) 6/29/88";
* #endif
*
* Porting to Minix by G. Falzoni <gfalzoni@inwind.it>
*/
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
/*
** LOGGER -- read and log utility
**
** This program reads from an input and arranges to write the
** result on the system log, along with a useful tag.
*/
#define SYSLOG_NAMES
#include <syslog.h>
/*
** Name: void bailout(char *msg, char *arg);
** Function: Handles error exit.
*/
void bailout(const char *msg, const char *arg)
{
fprintf(stderr, "logger: %s %s\n", msg, arg);
exit(EXIT_FAILURE);
}
/*
** Name: int decode(char *name, struct code * codetab);
** Function: Decodes a name to the equivalent priority/facility.
*/
int decode(char *name, const struct _code * codetab)
{
const struct _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);
}
/*
** Name: int pencode(char *s);
** Function: Decode a symbolic name (facility/priority)
** to a numeric value.
*/
int pencode(char *s)
{
char *save;
int fac, lev;
for (save = s; *s && *s != '.'; ++s);
if (*s) {
*s = '\0';
fac = decode(save, facilitynames);
if (fac < 0) bailout("unknown facility name:", save);
*s++ = '.';
} else {
fac = 0;
s = save;
}
lev = decode(s, prioritynames);
if (lev < 0) bailout("unknown priority name:", save);
return((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
}
/*
** Name: int main(int argc, char **argv);
** Function: Main entry for logger.
*/
int main(int argc, char **argv)
{
int pri = LOG_NOTICE;
int ch, logflags = 0;
char *tag, buf[200];
static const char usage[] =
"[-i] [-f file] [-p pri] [-t tag] [ message ... ]";
tag = NULL;
while ((ch = getopt(argc, argv, "f:ip:t:")) != EOF) {
switch ((char) ch) {
case 'f': /* file to log */
if (freopen(optarg, "r", stdin) == NULL) {
bailout(strerror(errno), optarg);
}
break;
case 'i': /* log process id also */
logflags |= LOG_PID;
break;
case 'p': /* priority */
pri = pencode(optarg);
break;
case 't': /* tag */
tag = optarg;
break;
case '?':
default: bailout(usage, ""); break;
}
}
argc -= optind;
argv += optind;
/* Setup for logging */
openlog(tag ? tag : getlogin(), logflags, 0);
fclose(stdout);
if (argc > 0) { /* Log input line if appropriate */
char *p, *endp;
int len;
for (p = buf, endp = buf + sizeof(buf) - 1;;) {
len = strlen(*argv);
if (p + len < endp && p > buf) {
*--p = '\0';
syslog(pri, "%s", buf);
p = buf;
}
if (len > sizeof(buf) - 1) {
syslog(pri, "%s", *argv++);
if (!--argc) break;
} else {
memcpy(p, *argv++, len);
p += len;
if (!--argc) break;
*p++ = ' ';
*--p = '\0';
}
}
if (p != buf) {
*p = '\0';
syslog(pri, "%s", buf);
}
} else /* Main loop */
while (fgets(buf, sizeof(buf), stdin) != NULL) syslog(pri, "%s", buf);
return EXIT_SUCCESS;
}
/** logger.c **/

View File

@ -15,7 +15,7 @@ SUBDIR= asa \
getopt \
head hexdump id indent infocmp ipcrm ipcs join jot \
lam last ldd leave \
locale lock login logname lorder m4 \
locale lock logger login logname lorder m4 \
machine make man menuc mesg \
mkcsmapper mkdep mkesdb mkfifo mklocale mkstr mktemp \
msgc \

8
usr.bin/logger/Makefile Normal file
View File

@ -0,0 +1,8 @@
# $NetBSD: Makefile,v 1.4 2007/05/28 12:06:28 tls Exp $
# @(#)Makefile 8.1 (Berkeley) 6/6/93
USE_FORT?= yes # network client
PROG= logger
.include <bsd.prog.mk>

117
usr.bin/logger/logger.1 Normal file
View File

@ -0,0 +1,117 @@
.\" $NetBSD: logger.1,v 1.15 2012/05/13 17:08:31 njoly Exp $
.\"
.\" Copyright (c) 1983, 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)logger.1 8.1 (Berkeley) 6/6/93
.\"
.Dd April 26, 2012
.Dt LOGGER 1
.Os
.Sh NAME
.Nm logger
.Nd make entries in the system log
.Sh SYNOPSIS
.Nm
.Op Fl cins
.Op Fl d Ar SD
.Op Fl f Ar file
.Op Fl m Ar msgid
.Op Fl p Ar pri
.Op Fl t Ar tag
.Op Ar message ...
.Sh DESCRIPTION
.Nm
provides a shell command interface to the
.Xr syslog 3
system log module.
.Pp
Options:
.Pp
.Bl -tag -width "messageXX"
.It Fl c
Log to console
.Dv ( LOG_CONS ) .
.It Fl d Ar sd
Log this in the structured data (SD) field.
.Po
.Ar sd
has to be passed as one argument and will require careful quoting when used from
the shell.
.Pc
.It Fl f Ar file
Log the specified file.
.It Fl i
Log the process id of the logger process
with each line
.Dv ( LOG_PID ) .
.It Fl m Ar msgid
The MSGID used for the message.
.It Fl n
Open log file immediately
.Dv ( LOG_NDELAY ) .
.It Fl p Ar pri
Enter the message with the specified priority.
The priority may be specified numerically or as a
.Dq facility.level
pair.
For example,
.Dq \-p local3.info
logs the message(s) as
.Ar info Ns rmational
level in the
.Ar local3
facility.
The default is
.Dq user.notice .
.It Fl s
Log the message to standard error, as well as the system log
.Dv ( LOG_PERROR ) .
.It Fl t Ar tag
Mark every line in the log with the specified
.Ar tag .
.It Ar message
Write the message to log; if not specified, and the
.Fl f
flag is not provided, standard input is logged.
.El
.Sh EXIT STATUS
.Ex -std logger
.Sh EXAMPLES
.Bd -literal -offset indent -compact
logger System rebooted
logger \-p local0.notice \-t HOSTIDM \-f /dev/idmc
.Ed
.Sh SEE ALSO
.Xr syslog 3 ,
.Xr syslogd 8
.Sh STANDARDS
The
.Nm
utility conforms to
.St -p1003.2-92 .

203
usr.bin/logger/logger.c Normal file
View File

@ -0,0 +1,203 @@
/* $NetBSD: logger.c,v 1.17 2012/04/27 06:30:48 wiz Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1983, 1993\
The Regents of the University of California. All rights reserved.");
#endif /* not lint */
#ifndef lint
#if 0
static char sccsid[] = "@(#)logger.c 8.1 (Berkeley) 6/6/93";
#endif
__RCSID("$NetBSD: logger.c,v 1.17 2012/04/27 06:30:48 wiz Exp $");
#endif /* not lint */
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <err.h>
#define SYSLOG_NAMES
#include <syslog.h>
static int decode(const char *, const CODE *);
static int pencode(char *);
__dead static void usage(void);
/*
* logger -- read and log utility
*
* Reads from an input and arranges to write the result on the system
* log.
*/
int
main(int argc, char *argv[])
{
int ch, logflags, pri;
const char *tag;
const char *sd = "-";
const char *msgid = "-";
char buf[1024];
tag = NULL;
pri = LOG_NOTICE;
logflags = 0;
while ((ch = getopt(argc, argv, "cd:f:im:np:st:")) != -1)
switch((char)ch) {
case 'c': /* log to console */
logflags |= LOG_CONS;
break;
case 'd': /* structured data field */
sd = optarg;
break;
case 'f': /* file to log */
if (freopen(optarg, "r", stdin) == NULL)
err(EXIT_FAILURE, "%s", optarg);
break;
case 'i': /* log process id also */
logflags |= LOG_PID;
break;
case 'm': /* msgid field */
msgid = optarg;
break;
case 'n': /* open log file immediately */
logflags |= LOG_NDELAY;
break;
case 'p': /* priority */
pri = pencode(optarg);
break;
case 's': /* log to standard error */
logflags |= LOG_PERROR;
break;
case 't': /* tag */
tag = optarg;
break;
case '?':
default:
usage();
}
argc -= optind;
argv += optind;
/* setup for logging */
openlog(tag != NULL ? tag : getlogin(), logflags, 0);
(void)fclose(stdout);
/* log input line if appropriate */
if (argc > 0) {
char *p, *endp;
size_t len;
for (p = buf, endp = buf + sizeof(buf) - 2; *argv != NULL;) {
len = strlen(*argv);
if (p + len > endp && p > buf) {
syslogp(pri, msgid, sd, "%s", buf);
p = buf;
}
if (len > sizeof(buf) - 1)
syslogp(pri, msgid, sd, "%s", *argv++);
else {
if (p != buf)
*p++ = ' ';
memmove(p, *argv++, len);
*(p += len) = '\0';
}
}
if (p != buf)
syslogp(pri, msgid, sd, "%s", buf);
} else /* TODO: allow syslog-protocol messages from file/stdin
* but that will require parsing the line to split
* it into three fields.
*/
while (fgets(buf, sizeof(buf), stdin) != NULL)
syslogp(pri, msgid, sd, "%s", buf);
exit(EXIT_SUCCESS);
/* NOTREACHED */
}
/*
* Decode a symbolic name to a numeric value
*/
static int
pencode(char *s)
{
char *save;
int fac, lev;
for (save = s; *s != '\0' && *s != '.'; ++s)
;
if (*s != '\0') {
*s = '\0';
fac = decode(save, facilitynames);
if (fac < 0)
errx(EXIT_FAILURE, "unknown facility name: %s", save);
*s++ = '.';
} else {
fac = 0;
s = save;
}
lev = decode(s, prioritynames);
if (lev < 0)
errx(EXIT_FAILURE, "unknown priority name: %s", s);
return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
}
static int
decode(const char *name, const CODE *codetab)
{
const CODE *c;
if (isdigit((unsigned char)*name))
return (atoi(name));
for (c = codetab; c->c_name != NULL; c++)
if (strcasecmp(name, c->c_name) == 0)
return (c->c_val);
return (-1);
}
static void
usage(void)
{
(void)fprintf(stderr,
"Usage: %s [-cins] [-d SD] [-f file] [-m msgid] "
"[-p pri] [-t tag] [message ...]\n",
getprogname());
exit(EXIT_FAILURE);
}