Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Oct 2015 13:55:12 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r289879 - head/usr.sbin/newsyslog
Message-ID:  <201510241355.t9ODtCnp039885@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Sat Oct 24 13:55:12 2015
New Revision: 289879
URL: https://svnweb.freebsd.org/changeset/base/289879

Log:
  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

Modified:
  head/usr.sbin/newsyslog/newsyslog.c
  head/usr.sbin/newsyslog/newsyslog.conf.5

Modified: head/usr.sbin/newsyslog/newsyslog.c
==============================================================================
--- head/usr.sbin/newsyslog/newsyslog.c	Sat Oct 24 13:47:03 2015	(r289878)
+++ head/usr.sbin/newsyslog/newsyslog.c	Sat Oct 24 13:55:12 2015	(r289879)
@@ -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 @@ no_trimat:
 		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 @@ no_trimat:
 
 		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 st
 			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);
+}

Modified: head/usr.sbin/newsyslog/newsyslog.conf.5
==============================================================================
--- head/usr.sbin/newsyslog/newsyslog.conf.5	Sat Oct 24 13:47:03 2015	(r289878)
+++ head/usr.sbin/newsyslog/newsyslog.conf.5	Sat Oct 24 13:55:12 2015	(r289879)
@@ -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
 .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
 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510241355.t9ODtCnp039885>