diff --git a/Makefile.am b/Makefile.am index ab24ebaa61..771efa4f8e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1023,6 +1023,7 @@ libshared_la_SOURCES = \ src/shared/output-mode.c \ src/shared/gpt.h \ src/shared/udev-util.h \ + src/shared/udev-util.c \ src/shared/linux/auto_dev-ioctl.h \ src/shared/linux-3.13/dm-ioctl.h \ src/shared/initreq.h \ @@ -3924,7 +3925,8 @@ gperf_gperf_sources += \ libudev_core_la_CFLAGS = \ $(AM_CFLAGS) \ $(BLKID_CFLAGS) \ - $(KMOD_CFLAGS) + $(KMOD_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV libudev_core_la_LIBADD = \ libsystemd-network.la \ @@ -3956,6 +3958,10 @@ endif systemd_udevd_SOURCES = \ src/udev/udevd.c +systemd_udevd_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + systemd_udevd_LDADD = \ libudev-core.la \ libbasic.la @@ -4099,6 +4105,10 @@ EXTRA_DIST += \ ata_id_SOURCES = \ src/udev/ata_id/ata_id.c +ata_id_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + ata_id_LDADD = \ libshared.la @@ -4109,6 +4119,10 @@ udevlibexec_PROGRAMS += \ cdrom_id_SOURCES = \ src/udev/cdrom_id/cdrom_id.c +cdrom_id_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + cdrom_id_LDADD = \ libshared.la @@ -4122,6 +4136,10 @@ dist_udevrules_DATA += \ collect_SOURCES = \ src/udev/collect/collect.c +collect_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + collect_LDADD = \ libshared.la @@ -4135,6 +4153,10 @@ scsi_id_SOURCES =\ src/udev/scsi_id/scsi.h \ src/udev/scsi_id/scsi_id.h +scsi_id_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + scsi_id_LDADD = \ libshared.la @@ -4148,6 +4170,10 @@ EXTRA_DIST += \ v4l_id_SOURCES = \ src/udev/v4l_id/v4l_id.c +v4l_id_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + v4l_id_LDADD = \ libshared.la @@ -4163,6 +4189,10 @@ mtd_probe_SOURCES = \ src/udev/mtd_probe/mtd_probe.h \ src/udev/mtd_probe/probe_smartmedia.c +mtd_probe_CFLAGS = \ + $(AM_CFLAGS) \ + -DLOG_REALM=LOG_REALM_UDEV + dist_udevrules_DATA += \ rules/75-probe_mtd.rules diff --git a/meson.build b/meson.build index 6e3901c85e..bd05757b87 100644 --- a/meson.build +++ b/meson.build @@ -2069,6 +2069,7 @@ public_programs += [exe] exe = executable('systemd-udevd', systemd_udevd_sources, include_directories : includes, + c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], link_with : [libudev_core, libsystemd_network, libudev_internal], diff --git a/src/basic/log.c b/src/basic/log.c index 0d0ced00bd..62c9f1a78f 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -58,7 +58,8 @@ #define SNDBUF_SIZE (8*1024*1024) static LogTarget log_target = LOG_TARGET_CONSOLE; -static int log_max_level = LOG_INFO; +static int log_max_level[] = {LOG_INFO, LOG_INFO}; +assert_cc(ELEMENTSOF(log_max_level) == _LOG_REALM_MAX); static int log_facility = LOG_DAEMON; static int console_fd = STDERR_FILENO; @@ -315,10 +316,11 @@ void log_forget_fds(void) { console_fd = kmsg_fd = syslog_fd = journal_fd = -1; } -void log_set_max_level(int level) { +void log_set_max_level_realm(LogRealm realm, int level) { assert((level & LOG_PRIMASK) == level); + assert(realm < ELEMENTSOF(log_max_level)); - log_max_level = level; + log_max_level[realm] = level; } void log_set_facility(int facility) { @@ -636,13 +638,14 @@ int log_dispatch_internal( } int log_dump_internal( - int level, - int error, - const char *file, - int line, - const char *func, - char *buffer) { + int level, + int error, + const char *file, + int line, + const char *func, + char *buffer) { + LogRealm realm = LOG_REALM_REMOVE_LEVEL(level); PROTECT_ERRNO; /* This modifies the buffer... */ @@ -650,13 +653,13 @@ int log_dump_internal( if (error < 0) error = -error; - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[realm])) return -error; return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer); } -int log_internalv( +int log_internalv_realm( int level, int error, const char *file, @@ -665,13 +668,14 @@ int log_internalv( const char *format, va_list ap) { - PROTECT_ERRNO; + LogRealm realm = LOG_REALM_REMOVE_LEVEL(level); char buffer[LINE_MAX]; + PROTECT_ERRNO; if (error < 0) error = -error; - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[realm])) return -error; /* Make sure that %m maps to the specified error */ @@ -683,7 +687,7 @@ int log_internalv( return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer); } -int log_internal( +int log_internal_realm( int level, int error, const char *file, @@ -695,7 +699,7 @@ int log_internal( int r; va_start(ap, format); - r = log_internalv(level, error, file, line, func, format, ap); + r = log_internalv_realm(level, error, file, line, func, format, ap); va_end(ap); return r; @@ -721,7 +725,7 @@ int log_object_internalv( if (error < 0) error = -error; - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[LOG_REALM_SYSTEMD])) return -error; /* Make sure that %m maps to the specified error */ @@ -779,8 +783,9 @@ static void log_assert( const char *format) { static char buffer[LINE_MAX]; + LogRealm realm = LOG_REALM_REMOVE_LEVEL(level); - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[realm])) return; DISABLE_WARNING_FORMAT_NONLITERAL; @@ -792,23 +797,42 @@ static void log_assert( log_dispatch_internal(level, 0, file, line, func, NULL, NULL, NULL, NULL, buffer); } -noreturn void log_assert_failed(const char *text, const char *file, int line, const char *func) { - log_assert(LOG_CRIT, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting."); +noreturn void log_assert_failed_realm( + LogRealm realm, + const char *text, + const char *file, + int line, + const char *func) { + log_assert(LOG_REALM_PLUS_LEVEL(realm, LOG_CRIT), text, file, line, func, + "Assertion '%s' failed at %s:%u, function %s(). Aborting."); abort(); } -noreturn void log_assert_failed_unreachable(const char *text, const char *file, int line, const char *func) { - log_assert(LOG_CRIT, text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); +noreturn void log_assert_failed_unreachable_realm( + LogRealm realm, + const char *text, + const char *file, + int line, + const char *func) { + log_assert(LOG_REALM_PLUS_LEVEL(realm, LOG_CRIT), text, file, line, func, + "Code should not be reached '%s' at %s:%u, function %s(). Aborting."); abort(); } -void log_assert_failed_return(const char *text, const char *file, int line, const char *func) { +void log_assert_failed_return_realm( + LogRealm realm, + const char *text, + const char *file, + int line, + const char *func) { PROTECT_ERRNO; - log_assert(LOG_DEBUG, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Ignoring."); + log_assert(LOG_REALM_PLUS_LEVEL(realm, LOG_DEBUG), text, file, line, func, + "Assertion '%s' failed at %s:%u, function %s(). Ignoring."); } -int log_oom_internal(const char *file, int line, const char *func) { - log_internal(LOG_ERR, ENOMEM, file, line, func, "Out of memory."); +int log_oom_internal(LogRealm realm, const char *file, int line, const char *func) { + log_internal_realm(LOG_REALM_PLUS_LEVEL(realm, LOG_ERR), + ENOMEM, file, line, func, "Out of memory."); return -ENOMEM; } @@ -868,13 +892,14 @@ int log_struct_internal( char buf[LINE_MAX]; bool found = false; + LogRealm realm = LOG_REALM_REMOVE_LEVEL(level); PROTECT_ERRNO; va_list ap; if (error < 0) error = -error; - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[realm])) return -error; if (log_target == LOG_TARGET_NULL) @@ -958,14 +983,14 @@ int log_set_target_from_string(const char *e) { return 0; } -int log_set_max_level_from_string(const char *e) { +int log_set_max_level_from_string_realm(LogRealm realm, const char *e) { int t; t = log_level_from_string(e); if (t < 0) return -EINVAL; - log_set_max_level(t); + log_set_max_level_realm(realm, t); return 0; } @@ -1013,7 +1038,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat return 0; } -void log_parse_environment(void) { +void log_parse_environment_realm(LogRealm realm) { const char *e; if (get_ctty_devnr(0, NULL) < 0) @@ -1026,7 +1051,7 @@ void log_parse_environment(void) { log_warning("Failed to parse log target '%s'. Ignoring.", e); e = secure_getenv("SYSTEMD_LOG_LEVEL"); - if (e && log_set_max_level_from_string(e) < 0) + if (e && log_set_max_level_from_string_realm(realm, e) < 0) log_warning("Failed to parse log level '%s'. Ignoring.", e); e = secure_getenv("SYSTEMD_LOG_COLOR"); @@ -1042,8 +1067,8 @@ LogTarget log_get_target(void) { return log_target; } -int log_get_max_level(void) { - return log_max_level; +int log_get_max_level_realm(LogRealm realm) { + return log_max_level[realm]; } void log_show_color(bool b) { @@ -1147,7 +1172,7 @@ int log_syntax_internal( if (error < 0) error = -error; - if (_likely_(LOG_PRI(level) > log_max_level)) + if (_likely_(LOG_PRI(level) > log_max_level[LOG_REALM_SYSTEMD])) return -error; if (log_target == LOG_TARGET_NULL) @@ -1164,7 +1189,8 @@ int log_syntax_internal( unit_fmt = getpid() == 1 ? "UNIT=%s" : "USER_UNIT=%s"; return log_struct_internal( - level, error, + LOG_REALM_PLUS_LEVEL(LOG_REALM_SYSTEMD, level), + error, file, line, func, "MESSAGE_ID=" SD_MESSAGE_INVALID_CONFIGURATION_STR, "CONFIG_FILE=%s", config_file, diff --git a/src/basic/log.h b/src/basic/log.h index b3e4060b5d..57463fbb83 100644 --- a/src/basic/log.h +++ b/src/basic/log.h @@ -31,6 +31,16 @@ #include "macro.h" +typedef enum LogRealm { + LOG_REALM_SYSTEMD, + LOG_REALM_UDEV, + _LOG_REALM_MAX, +} LogRealm; + +#ifndef LOG_REALM +# define LOG_REALM LOG_REALM_SYSTEMD +#endif + typedef enum LogTarget{ LOG_TARGET_CONSOLE, LOG_TARGET_CONSOLE_PREFIXED, @@ -44,14 +54,24 @@ typedef enum LogTarget{ LOG_TARGET_NULL, _LOG_TARGET_MAX, _LOG_TARGET_INVALID = -1 -} LogTarget; +} LogTarget; + +#define LOG_REALM_PLUS_LEVEL(realm, level) \ + ((realm) << 10 | (level)) +#define LOG_REALM_REMOVE_LEVEL(realm_level) \ + ((realm_level >> 10)) void log_set_target(LogTarget target); -void log_set_max_level(int level); +void log_set_max_level_realm(LogRealm realm, int level); +#define log_set_max_level(level) \ + log_set_max_level_realm(LOG_REALM, (level)) + void log_set_facility(int facility); int log_set_target_from_string(const char *e); -int log_set_max_level_from_string(const char *e); +int log_set_max_level_from_string_realm(LogRealm realm, const char *e); +#define log_set_max_level_from_string(e) \ + log_set_max_level_from_string_realm(LOG_REALM, (e)) void log_show_color(bool b); bool log_get_show_color(void) _pure_; @@ -62,7 +82,9 @@ int log_show_color_from_string(const char *e); int log_show_location_from_string(const char *e); LogTarget log_get_target(void) _pure_; -int log_get_max_level(void) _pure_; +int log_get_max_level_realm(LogRealm realm) _pure_; +#define log_get_max_level() \ + log_get_max_level_realm(LOG_REALM) int log_open(void); void log_close(void); @@ -73,7 +95,9 @@ void log_close_journal(void); void log_close_kmsg(void); void log_close_console(void); -void log_parse_environment(void); +void log_parse_environment_realm(LogRealm realm); +#define log_parse_environment() \ + log_parse_environment_realm(LOG_REALM) int log_dispatch_internal( int level, @@ -87,15 +111,17 @@ int log_dispatch_internal( const char *extra_field, char *buffer); -int log_internal( +int log_internal_realm( int level, int error, const char *file, int line, const char *func, const char *format, ...) _printf_(6,7); +#define log_internal(level, ...) \ + log_internal_realm(LOG_REALM_PLUS_LEVEL(LOG_REALM, (level)), __VA_ARGS__) -int log_internalv( +int log_internalv_realm( int level, int error, const char *file, @@ -103,7 +129,10 @@ int log_internalv( const char *func, const char *format, va_list ap) _printf_(6,0); +#define log_internalv(level, ...) \ + log_internalv_realm(LOG_REALM_PLUS_LEVEL(LOG_REALM, (level)), __VA_ARGS__) +/* Realm is fixed to LOG_REALM_SYSTEMD for those */ int log_object_internal( int level, int error, @@ -138,6 +167,7 @@ int log_struct_internal( const char *format, ...) _printf_(6,0) _sentinel_; int log_oom_internal( + LogRealm realm, const char *file, int line, const char *func); @@ -161,37 +191,50 @@ int log_dump_internal( char *buffer); /* Logging for various assertions */ -noreturn void log_assert_failed( +noreturn void log_assert_failed_realm( + LogRealm realm, const char *text, const char *file, int line, const char *func); +#define log_assert_failed(text, ...) \ + log_assert_failed_realm(LOG_REALM, (text), __VA_ARGS__) -noreturn void log_assert_failed_unreachable( +noreturn void log_assert_failed_unreachable_realm( + LogRealm realm, const char *text, const char *file, int line, const char *func); +#define log_assert_failed_unreachable(text, ...) \ + log_assert_failed_unreachable_realm(LOG_REALM, (text), __VA_ARGS__) -void log_assert_failed_return( +void log_assert_failed_return_realm( + LogRealm realm, const char *text, const char *file, int line, const char *func); +#define log_assert_failed_return(text, ...) \ + log_assert_failed_return_realm(LOG_REALM, (text), __VA_ARGS__) #define log_dispatch(level, error, buffer) \ log_dispatch_internal(level, error, __FILE__, __LINE__, __func__, NULL, NULL, NULL, NULL, buffer) /* Logging with level */ -#define log_full_errno(level, error, ...) \ +#define log_full_errno_realm(realm, level, error, ...) \ ({ \ int _level = (level), _e = (error); \ - (log_get_max_level() >= LOG_PRI(_level)) \ - ? log_internal(_level, _e, __FILE__, __LINE__, __func__, __VA_ARGS__) \ + (log_get_max_level_realm((realm)) >= LOG_PRI(_level)) \ + ? log_internal_realm(LOG_REALM_PLUS_LEVEL((realm), _level), _e, \ + __FILE__, __LINE__, __func__, __VA_ARGS__) \ : -abs(_e); \ }) -#define log_full(level, ...) log_full_errno(level, 0, __VA_ARGS__) +#define log_full_errno(level, error, ...) \ + log_full_errno_realm(LOG_REALM, (level), (error), __VA_ARGS__) + +#define log_full(level, ...) log_full_errno((level), 0, __VA_ARGS__) /* Normal logging */ #define log_debug(...) log_full(LOG_DEBUG, __VA_ARGS__) @@ -216,13 +259,17 @@ void log_assert_failed_return( #endif /* Structured logging */ -#define log_struct(level, ...) log_struct_internal(level, 0, __FILE__, __LINE__, __func__, __VA_ARGS__) -#define log_struct_errno(level, error, ...) log_struct_internal(level, error, __FILE__, __LINE__, __func__, __VA_ARGS__) +#define log_struct_errno(level, error, ...) \ + log_struct_internal(LOG_REALM_PLUS_LEVEL(LOG_REALM, level), \ + error, __FILE__, __LINE__, __func__, __VA_ARGS__) +#define log_struct(level, ...) log_struct_errno(level, 0, __VA_ARGS__) /* This modifies the buffer passed! */ -#define log_dump(level, buffer) log_dump_internal(level, 0, __FILE__, __LINE__, __func__, buffer) +#define log_dump(level, buffer) \ + log_dump_internal(LOG_REALM_PLUS_LEVEL(LOG_REALM, level), \ + 0, __FILE__, __LINE__, __func__, buffer) -#define log_oom() log_oom_internal(__FILE__, __LINE__, __func__) +#define log_oom() log_oom_internal(LOG_REALM, __FILE__, __LINE__, __func__) bool log_on_console(void) _pure_; diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c index d8e13288b0..5f2225f402 100644 --- a/src/libudev/libudev.c +++ b/src/libudev/libudev.c @@ -103,82 +103,6 @@ _public_ struct udev *udev_new(void) { } udev->refcount = 1; - f = fopen("/etc/udev/udev.conf", "re"); - if (f != NULL) { - char line[UTIL_LINE_SIZE]; - unsigned line_nr = 0; - - while (fgets(line, sizeof(line), f)) { - size_t len; - char *key; - char *val; - - line_nr++; - - /* find key */ - key = line; - while (isspace(key[0])) - key++; - - /* comment or empty line */ - if (key[0] == '#' || key[0] == '\0') - continue; - - /* split key/value */ - val = strchr(key, '='); - if (val == NULL) { - log_debug("/etc/udev/udev.conf:%u: missing assignment, skipping line.", line_nr); - continue; - } - val[0] = '\0'; - val++; - - /* find value */ - while (isspace(val[0])) - val++; - - /* terminate key */ - len = strlen(key); - if (len == 0) - continue; - while (isspace(key[len-1])) - len--; - key[len] = '\0'; - - /* terminate value */ - len = strlen(val); - if (len == 0) - continue; - while (isspace(val[len-1])) - len--; - val[len] = '\0'; - - if (len == 0) - continue; - - /* unquote */ - if (val[0] == '"' || val[0] == '\'') { - if (len == 1 || val[len-1] != val[0]) { - log_debug("/etc/udev/udev.conf:%u: inconsistent quoting, skipping line.", line_nr); - continue; - } - val[len-1] = '\0'; - val++; - } - - if (streq(key, "udev_log")) { - int prio; - - prio = util_log_priority(val); - if (prio < 0) - log_debug("/etc/udev/udev.conf:%u: invalid log level '%s', ignoring.", line_nr, val); - else - log_set_max_level(prio); - continue; - } - } - } - return udev; } diff --git a/src/shared/meson.build b/src/shared/meson.build index b684e5b543..a9a5b4a6d4 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -89,6 +89,7 @@ shared_sources = ''' tests.c tests.h udev-util.h + udev-util.c uid-range.c uid-range.h utmp-wtmp.h diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c new file mode 100644 index 0000000000..f708dcfa14 --- /dev/null +++ b/src/shared/udev-util.c @@ -0,0 +1,56 @@ +/*** + This file is part of systemd. + + Copyright 2017 Zbigniew Jędrzejewski-Szmek + + 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 . +***/ + +#include + +#include "fileio.h" +#include "log.h" +#include "string-util.h" +#include "udev-util.h" + +int udev_parse_config(void) { + _cleanup_free_ char *val = NULL; + const char *log; + size_t n; + int r; + + r = parse_env_file("/etc/udev/udev.conf", NEWLINE, "udev_log", &val, NULL); + if (r == -ENOENT || !val) + return 0; + if (r < 0) + return r; + + /* unquote */ + n = strlen(val); + if (n >= 2 && + ((val[0] == '"' && val[n-1] == '"') || + (val[0] == '\'' && val[n-1] == '\''))) { + val[n - 1] = '\0'; + log = val + 1; + } else + log = val; + + /* we set the udev log level here explicitly, this is supposed + * to regulate the code in libudev/ and udev/. */ + r = log_set_max_level_from_string_realm(LOG_REALM_UDEV, log); + if (r < 0) + log_debug_errno(r, "/etc/udev/udev.conf: failed to set udev log level '%s', ignoring: %m", log); + + return 0; +} diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h index ca0889f8a6..a415be249e 100644 --- a/src/shared/udev-util.h +++ b/src/shared/udev-util.h @@ -42,3 +42,5 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_monitor*, udev_monitor_unref); #define _cleanup_udev_ctrl_msg_unref_ _cleanup_(udev_ctrl_msg_unrefp) #define _cleanup_udev_monitor_unref_ _cleanup_(udev_monitor_unrefp) #define _cleanup_udev_list_cleanup_ _cleanup_(udev_list_cleanup) + +int udev_parse_config(void); diff --git a/src/test/test-log.c b/src/test/test-log.c index ae9e113efb..626d2c6135 100644 --- a/src/test/test-log.c +++ b/src/test/test-log.c @@ -24,6 +24,15 @@ #include "log.h" #include "util.h" +assert_cc(LOG_REALM_REMOVE_LEVEL(LOG_REALM_PLUS_LEVEL(LOG_REALM_SYSTEMD, LOG_FTP | LOG_DEBUG)) + == LOG_REALM_SYSTEMD); +assert_cc(LOG_REALM_REMOVE_LEVEL(LOG_REALM_PLUS_LEVEL(LOG_REALM_UDEV, LOG_LOCAL7 | LOG_DEBUG)) + == LOG_REALM_UDEV); +assert_cc((LOG_REALM_PLUS_LEVEL(LOG_REALM_SYSTEMD, LOG_LOCAL3 | LOG_DEBUG) & LOG_FACMASK) + == LOG_LOCAL3); +assert_cc((LOG_REALM_PLUS_LEVEL(LOG_REALM_UDEV, LOG_USER | LOG_INFO) & LOG_PRIMASK) + == LOG_INFO); + int main(int argc, char* argv[]) { log_set_target(LOG_TARGET_CONSOLE); diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c index 1e414664ce..ad152b9d31 100644 --- a/src/udev/ata_id/ata_id.c +++ b/src/udev/ata_id/ata_id.c @@ -427,6 +427,8 @@ int main(int argc, char *argv[]) {} }; + log_set_target(LOG_TARGET_AUTO); + udev_parse_config(); log_parse_environment(); log_open(); diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c index 72f284f710..1f906a8525 100644 --- a/src/udev/cdrom_id/cdrom_id.c +++ b/src/udev/cdrom_id/cdrom_id.c @@ -38,6 +38,7 @@ #include "libudev-private.h" #include "random-util.h" +#include "udev-util.h" /* device info */ static unsigned int cd_cd_rom; @@ -843,8 +844,7 @@ static int cd_media_toc(struct udev *udev, int fd) return 0; } -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { struct udev *udev; static const struct option options[] = { { "lock-media", no_argument, NULL, 'l' }, @@ -862,6 +862,8 @@ int main(int argc, char *argv[]) int cnt; int rc = 0; + log_set_target(LOG_TARGET_AUTO); + udev_parse_config(); log_parse_environment(); log_open(); diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c index 0e973cd521..57dfb016f9 100644 --- a/src/udev/collect/collect.c +++ b/src/udev/collect/collect.c @@ -29,6 +29,7 @@ #include "macro.h" #include "stdio-util.h" #include "string-util.h" +#include "udev-util.h" #define BUFSIZE 16 #define UDEV_ALARM_TIMEOUT 180 @@ -343,9 +344,7 @@ static void everybody(void) } } -int main(int argc, char **argv) -{ - struct udev *udev; +int main(int argc, char **argv) { static const struct option options[] = { { "add", no_argument, NULL, 'a' }, { "remove", no_argument, NULL, 'r' }, @@ -361,11 +360,10 @@ int main(int argc, char **argv) int prune = 0; char tmpdir[UTIL_PATH_SIZE]; - udev = udev_new(); - if (udev == NULL) { - ret = EXIT_FAILURE; - goto exit; - } + log_set_target(LOG_TARGET_AUTO); + udev_parse_config(); + log_parse_environment(); + log_open(); for (;;) { int option; @@ -386,26 +384,23 @@ int main(int argc, char **argv) break; case 'h': usage(); - goto exit; + return 0; default: - ret = 1; - goto exit; + return 1; } } argi = optind; if (argi + 2 > argc) { printf("Missing parameter(s)\n"); - ret = 1; - goto exit; + return 1; } checkpoint = argv[argi++]; us = argv[argi++]; if (signal(SIGALRM, sig_alrm) == SIG_ERR) { fprintf(stderr, "Cannot set SIGALRM: %m\n"); - ret = 2; - goto exit; + return 2; } udev_list_node_init(&bunch); @@ -485,7 +480,5 @@ out: everybody(); if (ret >= 0) printf("COLLECT_%s=%d\n", checkpoint, ret); -exit: - udev_unref(udev); return ret; } diff --git a/src/udev/meson.build b/src/udev/meson.build index 6576ad6b0d..90033edda8 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -130,6 +130,7 @@ foreach prog : [['ata_id/ata_id.c'], executable(prog[0].split('/')[0], prog, include_directories : includes, + c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], link_with : [libudev_internal], install_rpath : udev_rpath, install : true, diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c index eba382a82d..3c3d7a6b33 100644 --- a/src/udev/scsi_id/scsi_id.c +++ b/src/udev/scsi_id/scsi_id.c @@ -577,6 +577,8 @@ int main(int argc, char **argv) int newargc; char **newargv = NULL; + log_set_target(LOG_TARGET_AUTO); + udev_parse_config(); log_parse_environment(); log_open(); diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c index 492b2f4c25..befc3bad7b 100644 --- a/src/udev/udevadm.c +++ b/src/udev/udevadm.c @@ -23,6 +23,7 @@ #include "selinux-util.h" #include "string-util.h" #include "udev.h" +#include "udev-util.h" static int adm_version(struct udev *udev, int argc, char *argv[]) { printf("%s\n", PACKAGE_VERSION); @@ -87,14 +88,16 @@ int main(int argc, char *argv[]) { unsigned int i; int rc = 1, c; + udev_parse_config(); + log_parse_environment(); + log_open(); + + mac_selinux_init(); + udev = udev_new(); if (udev == NULL) goto out; - log_parse_environment(); - log_open(); - mac_selinux_init(); - while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0) switch (c) { diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 56b8c1ec55..3af06c68b2 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -1663,6 +1663,7 @@ int main(int argc, char *argv[]) { int r; log_set_target(LOG_TARGET_AUTO); + udev_parse_config(); log_parse_environment(); log_open();