diff options
Diffstat (limited to 'src/grp-journal/libjournal-core')
-rw-r--r-- | src/grp-journal/libjournal-core/Makefile | 2 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/cat.c | 161 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/journal-qrcode.c | 135 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/journal-qrcode.h | 27 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/journald-audit.c | 2 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/journald-gperf.c | 173 | ||||
-rw-r--r-- | src/grp-journal/libjournal-core/journald-server.c | 31 |
7 files changed, 192 insertions, 339 deletions
diff --git a/src/grp-journal/libjournal-core/Makefile b/src/grp-journal/libjournal-core/Makefile index d55aebfb49..bcbfd0f8cb 100644 --- a/src/grp-journal/libjournal-core/Makefile +++ b/src/grp-journal/libjournal-core/Makefile @@ -53,4 +53,6 @@ libjournal_core_la_LIBADD = \ noinst_LTLIBRARIES += \ libjournal-core.la +systemd.CPPFLAGS += -DPKGSYSCONFDIR=\"$(pkgsysconfdir)\" + include $(topsrcdir)/build-aux/Makefile.tail.mk diff --git a/src/grp-journal/libjournal-core/cat.c b/src/grp-journal/libjournal-core/cat.c deleted file mode 100644 index 8ab4febd53..0000000000 --- a/src/grp-journal/libjournal-core/cat.c +++ /dev/null @@ -1,161 +0,0 @@ -/*** - This file is part of systemd. - - Copyright 2012 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <errno.h> -#include <fcntl.h> -#include <getopt.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#include <systemd/sd-journal.h> - -#include "basic/fd-util.h" -#include "basic/parse-util.h" -#include "basic/string-util.h" -#include "basic/syslog-util.h" -#include "basic/util.h" - -static const char *arg_identifier = NULL; -static int arg_priority = LOG_INFO; -static bool arg_level_prefix = true; - -static void help(void) { - printf("%s [OPTIONS...] {COMMAND} ...\n\n" - "Execute process with stdout/stderr connected to the journal.\n\n" - " -h --help Show this help\n" - " --version Show package version\n" - " -t --identifier=STRING Set syslog identifier\n" - " -p --priority=PRIORITY Set priority value (0..7)\n" - " --level-prefix=BOOL Control whether level prefix shall be parsed\n" - , program_invocation_short_name); -} - -static int parse_argv(int argc, char *argv[]) { - - enum { - ARG_VERSION = 0x100, - ARG_LEVEL_PREFIX - }; - - static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, ARG_VERSION }, - { "identifier", required_argument, NULL, 't' }, - { "priority", required_argument, NULL, 'p' }, - { "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX }, - {} - }; - - int c; - - assert(argc >= 0); - assert(argv); - - while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0) - - switch (c) { - - case 'h': - help(); - return 0; - - case ARG_VERSION: - return version(); - - case 't': - if (isempty(optarg)) - arg_identifier = NULL; - else - arg_identifier = optarg; - break; - - case 'p': - arg_priority = log_level_from_string(optarg); - if (arg_priority < 0) { - log_error("Failed to parse priority value."); - return -EINVAL; - } - break; - - case ARG_LEVEL_PREFIX: { - int k; - - k = parse_boolean(optarg); - if (k < 0) - return log_error_errno(k, "Failed to parse level prefix value."); - - arg_level_prefix = k; - break; - } - - case '?': - return -EINVAL; - - default: - assert_not_reached("Unhandled option"); - } - - return 1; -} - -int main(int argc, char *argv[]) { - _cleanup_close_ int fd = -1, saved_stderr = -1; - int r; - - log_parse_environment(); - log_open(); - - r = parse_argv(argc, argv); - if (r <= 0) - goto finish; - - fd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix); - if (fd < 0) { - r = log_error_errno(fd, "Failed to create stream fd: %m"); - goto finish; - } - - saved_stderr = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 3); - - if (dup3(fd, STDOUT_FILENO, 0) < 0 || - dup3(fd, STDERR_FILENO, 0) < 0) { - r = log_error_errno(errno, "Failed to duplicate fd: %m"); - goto finish; - } - - if (fd >= 3) - safe_close(fd); - fd = -1; - - if (argc <= optind) - (void) execl("/bin/cat", "/bin/cat", NULL); - else - (void) execvp(argv[optind], argv + optind); - r = -errno; - - /* Let's try to restore a working stderr, so we can print the error message */ - if (saved_stderr >= 0) - (void) dup3(saved_stderr, STDERR_FILENO, 0); - - log_error_errno(r, "Failed to execute process: %m"); - -finish: - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; -} diff --git a/src/grp-journal/libjournal-core/journal-qrcode.c b/src/grp-journal/libjournal-core/journal-qrcode.c deleted file mode 100644 index e38730d65c..0000000000 --- a/src/grp-journal/libjournal-core/journal-qrcode.c +++ /dev/null @@ -1,135 +0,0 @@ -/*** - This file is part of systemd. - - Copyright 2012 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <assert.h> -#include <errno.h> -#include <qrencode.h> -#include <stdbool.h> -#include <stdio.h> -#include <stdlib.h> - -#include "journal-qrcode.h" - -#define WHITE_ON_BLACK "\033[40;37;1m" -#define NORMAL "\033[0m" - -static void print_border(FILE *output, unsigned width) { - unsigned x, y; - - /* Four rows of border */ - for (y = 0; y < 4; y += 2) { - fputs(WHITE_ON_BLACK, output); - - for (x = 0; x < 4 + width + 4; x++) - fputs("\342\226\210", output); - - fputs(NORMAL "\n", output); - } -} - -int print_qr_code( - FILE *output, - const void *seed, - size_t seed_size, - uint64_t start, - uint64_t interval, - const char *hn, - sd_id128_t machine) { - - FILE *f; - char *url = NULL; - size_t url_size = 0, i; - QRcode* qr; - unsigned x, y; - - assert(seed); - assert(seed_size > 0); - - f = open_memstream(&url, &url_size); - if (!f) - return -ENOMEM; - - fputs("fss://", f); - - for (i = 0; i < seed_size; i++) { - if (i > 0 && i % 3 == 0) - fputc('-', f); - fprintf(f, "%02x", ((uint8_t*) seed)[i]); - } - - fprintf(f, "/%"PRIx64"-%"PRIx64"?machine=" SD_ID128_FORMAT_STR, - start, - interval, - SD_ID128_FORMAT_VAL(machine)); - - if (hn) - fprintf(f, ";hostname=%s", hn); - - if (ferror(f)) { - fclose(f); - free(url); - return -ENOMEM; - } - - fclose(f); - - qr = QRcode_encodeString(url, 0, QR_ECLEVEL_L, QR_MODE_8, 1); - free(url); - - if (!qr) - return -ENOMEM; - - print_border(output, qr->width); - - for (y = 0; y < (unsigned) qr->width; y += 2) { - const uint8_t *row1, *row2; - - row1 = qr->data + qr->width * y; - row2 = row1 + qr->width; - - fputs(WHITE_ON_BLACK, output); - for (x = 0; x < 4; x++) - fputs("\342\226\210", output); - - for (x = 0; x < (unsigned) qr->width; x ++) { - bool a, b; - - a = row1[x] & 1; - b = (y+1) < (unsigned) qr->width ? (row2[x] & 1) : false; - - if (a && b) - fputc(' ', output); - else if (a) - fputs("\342\226\204", output); - else if (b) - fputs("\342\226\200", output); - else - fputs("\342\226\210", output); - } - - for (x = 0; x < 4; x++) - fputs("\342\226\210", output); - fputs(NORMAL "\n", output); - } - - print_border(output, qr->width); - - QRcode_free(qr); - return 0; -} diff --git a/src/grp-journal/libjournal-core/journal-qrcode.h b/src/grp-journal/libjournal-core/journal-qrcode.h deleted file mode 100644 index 34a779d5be..0000000000 --- a/src/grp-journal/libjournal-core/journal-qrcode.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -/*** - This file is part of systemd. - - Copyright 2012 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <inttypes.h> -#include <stdio.h> - -#include <systemd/sd-id128.h> - -int print_qr_code(FILE *f, const void *seed, size_t seed_size, uint64_t start, uint64_t interval, const char *hn, sd_id128_t machine); diff --git a/src/grp-journal/libjournal-core/journald-audit.c b/src/grp-journal/libjournal-core/journald-audit.c index 7abd2f819e..d76a460257 100644 --- a/src/grp-journal/libjournal-core/journald-audit.c +++ b/src/grp-journal/libjournal-core/journald-audit.c @@ -18,7 +18,7 @@ ***/ #include "basic/alloc-util.h" -#include "audit-type.h" +#include "sd-journal/audit-type.h" #include "basic/fd-util.h" #include "basic/hexdecoct.h" #include "basic/io-util.h" diff --git a/src/grp-journal/libjournal-core/journald-gperf.c b/src/grp-journal/libjournal-core/journald-gperf.c new file mode 100644 index 0000000000..d8483a3303 --- /dev/null +++ b/src/grp-journal/libjournal-core/journald-gperf.c @@ -0,0 +1,173 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf */ +/* Computed positions: -k'9,18' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." +#endif + + +#include <stddef.h> +#include <sys/socket.h> +#include "shared/conf-parser.h" +#include "journald-server.h" +#include <string.h> + +#define TOTAL_KEYWORDS 28 +#define MIN_WORD_LENGTH 12 +#define MAX_WORD_LENGTH 28 +#define MIN_HASH_VALUE 12 +#define MAX_HASH_VALUE 53 +/* maximum key range = 42, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +journald_gperf_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 10, 0, 54, 54, + 0, 54, 54, 0, 54, 20, 54, 0, 54, 54, + 54, 54, 5, 0, 30, 20, 54, 15, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 15, 54, 0, + 54, 25, 54, 54, 54, 25, 54, 54, 54, 54, + 54, 20, 10, 54, 54, 54, 0, 54, 15, 54, + 0, 5, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[17]]; + /*FALLTHROUGH*/ + case 17: + case 16: + case 15: + case 14: + case 13: + case 12: + case 11: + case 10: + case 9: + hval += asso_values[(unsigned char)str[8]]; + break; + } + return hval; +} + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct ConfigPerfItem * +journald_gperf_lookup (register const char *str, register unsigned int len) +{ + static const struct ConfigPerfItem wordlist[] = + { + {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0}, + {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0}, + {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0}, + {"Journal.Seal", config_parse_bool, 0, offsetof(Server, seal)}, + {(char*)0}, {(char*)0}, + {"Journal.Storage", config_parse_storage, 0, offsetof(Server, storage)}, + {"Journal.Compress", config_parse_bool, 0, offsetof(Server, compress)}, + {"Journal.SplitMode", config_parse_split_mode, 0, offsetof(Server, split_mode)}, + {"Journal.MaxFileSec", config_parse_sec, 0, offsetof(Server, max_file_usec)}, + {(char*)0}, + {"Journal.MaxLevelKMsg", config_parse_log_level, 0, offsetof(Server, max_level_kmsg)}, + {"Journal.MaxLevelStore", config_parse_log_level, 0, offsetof(Server, max_level_store)}, + {"Journal.SystemMaxFiles", config_parse_uint64, 0, offsetof(Server, system_metrics.n_max_files)}, + {"Journal.ForwardToSyslog", config_parse_bool, 0, offsetof(Server, forward_to_syslog)}, + {"Journal.ForwardToConsole", config_parse_bool, 0, offsetof(Server, forward_to_console)}, + {"Journal.SystemMaxFileSize", config_parse_iec_uint64, 0, offsetof(Server, system_metrics.max_size)}, + {"Journal.RuntimeMaxUse", config_parse_iec_uint64, 0, offsetof(Server, runtime_metrics.max_use)}, + {"Journal.MaxLevelSyslog", config_parse_log_level, 0, offsetof(Server, max_level_syslog)}, + {"Journal.RuntimeMaxFiles", config_parse_uint64, 0, offsetof(Server, runtime_metrics.n_max_files)}, + {(char*)0}, + {"Journal.RateLimitInterval", config_parse_sec, 0, offsetof(Server, rate_limit_interval)}, + {"Journal.RuntimeMaxFileSize", config_parse_iec_uint64, 0, offsetof(Server, runtime_metrics.max_size)}, + {"Journal.SystemKeepFree", config_parse_iec_uint64, 0, offsetof(Server, system_metrics.keep_free)}, + {"Journal.RateLimitIntervalSec",config_parse_sec, 0, offsetof(Server, rate_limit_interval)}, + {(char*)0}, + {"Journal.MaxLevelWall", config_parse_log_level, 0, offsetof(Server, max_level_wall)}, + {"Journal.ForwardToWall", config_parse_bool, 0, offsetof(Server, forward_to_wall)}, + {"Journal.RateLimitBurst", config_parse_unsigned, 0, offsetof(Server, rate_limit_burst)}, + {"Journal.SyncIntervalSec", config_parse_sec, 0, offsetof(Server, sync_interval_usec)}, + {(char*)0}, + {"Journal.SystemMaxUse", config_parse_iec_uint64, 0, offsetof(Server, system_metrics.max_use)}, + {"Journal.ForwardToKMsg", config_parse_bool, 0, offsetof(Server, forward_to_kmsg)}, + {(char*)0}, + {"Journal.MaxLevelConsole", config_parse_log_level, 0, offsetof(Server, max_level_console)}, + {(char*)0}, + {"Journal.TTYPath", config_parse_path, 0, offsetof(Server, tty_path)}, + {(char*)0}, {(char*)0}, + {"Journal.MaxRetentionSec", config_parse_sec, 0, offsetof(Server, max_retention_usec)}, + {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0}, + {"Journal.RuntimeKeepFree", config_parse_iec_uint64, 0, offsetof(Server, runtime_metrics.keep_free)} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = journald_gperf_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register const char *s = wordlist[key].section_and_lvalue; + + if (s && *str == *s && !strcmp (str + 1, s + 1)) + return &wordlist[key]; + } + } + return 0; +} diff --git a/src/grp-journal/libjournal-core/journald-server.c b/src/grp-journal/libjournal-core/journald-server.c index 24b873abeb..4dca4b02b3 100644 --- a/src/grp-journal/libjournal-core/journald-server.c +++ b/src/grp-journal/libjournal-core/journald-server.c @@ -26,16 +26,14 @@ #include <sys/statvfs.h> #include <linux/sockios.h> -#include "libudev.h" +#include <libudev.h> #include <systemd/sd-daemon.h> #include <systemd/sd-journal.h> #include <systemd/sd-messages.h> -#include "shared/acl-util.h" #include "basic/alloc-util.h" #include "basic/audit-util.h" #include "basic/cgroup-util.h" -#include "shared/conf-parser.h" #include "basic/dirent-util.h" #include "basic/extract-word.h" #include "basic/fd-util.h" @@ -45,17 +43,7 @@ #include "basic/hashmap.h" #include "basic/hostname-util.h" #include "basic/io-util.h" -#include "journal-authenticate.h" -#include "journal-file.h" -#include "journal-internal.h" -#include "journal-vacuum.h" -#include "journald-audit.h" -#include "journald-kmsg.h" -#include "journald-native.h" -#include "journald-rate-limit.h" -#include "journald-server.h" -#include "journald-stream.h" -#include "journald-syslog.h" +#include "basic/log.h" #include "basic/missing.h" #include "basic/mkdir.h" #include "basic/parse-util.h" @@ -69,7 +57,20 @@ #include "basic/string-table.h" #include "basic/string-util.h" #include "basic/user-util.h" -#include "basic/log.h" +#include "sd-journal/journal-authenticate.h" +#include "sd-journal/journal-file.h" +#include "sd-journal/journal-internal.h" +#include "sd-journal/journal-vacuum.h" +#include "shared/acl-util.h" +#include "shared/conf-parser.h" + +#include "journald-audit.h" +#include "journald-kmsg.h" +#include "journald-native.h" +#include "journald-rate-limit.h" +#include "journald-server.h" +#include "journald-stream.h" +#include "journald-syslog.h" #define USER_JOURNALS_MAX 1024 |