mirror of
https://github.com/systemd/systemd
synced 2024-10-15 04:24:19 +00:00
Merge pull request #13253 from yuwata/udev-update-logs
udev: update log messages
This commit is contained in:
commit
a94d2fa81a
|
@ -37,6 +37,7 @@
|
||||||
#include "user-util.h"
|
#include "user-util.h"
|
||||||
|
|
||||||
typedef struct Spawn {
|
typedef struct Spawn {
|
||||||
|
sd_device *device;
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
usec_t timeout_warn_usec;
|
usec_t timeout_warn_usec;
|
||||||
|
@ -550,7 +551,8 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd
|
||||||
l = read(fd, p, size - 1);
|
l = read(fd, p, size - 1);
|
||||||
if (l < 0) {
|
if (l < 0) {
|
||||||
if (errno != EAGAIN)
|
if (errno != EAGAIN)
|
||||||
log_error_errno(errno, "Failed to read stdout of '%s': %m", spawn->cmd);
|
log_device_error_errno(spawn->device, errno,
|
||||||
|
"Failed to read stdout of '%s': %m", spawn->cmd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -569,8 +571,8 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
STRV_FOREACH(q, v)
|
STRV_FOREACH(q, v)
|
||||||
log_debug("'%s'(%s) '%s'", spawn->cmd,
|
log_device_debug(spawn->device, "'%s'(%s) '%s'", spawn->cmd,
|
||||||
fd == spawn->fd_stdout ? "out" : "err", *q);
|
fd == spawn->fd_stdout ? "out" : "err", *q);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -584,8 +586,9 @@ static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
|
||||||
|
|
||||||
kill_and_sigcont(spawn->pid, SIGKILL);
|
kill_and_sigcont(spawn->pid, SIGKILL);
|
||||||
|
|
||||||
log_error("Spawned process '%s' ["PID_FMT"] timed out after %s, killing", spawn->cmd, spawn->pid,
|
log_device_error(spawn->device, "Spawned process '%s' ["PID_FMT"] timed out after %s, killing",
|
||||||
format_timespan(timeout, sizeof(timeout), spawn->timeout_usec, USEC_PER_SEC));
|
spawn->cmd, spawn->pid,
|
||||||
|
format_timespan(timeout, sizeof(timeout), spawn->timeout_usec, USEC_PER_SEC));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -596,8 +599,9 @@ static int on_spawn_timeout_warning(sd_event_source *s, uint64_t usec, void *use
|
||||||
|
|
||||||
assert(spawn);
|
assert(spawn);
|
||||||
|
|
||||||
log_warning("Spawned process '%s' ["PID_FMT"] is taking longer than %s to complete", spawn->cmd, spawn->pid,
|
log_device_warning(spawn->device, "Spawned process '%s' ["PID_FMT"] is taking longer than %s to complete",
|
||||||
format_timespan(timeout, sizeof(timeout), spawn->timeout_warn_usec, USEC_PER_SEC));
|
spawn->cmd, spawn->pid,
|
||||||
|
format_timespan(timeout, sizeof(timeout), spawn->timeout_warn_usec, USEC_PER_SEC));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -611,18 +615,18 @@ static int on_spawn_sigchld(sd_event_source *s, const siginfo_t *si, void *userd
|
||||||
switch (si->si_code) {
|
switch (si->si_code) {
|
||||||
case CLD_EXITED:
|
case CLD_EXITED:
|
||||||
if (si->si_status == 0)
|
if (si->si_status == 0)
|
||||||
log_debug("Process '%s' succeeded.", spawn->cmd);
|
log_device_debug(spawn->device, "Process '%s' succeeded.", spawn->cmd);
|
||||||
else
|
else
|
||||||
log_full(spawn->accept_failure ? LOG_DEBUG : LOG_WARNING,
|
log_device_full(spawn->device, spawn->accept_failure ? LOG_DEBUG : LOG_WARNING, 0,
|
||||||
"Process '%s' failed with exit code %i.", spawn->cmd, si->si_status);
|
"Process '%s' failed with exit code %i.", spawn->cmd, si->si_status);
|
||||||
ret = si->si_status;
|
ret = si->si_status;
|
||||||
break;
|
break;
|
||||||
case CLD_KILLED:
|
case CLD_KILLED:
|
||||||
case CLD_DUMPED:
|
case CLD_DUMPED:
|
||||||
log_error("Process '%s' terminated by signal %s.", spawn->cmd, signal_to_string(si->si_status));
|
log_device_error(spawn->device, "Process '%s' terminated by signal %s.", spawn->cmd, signal_to_string(si->si_status));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
log_error("Process '%s' failed due to unknown reason.", spawn->cmd);
|
log_device_error(spawn->device, "Process '%s' failed due to unknown reason.", spawn->cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
sd_event_exit(sd_event_source_get_event(s), ret);
|
sd_event_exit(sd_event_source_get_event(s), ret);
|
||||||
|
@ -704,19 +708,21 @@ int udev_event_spawn(UdevEvent *event,
|
||||||
/* pipes from child to parent */
|
/* pipes from child to parent */
|
||||||
if (result || log_get_max_level() >= LOG_INFO)
|
if (result || log_get_max_level() >= LOG_INFO)
|
||||||
if (pipe2(outpipe, O_NONBLOCK|O_CLOEXEC) != 0)
|
if (pipe2(outpipe, O_NONBLOCK|O_CLOEXEC) != 0)
|
||||||
return log_error_errno(errno, "Failed to create pipe for command '%s': %m", cmd);
|
return log_device_error_errno(event->dev, errno,
|
||||||
|
"Failed to create pipe for command '%s': %m", cmd);
|
||||||
|
|
||||||
if (log_get_max_level() >= LOG_INFO)
|
if (log_get_max_level() >= LOG_INFO)
|
||||||
if (pipe2(errpipe, O_NONBLOCK|O_CLOEXEC) != 0)
|
if (pipe2(errpipe, O_NONBLOCK|O_CLOEXEC) != 0)
|
||||||
return log_error_errno(errno, "Failed to create pipe for command '%s': %m", cmd);
|
return log_device_error_errno(event->dev, errno,
|
||||||
|
"Failed to create pipe for command '%s': %m", cmd);
|
||||||
|
|
||||||
argv = strv_split_full(cmd, NULL, SPLIT_QUOTES|SPLIT_RELAX);
|
argv = strv_split_full(cmd, NULL, SPLIT_QUOTES|SPLIT_RELAX);
|
||||||
if (!argv)
|
if (!argv)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
if (isempty(argv[0]))
|
if (isempty(argv[0]))
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_device_error_errno(event->dev, SYNTHETIC_ERRNO(EINVAL),
|
||||||
"Invalid command '%s'", cmd);
|
"Invalid command '%s'", cmd);
|
||||||
|
|
||||||
/* allow programs in /usr/lib/udev/ to be called without the path */
|
/* allow programs in /usr/lib/udev/ to be called without the path */
|
||||||
if (!path_is_absolute(argv[0])) {
|
if (!path_is_absolute(argv[0])) {
|
||||||
|
@ -733,11 +739,12 @@ int udev_event_spawn(UdevEvent *event,
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_device_error_errno(event->dev, r, "Failed to get device properties");
|
return log_device_error_errno(event->dev, r, "Failed to get device properties");
|
||||||
|
|
||||||
log_debug("Starting '%s'", cmd);
|
log_device_debug(event->dev, "Starting '%s'", cmd);
|
||||||
|
|
||||||
r = safe_fork("(spawn)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
|
r = safe_fork("(spawn)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to fork() to execute command '%s': %m", cmd);
|
return log_device_error_errno(event->dev, r,
|
||||||
|
"Failed to fork() to execute command '%s': %m", cmd);
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
if (rearrange_stdio(-1, outpipe[WRITE_END], errpipe[WRITE_END]) < 0)
|
if (rearrange_stdio(-1, outpipe[WRITE_END], errpipe[WRITE_END]) < 0)
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
|
@ -754,6 +761,7 @@ int udev_event_spawn(UdevEvent *event,
|
||||||
errpipe[WRITE_END] = safe_close(errpipe[WRITE_END]);
|
errpipe[WRITE_END] = safe_close(errpipe[WRITE_END]);
|
||||||
|
|
||||||
spawn = (Spawn) {
|
spawn = (Spawn) {
|
||||||
|
.device = event->dev,
|
||||||
.cmd = cmd,
|
.cmd = cmd,
|
||||||
.pid = pid,
|
.pid = pid,
|
||||||
.accept_failure = accept_failure,
|
.accept_failure = accept_failure,
|
||||||
|
@ -767,7 +775,8 @@ int udev_event_spawn(UdevEvent *event,
|
||||||
};
|
};
|
||||||
r = spawn_wait(&spawn);
|
r = spawn_wait(&spawn);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to wait for spawned command '%s': %m", cmd);
|
return log_device_error_errno(event->dev, r,
|
||||||
|
"Failed to wait for spawned command '%s': %m", cmd);
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
result[spawn.result_len] = '\0';
|
result[spawn.result_len] = '\0';
|
||||||
|
|
|
@ -316,14 +316,25 @@ static int node_permissions_apply(sd_device *dev, bool apply_mac,
|
||||||
Iterator i;
|
Iterator i;
|
||||||
|
|
||||||
if (apply_mode || apply_uid || apply_gid) {
|
if (apply_mode || apply_uid || apply_gid) {
|
||||||
log_device_debug(dev, "Setting permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
|
log_device_debug(dev, "Setting permissions %s, uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o",
|
||||||
|
devnode,
|
||||||
|
uid_is_valid(uid) ? uid : stats.st_uid,
|
||||||
|
gid_is_valid(gid) ? gid : stats.st_gid,
|
||||||
|
mode != MODE_INVALID ? mode & 0777 : stats.st_mode & 0777);
|
||||||
|
|
||||||
r = chmod_and_chown(devnode, mode, uid, gid);
|
r = chmod_and_chown(devnode, mode, uid, gid);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_device_warning_errno(dev, r, "Failed to set owner/mode of %s to uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o: %m",
|
log_device_warning_errno(dev, r, "Failed to set owner/mode of %s to uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o: %m",
|
||||||
devnode, uid, gid, mode);
|
devnode,
|
||||||
|
uid_is_valid(uid) ? uid : stats.st_uid,
|
||||||
|
gid_is_valid(gid) ? gid : stats.st_gid,
|
||||||
|
mode != MODE_INVALID ? mode & 0777 : stats.st_mode & 0777);
|
||||||
} else
|
} else
|
||||||
log_device_debug(dev, "Preserve permissions of %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
|
log_device_debug(dev, "Preserve permissions of %s, uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o",
|
||||||
|
devnode,
|
||||||
|
uid_is_valid(uid) ? uid : stats.st_uid,
|
||||||
|
gid_is_valid(gid) ? gid : stats.st_gid,
|
||||||
|
mode != MODE_INVALID ? mode & 0777 : stats.st_mode & 0777);
|
||||||
|
|
||||||
/* apply SECLABEL{$module}=$label */
|
/* apply SECLABEL{$module}=$label */
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(label, name, seclabel_list, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(label, name, seclabel_list, i) {
|
||||||
|
@ -409,8 +420,7 @@ int udev_node_add(sd_device *dev, bool apply,
|
||||||
const char *id_filename = NULL;
|
const char *id_filename = NULL;
|
||||||
|
|
||||||
(void) device_get_id_filename(dev, &id_filename);
|
(void) device_get_id_filename(dev, &id_filename);
|
||||||
log_device_debug(dev, "Handling device node '%s', devnum=%s, mode=%#o, uid="UID_FMT", gid="GID_FMT,
|
log_device_debug(dev, "Handling device node '%s', devnum=%s", devnode, strnull(id_filename));
|
||||||
devnode, strnull(id_filename), mode, uid, gid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r = node_permissions_apply(dev, apply, mode, uid, gid, seclabel_list);
|
r = node_permissions_apply(dev, apply, mode, uid, gid, seclabel_list);
|
||||||
|
|
Loading…
Reference in a new issue