udevd: allow more parameters to be set through udev.conf
Rebooting to set change the kernel command line to set some udev parameters is inconvenient. Let's allow setting more stuff in the config file. Also drop quotes from around "info" in udev.conf. We need to accept them for compatibility, but there is no reason to use them.
This commit is contained in:
+52
-20
@@ -6,36 +6,68 @@
|
||||
#include "alloc-util.h"
|
||||
#include "fileio.h"
|
||||
#include "log.h"
|
||||
#include "parse-util.h"
|
||||
#include "string-util.h"
|
||||
#include "udev-util.h"
|
||||
#include "udev.h"
|
||||
|
||||
int udev_parse_config(void) {
|
||||
_cleanup_free_ char *val = NULL;
|
||||
const char *log;
|
||||
size_t n;
|
||||
int udev_parse_config_full(
|
||||
unsigned *ret_children_max,
|
||||
usec_t *ret_exec_delay_usec,
|
||||
usec_t *ret_event_timeout_usec) {
|
||||
|
||||
_cleanup_free_ char *log_val = NULL, *children_max = NULL, *exec_delay = NULL, *event_timeout = NULL;
|
||||
int r;
|
||||
|
||||
r = parse_env_file(NULL, "/etc/udev/udev.conf", NEWLINE, "udev_log", &val, NULL);
|
||||
if (r == -ENOENT || !val)
|
||||
r = parse_env_file(NULL, "/etc/udev/udev.conf", NEWLINE,
|
||||
"udev_log", &log_val,
|
||||
"children_max", &children_max,
|
||||
"exec_delay", &exec_delay,
|
||||
"event_timeout", &event_timeout,
|
||||
NULL);
|
||||
if (r == -ENOENT)
|
||||
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;
|
||||
if (log_val) {
|
||||
const char *log;
|
||||
size_t n;
|
||||
|
||||
/* 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);
|
||||
/* unquote */
|
||||
n = strlen(log_val);
|
||||
if (n >= 2 &&
|
||||
((log_val[0] == '"' && log_val[n-1] == '"') ||
|
||||
(log_val[0] == '\'' && log_val[n-1] == '\''))) {
|
||||
log_val[n - 1] = '\0';
|
||||
log = log_val + 1;
|
||||
} else
|
||||
log = 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);
|
||||
}
|
||||
|
||||
if (ret_children_max && children_max) {
|
||||
r = safe_atou(children_max, ret_children_max);
|
||||
if (r < 0)
|
||||
log_notice_errno(r, "/etc/udev/udev.conf: failed to set parse children_max=%s, ignoring: %m", children_max);
|
||||
}
|
||||
|
||||
if (ret_exec_delay_usec && exec_delay) {
|
||||
r = parse_sec(exec_delay, ret_exec_delay_usec);
|
||||
if (r < 0)
|
||||
log_notice_errno(r, "/etc/udev/udev.conf: failed to set parse exec_delay=%s, ignoring: %m", exec_delay);
|
||||
}
|
||||
|
||||
if (ret_event_timeout_usec && event_timeout) {
|
||||
r = parse_sec(event_timeout, ret_event_timeout_usec);
|
||||
if (r < 0)
|
||||
log_notice_errno(r, "/etc/udev/udev.conf: failed to set parse event_timeout=%s, ignoring: %m", event_timeout);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+10
-1
@@ -1,4 +1,13 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
#pragma once
|
||||
|
||||
int udev_parse_config(void);
|
||||
#include "time-util.h"
|
||||
|
||||
int udev_parse_config_full(
|
||||
unsigned *ret_children_max,
|
||||
usec_t *ret_exec_delay_usec,
|
||||
usec_t *ret_event_timeout_usec);
|
||||
|
||||
static inline int udev_parse_config(void) {
|
||||
return udev_parse_config_full(NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user