From 95a7f7e377012ef4d52dbc4af08740fffe14ea64 Mon Sep 17 00:00:00 2001 From: basebuilder_pel7ppc64bebuilder0 Date: Thu, 17 May 2018 19:13:30 +0200 Subject: [PATCH] util linux patches Signed-off-by: basebuilder_pel7ppc64bebuilder0 --- SOURCES/0091-logger-backport-size.patch | 164 ++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 SOURCES/0091-logger-backport-size.patch diff --git a/SOURCES/0091-logger-backport-size.patch b/SOURCES/0091-logger-backport-size.patch new file mode 100644 index 00000000..643b5517 --- /dev/null +++ b/SOURCES/0091-logger-backport-size.patch @@ -0,0 +1,164 @@ +From 1e0289af99737049de97b8cfe342b56d380560bf Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Thu, 16 Mar 2017 12:20:58 +0100 +Subject: [PATCH 091/116] logger: backport --size + +Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1323916 +Signed-off-by: Karel Zak +--- + misc-utils/logger.1 | 6 ++++++ + misc-utils/logger.c | 34 ++++++++++++++++++++++++---------- + 2 files changed, 30 insertions(+), 10 deletions(-) + +diff --git a/misc-utils/logger.1 b/misc-utils/logger.1 +index 8c4faca..57ca0d5 100644 +--- a/misc-utils/logger.1 ++++ b/misc-utils/logger.1 +@@ -98,6 +98,12 @@ logs the message as informational in the local3 facility. + The default is + .IR user.notice . + .TP ++\fB\-S\fR, \fB\-\-size\fR \fIsize\fR ++Sets the maximum permitted message size. The default is 1KiB, which is ++the limit traditionally used and specified in RFC 3164. When selecting a ++maximum message size, it is important to ensure that the receiver supports ++the max size as well, otherwise messages may become truncated. ++.TP + \fB\-s\fR, \fB\-\-stderr\fR + Output the message to standard error as well as to the system log. + .TP +diff --git a/misc-utils/logger.c b/misc-utils/logger.c +index a331869..dfda018 100644 +--- a/misc-utils/logger.c ++++ b/misc-utils/logger.c +@@ -54,6 +54,8 @@ + #include "closestream.h" + #include "nls.h" + #include "strutils.h" ++#include "xalloc.h" ++#include "all-io.h" + + #define SYSLOG_NAMES + #include +@@ -183,7 +185,7 @@ inet_socket(const char *servername, const char *port, const int socket_type) + + static void + mysyslog(int fd, int logflags, int pri, char *tag, char *msg) { +- char buf[1000], pid[30], *cp, *tp; ++ char *buf, pid[30], *cp, *tp; + time_t now; + + if (fd > -1) { +@@ -201,11 +203,11 @@ mysyslog(int fd, int logflags, int pri, char *tag, char *msg) { + (void)time(&now); + tp = ctime(&now)+4; + +- snprintf(buf, sizeof(buf), "<%d>%.15s %.200s%s: %.400s", ++ xasprintf(&buf, "<%d>%.15s %.200s%s: %s", + pri, tp, cp, pid, msg); + +- if (write(fd, buf, strlen(buf)+1) < 0) +- return; /* error */ ++ write_all(fd, buf, strlen(buf)+1); ++ free(buf); + } + } + +@@ -221,6 +223,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) + " -i, --id log the process ID too\n" + " -f, --file log the contents of this file\n" + " -h, --help display this help text and exit\n"), out); ++ fputs(_(" -S, --size maximum size for a single message (default 1024)\n"), out); + fputs(_(" -n, --server write to this remote syslog server\n" + " -P, --port use this port for UDP or TCP connection\n" + " -p, --priority mark given message with this priority\n" +@@ -241,11 +244,12 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) + int + main(int argc, char **argv) { + int ch, logflags, pri; +- char *tag, buf[1024]; ++ char *tag, *buf; + char *usock = NULL; + char *server = NULL; + char *port = NULL; + int LogSock = -1, socket_type = ALL_TYPES; ++ size_t max_message_size = 1024; + + static const struct option longopts[] = { + { "id", no_argument, 0, 'i' }, +@@ -253,6 +257,7 @@ main(int argc, char **argv) { + { "file", required_argument, 0, 'f' }, + { "priority", required_argument, 0, 'p' }, + { "tag", required_argument, 0, 't' }, ++ { "size", required_argument, 0, 'S' }, + { "socket", required_argument, 0, 'u' }, + { "udp", no_argument, 0, 'd' }, + { "tcp", no_argument, 0, 'T' }, +@@ -271,7 +276,7 @@ main(int argc, char **argv) { + tag = NULL; + pri = LOG_NOTICE; + logflags = 0; +- while ((ch = getopt_long(argc, argv, "f:ip:st:u:dTn:P:Vh", ++ while ((ch = getopt_long(argc, argv, "f:ip:st:u:dTn:P:S:Vh", + longopts, NULL)) != -1) { + switch((char)ch) { + case 'f': /* file to log */ +@@ -297,6 +302,10 @@ main(int argc, char **argv) { + case 'd': + socket_type = TYPE_UDP; + break; ++ case 'S': ++ max_message_size = strtosize_or_err(optarg, ++ _("failed to parse message size")); ++ break; + case 'T': + socket_type = TYPE_TCP; + break; +@@ -327,21 +336,23 @@ main(int argc, char **argv) { + else + openlog(tag ? tag : getlogin(), logflags, 0); + ++ buf = xcalloc(1, max_message_size); ++ + /* log input line if appropriate */ + if (argc > 0) { + register char *p, *endp; + size_t len; + +- for (p = buf, endp = buf + sizeof(buf) - 2; *argv;) { ++ for (p = buf, endp = buf + max_message_size - 2; *argv;) { + len = strlen(*argv); + if (p + len > endp && p > buf) { + if (!usock && !server) + syslog(pri, "%s", buf); + else + mysyslog(LogSock, logflags, pri, tag, buf); +- p = buf; ++ p = buf; + } +- if (len > sizeof(buf) - 1) { ++ if (len > max_message_size - 1) { + if (!usock && !server) + syslog(pri, "%s", *argv++); + else +@@ -360,7 +371,7 @@ main(int argc, char **argv) { + mysyslog(LogSock, logflags, pri, tag, buf); + } + } else { +- while (fgets(buf, sizeof(buf), stdin) != NULL) { ++ while (fgets(buf, max_message_size, stdin) != NULL) { + /* glibc is buggy and adds an additional newline, + so we have to remove it here until glibc is fixed */ + int len = strlen(buf); +@@ -374,6 +385,9 @@ main(int argc, char **argv) { + mysyslog(LogSock, logflags, pri, tag, buf); + } + } ++ ++ free(buf); ++ + if (!usock && !server) + closelog(); + else +-- +2.9.3