]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
logger: fix -i argument parsing regression
authorSami Kerola <kerolasa@iki.fi>
Fri, 20 Feb 2015 19:42:34 +0000 (19:42 +0000)
committerKarel Zak <kzak@redhat.com>
Thu, 5 Mar 2015 09:31:18 +0000 (10:31 +0100)
With earlier logger it's possible to combine the option -i with other
options, such as -s.  But currently:

$:~> logger -is
logger: failed to parse id: 's'

The changed behaviour breaks existing scripts like dhcpcd-run-hooks from
dhcpcd.

Broken-since: aab5b44405b9a6ada92e419e5a84cc0d1d4afee9
Reference: http://comments.gmane.org/gmane.linux.utilities.util-linux-ng/9683
Reported-by: Juergen Daubert <jue@jue.li>
Reviewed-by: Benno Schulenberg <bensberg@justemail.net>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
misc-utils/logger.1
misc-utils/logger.c

index a855cdf1d3e8d3e40cc8de92ac32b305f6db3870..994616e61e4d73ef94cb2845cd862ed008c6ba48 100644 (file)
@@ -58,7 +58,10 @@ syslog port defined in /etc/services, which is often 514 .
 Log the contents of the specified \fIfile\fR.
 This option cannot be combined with a command-line message.
 .TP
-.BR \-i , " \-\-id" [ = \fIid ]
+.B \-i
+Log the PID of the logger process with each line.
+.TP
+.BR "\-\-id" [ =\fIid ]
 Log the PID of the logger process with each line.  When the optional
 argument \fIid\fR is specified, then it is used instead of the logger
 command's PID.  The use of \fB\-\-id=$$\fR
index db6fd448a334e328bccbddf7b5fb93987dda8ef3..0604e61094c63d255025d42542d4d895c367a5a6 100644 (file)
@@ -89,7 +89,8 @@ enum {
        OPT_JOURNALD,
        OPT_RFC3164,
        OPT_RFC5424,
-       OPT_SOCKET_ERRORS
+       OPT_SOCKET_ERRORS,
+       OPT_ID
 };
 
 struct logger_ctl {
@@ -548,7 +549,8 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out)
        fputs(_("Enter messages into the system log.\n"), out);
 
        fputs(USAGE_OPTIONS, out);
-       fputs(_(" -i, --id[=<id>]          log <id> (default is PID)\n"), out);
+       fputs(_(" -i                       log the logger command's PID\n"), out);
+       fputs(_("     --id[=<id>]          log the given <id>, or otherwise the PID\n"), out);
        fputs(_(" -f, --file <file>        log the contents of this file\n"), out);
        fputs(_(" -p, --priority <prio>    mark given message with this priority\n"), out);
        fputs(_("     --prio-prefix        look for a prefix on every line read from stdin\n"), out);
@@ -606,7 +608,7 @@ int main(int argc, char **argv)
        FILE *jfd = NULL;
 #endif
        static const struct option longopts[] = {
-               { "id",         optional_argument,  0, 'i' },
+               { "id",         optional_argument,  0, OPT_ID },
                { "stderr",     no_argument,        0, 's' },
                { "file",       required_argument,  0, 'f' },
                { "priority",   required_argument,  0, 'p' },
@@ -633,7 +635,7 @@ int main(int argc, char **argv)
        textdomain(PACKAGE);
        atexit(close_stdout);
 
-       while ((ch = getopt_long(argc, argv, "f:i::p:st:u:dTn:P:Vh",
+       while ((ch = getopt_long(argc, argv, "f:ip:st:u:dTn:P:Vh",
                                            longopts, NULL)) != -1) {
                switch (ch) {
                case 'f':               /* file to log */
@@ -642,6 +644,9 @@ int main(int argc, char **argv)
                        stdout_reopened = 1;
                        break;
                case 'i':               /* log process id also */
+                       ctl.pid = getpid();
+                       break;
+               case OPT_ID:
                        if (optarg) {
                                const char *p = optarg;