newsyslog.conf: allow to configure the signal using the signal name.
Submitted by: Alexandre Perrin <alex@kaworu.ch> MFC after: 1 week Relnotes: yes Differential Revision: https://reviews.freebsd.org/D3961
This commit is contained in:
parent
79d3d4c428
commit
a0408328fb
@ -280,6 +280,7 @@ static int age_old_log(const char *file);
|
||||
static void savelog(char *from, char *to);
|
||||
static void createdir(const struct conf_entry *ent, char *dirpart);
|
||||
static void createlog(const struct conf_entry *ent);
|
||||
static int parse_signal(const char *str);
|
||||
|
||||
/*
|
||||
* All the following take a parameter of 'int', but expect values in the
|
||||
@ -1338,12 +1339,13 @@ parse_file(FILE *cf, struct cflist *work_p, struct cflist *glob_p,
|
||||
if (q && *q) {
|
||||
if (*q == '/')
|
||||
working->pid_cmd_file = strdup(q);
|
||||
else if (isdigit(*q))
|
||||
else if (isalnum(*q))
|
||||
goto got_sig;
|
||||
else
|
||||
else {
|
||||
errx(1,
|
||||
"illegal pid file or signal number in config file:\n%s",
|
||||
"illegal pid file or signal in config file:\n%s",
|
||||
errline);
|
||||
}
|
||||
}
|
||||
if (eol)
|
||||
q = NULL;
|
||||
@ -1354,17 +1356,13 @@ parse_file(FILE *cf, struct cflist *work_p, struct cflist *glob_p,
|
||||
|
||||
working->sig = SIGHUP;
|
||||
if (q && *q) {
|
||||
if (isdigit(*q)) {
|
||||
got_sig:
|
||||
working->sig = atoi(q);
|
||||
} else {
|
||||
err_sig:
|
||||
got_sig:
|
||||
working->sig = parse_signal(q);
|
||||
if (working->sig < 1 || working->sig >= sys_nsig) {
|
||||
errx(1,
|
||||
"illegal signal number in config file:\n%s",
|
||||
"illegal signal in config file:\n%s",
|
||||
errline);
|
||||
}
|
||||
if (working->sig < 1 || working->sig >= NSIG)
|
||||
goto err_sig;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2662,3 +2660,28 @@ change_attrs(const char *fname, const struct conf_entry *ent)
|
||||
warn("can't chflags %s NODUMP", fname);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse a signal number or signal name. Returns the signal number parsed or -1
|
||||
* on failure.
|
||||
*/
|
||||
static int
|
||||
parse_signal(const char *str)
|
||||
{
|
||||
int sig, i;
|
||||
const char *errstr;
|
||||
|
||||
sig = strtonum(str, 1, sys_nsig - 1, &errstr);
|
||||
|
||||
if (errstr == NULL)
|
||||
return (sig);
|
||||
if (strncasecmp(str, "SIG", 3) == 0)
|
||||
str += 3;
|
||||
|
||||
for (i = 1; i < sys_nsig; i++) {
|
||||
if (strcasecmp(str, sys_signame[i]) == 0)
|
||||
return (i);
|
||||
}
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
.\" the suitability of this software for any purpose. It is
|
||||
.\" provided "as is" without express or implied warranty.
|
||||
.\"
|
||||
.Dd March 21, 2012
|
||||
.Dd October 24, 2015
|
||||
.Dt NEWSYSLOG.CONF 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -337,7 +337,7 @@ process ID or to find a group process ID if the
|
||||
.Cm U
|
||||
flag was specified.
|
||||
If this field is present, a
|
||||
.Ar signal_number
|
||||
.Ar signal
|
||||
is sent to the process ID contained in this file.
|
||||
If this field is not present and the
|
||||
.Cm N
|
||||
@ -358,14 +358,23 @@ flag, the file is treated as a path to a binary to be executed
|
||||
by the
|
||||
.Xr newsyslog 8
|
||||
after rotation instead of sending the signal out.
|
||||
.It Ar signal_number
|
||||
This optional field specifies the signal number that will be sent
|
||||
to the daemon process (or to all processes in a process group, if the
|
||||
.It Ar signal
|
||||
This optional field specifies the signal that will be sent to the daemon
|
||||
process (or to all processes in a process group, if the
|
||||
.Cm U
|
||||
flag was specified).
|
||||
If this field is not present, then a
|
||||
.Dv SIGHUP
|
||||
signal will be sent.
|
||||
Signal names
|
||||
must start with
|
||||
.Dq SIG
|
||||
and be the signal name, e.g.,
|
||||
.Dv SIGUSR1 .
|
||||
Alternatively,
|
||||
.Ar signal
|
||||
can be the signal number, e.g., 30 for
|
||||
.Dv SIGUSR1 .
|
||||
.El
|
||||
.Sh EXAMPLES
|
||||
The following is an example of the
|
||||
|
Loading…
Reference in New Issue
Block a user