Skip to content

Commit

Permalink
Merge remote-tracking branch 'freebsd/stable/10' into hardened/10-sta…
Browse files Browse the repository at this point in the history
…ble/master
  • Loading branch information
opntr-auto committed Oct 31, 2015
2 parents 1e2dd8c + 7c18e94 commit 8e7f1af
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 16 deletions.
45 changes: 34 additions & 11 deletions usr.sbin/newsyslog/newsyslog.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

/*
Expand Down Expand Up @@ -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);
}
19 changes: 14 additions & 5 deletions usr.sbin/newsyslog/newsyslog.conf.5
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 8e7f1af

Please sign in to comment.