1
0
mirror of https://github.com/systemd/systemd synced 2025-12-27 03:14:46 +01:00

Compare commits

..

No commits in common. "efdbf5fe9c4222725899d0e1093a09c5d649ab68" and "b10ceb47836201faa0d374cd9f536d2f503457a7" have entirely different histories.

8 changed files with 31 additions and 115 deletions

View File

@ -93,9 +93,6 @@ ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-boot%n"
KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}"
ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n"
# compatible links for ATA devices
KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}"
ENV{DEVTYPE}=="partition", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}-part%n"
# legacy virtio-pci by-path links (deprecated)
KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}"

View File

@ -49,7 +49,6 @@ SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsys
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k"
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target", ENV{SYSTEMD_USER_WANTS}+="bluetooth.target"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0b????:*", ENV{ID_SMARTCARD_READER}="1"
ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target", ENV{SYSTEMD_USER_WANTS}+="smartcard.target"
SUBSYSTEM=="sound", KERNEL=="card*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target", ENV{SYSTEMD_USER_WANTS}+="sound.target"

View File

@ -119,18 +119,15 @@ int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, ProcCmdlineF
/* We parse the EFI variable first, because later settings have higher priority. */
if (!FLAGS_SET(flags, PROC_CMDLINE_IGNORE_EFI_OPTIONS)) {
r = systemd_efi_options_variable(&line);
if (r < 0 && r != -ENODATA)
log_debug_errno(r, "Failed to get SystemdOptions EFI variable, ignoring: %m");
r = systemd_efi_options_variable(&line);
if (r < 0 && r != -ENODATA)
log_debug_errno(r, "Failed to get SystemdOptions EFI variable, ignoring: %m");
r = proc_cmdline_parse_given(line, parse_item, data, flags);
if (r < 0)
return r;
line = mfree(line);
}
r = proc_cmdline_parse_given(line, parse_item, data, flags);
if (r < 0)
return r;
line = mfree(line);
r = proc_cmdline(&line);
if (r < 0)
return r;
@ -221,7 +218,7 @@ static int cmdline_get_key(const char *line, const char *key, ProcCmdlineFlags f
}
int proc_cmdline_get_key(const char *key, ProcCmdlineFlags flags, char **ret_value) {
_cleanup_free_ char *line = NULL, *v = NULL;
_cleanup_free_ char *line = NULL;
int r;
/* Looks for a specific key on the kernel command line and (with lower priority) the EFI variable.
@ -248,27 +245,14 @@ int proc_cmdline_get_key(const char *key, ProcCmdlineFlags flags, char **ret_val
if (r < 0)
return r;
if (FLAGS_SET(flags, PROC_CMDLINE_IGNORE_EFI_OPTIONS)) /* Shortcut */
return cmdline_get_key(line, key, flags, ret_value);
r = cmdline_get_key(line, key, flags, ret_value ? &v : NULL);
if (r < 0)
r = cmdline_get_key(line, key, flags, ret_value);
if (r != 0) /* Either error or true if found. */
return r;
if (r > 0) {
if (ret_value)
*ret_value = TAKE_PTR(v);
return r;
}
line = mfree(line);
r = systemd_efi_options_variable(&line);
if (r == -ENODATA) {
if (ret_value)
*ret_value = NULL;
if (r == -ENODATA)
return false; /* Not found */
}
if (r < 0)
return r;
@ -302,7 +286,6 @@ int proc_cmdline_get_bool(const char *key, bool *ret) {
int proc_cmdline_get_key_many_internal(ProcCmdlineFlags flags, ...) {
_cleanup_free_ char *line = NULL;
bool processing_efi = true;
const char *p;
va_list ap;
int r, ret = 0;
@ -313,11 +296,9 @@ int proc_cmdline_get_key_many_internal(ProcCmdlineFlags flags, ...) {
/* This call may clobber arguments on failure! */
if (!FLAGS_SET(flags, PROC_CMDLINE_IGNORE_EFI_OPTIONS)) {
r = systemd_efi_options_variable(&line);
if (r < 0 && r != -ENODATA)
log_debug_errno(r, "Failed to get SystemdOptions EFI variable, ignoring: %m");
}
r = proc_cmdline(&line);
if (r < 0)
return r;
p = line;
for (;;) {
@ -326,22 +307,8 @@ int proc_cmdline_get_key_many_internal(ProcCmdlineFlags flags, ...) {
r = proc_cmdline_extract_first(&p, &word, flags);
if (r < 0)
return r;
if (r == 0) {
/* We finished with this command line. If this was the EFI one, then let's proceed with the regular one */
if (processing_efi) {
processing_efi = false;
line = mfree(line);
r = proc_cmdline(&line);
if (r < 0)
return r;
p = line;
continue;
}
if (r == 0)
break;
}
va_start(ap, flags);

View File

@ -6,10 +6,9 @@
#include "log.h"
typedef enum ProcCmdlineFlags {
PROC_CMDLINE_STRIP_RD_PREFIX = 1 << 0, /* automatically strip "rd." prefix if it is set (and we are in the initrd, since otherwise we'd not consider it anyway) */
PROC_CMDLINE_VALUE_OPTIONAL = 1 << 1, /* the value is optional (for boolean switches that can omit the value) */
PROC_CMDLINE_RD_STRICT = 1 << 2, /* ignore this in the initrd */
PROC_CMDLINE_IGNORE_EFI_OPTIONS = 1 << 3, /* don't check systemd's private EFI variable */
PROC_CMDLINE_STRIP_RD_PREFIX = 1 << 0, /* automatically strip "rd." prefix if it is set (and we are in the initrd, since otherwise we'd not consider it anyway) */
PROC_CMDLINE_VALUE_OPTIONAL = 1 << 1, /* the value is optional (for boolean switches that can omit the value) */
PROC_CMDLINE_RD_STRICT = 1 << 2, /* ignore this in the initrd */
} ProcCmdlineFlags;
typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *data);

View File

@ -2364,7 +2364,7 @@ static int home_dispatch_release(Home *h, Operation *o) {
case HOME_UNFIXATED:
case HOME_ABSENT:
case HOME_INACTIVE:
r = 1; /* done */
r = 0; /* done */
break;
case HOME_LOCKED:
@ -2384,7 +2384,7 @@ static int home_dispatch_release(Home *h, Operation *o) {
assert(!h->current_operation);
if (r != 0) /* failure or completed */
if (r <= 0) /* failure or completed */
operation_result(o, r, &error);
else /* ongoing */
h->current_operation = operation_ref(o);
@ -2406,12 +2406,12 @@ static int home_dispatch_lock_all(Home *h, Operation *o) {
case HOME_ABSENT:
case HOME_INACTIVE:
log_info("Home %s is not active, no locking necessary.", h->user_name);
r = 1; /* done */
r = 0; /* done */
break;
case HOME_LOCKED:
log_info("Home %s is already locked.", h->user_name);
r = 1; /* done */
r = 0; /* done */
break;
case HOME_ACTIVE:

View File

@ -227,7 +227,7 @@ static int path_is_runtime(const LookupPaths *p, const char *path, bool check_pa
path_equal_ptr(path, p->runtime_control);
}
static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
static int path_is_vendor(const LookupPaths *p, const char *path) {
const char *rpath;
assert(p);
@ -245,9 +245,6 @@ static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
return true;
#endif
if (path_is_generator(p, rpath))
return true;
return path_equal(rpath, SYSTEM_DATA_UNIT_PATH);
}
@ -2377,7 +2374,7 @@ int unit_file_revert(
return -errno;
} else if (S_ISREG(st.st_mode)) {
/* Check if there's a vendor version */
r = path_is_vendor_or_generator(&paths, path);
r = path_is_vendor(&paths, path);
if (r < 0)
return r;
if (r > 0)

View File

@ -253,20 +253,14 @@ static sd_device *handle_scsi_iscsi(sd_device *parent, char **path) {
return parent;
}
static sd_device *handle_scsi_ata(sd_device *parent, char **path, char **compat_path) {
static sd_device *handle_scsi_ata(sd_device *parent, char **path) {
sd_device *targetdev, *target_parent;
_cleanup_(sd_device_unrefp) sd_device *atadev = NULL;
const char *port_no, *sysname, *name;
unsigned host, bus, target, lun;
const char *port_no, *sysname;
assert(parent);
assert(path);
if (sd_device_get_sysname(parent, &name) < 0)
return NULL;
if (sscanf(name, "%u:%u:%u:%u", &host, &bus, &target, &lun) != 4)
return NULL;
if (sd_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host", &targetdev) < 0)
return NULL;
@ -281,17 +275,7 @@ static sd_device *handle_scsi_ata(sd_device *parent, char **path, char **compat_
if (sd_device_get_sysattr_value(atadev, "port_no", &port_no) < 0)
return NULL;
if (bus != 0)
/* Devices behind port multiplier have a bus != 0*/
path_prepend(path, "ata-%s.%u.0", port_no, bus);
else
/* Master/slave are distinguished by target id */
path_prepend(path, "ata-%s.%u", port_no, target);
/* old compatible persistent link for ATA devices */
if (compat_path)
path_prepend(compat_path, "ata-%s", port_no);
path_prepend(path, "ata-%s", port_no);
return parent;
}
@ -408,7 +392,7 @@ static sd_device *handle_scsi_hyperv(sd_device *parent, char **path, size_t guid
return parent;
}
static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path, bool *supported_parent) {
static sd_device *handle_scsi(sd_device *parent, char **path, bool *supported_parent) {
const char *devtype, *id, *name;
if (sd_device_get_devtype(parent, &devtype) < 0 ||
@ -442,7 +426,7 @@ static sd_device *handle_scsi(sd_device *parent, char **path, char **compat_path
}
if (strstr(name, "/ata"))
return handle_scsi_ata(parent, path, compat_path);
return handle_scsi_ata(parent, path);
if (strstr(name, "/vmbus_"))
return handle_scsi_hyperv(parent, path, 37);
@ -536,7 +520,6 @@ static sd_device *handle_ap(sd_device *parent, char **path) {
static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
sd_device *parent;
_cleanup_free_ char *path = NULL;
_cleanup_free_ char *compat_path = NULL;
bool supported_transport = false;
bool supported_parent = false;
const char *subsystem;
@ -554,7 +537,7 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
} else if (streq(subsys, "scsi_tape")) {
handle_scsi_tape(parent, &path);
} else if (streq(subsys, "scsi")) {
parent = handle_scsi(parent, &path, &compat_path, &supported_parent);
parent = handle_scsi(parent, &path, &supported_parent);
supported_transport = true;
} else if (streq(subsys, "cciss")) {
parent = handle_cciss(parent, &path);
@ -574,27 +557,19 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
}
} else if (streq(subsys, "pci")) {
path_prepend(&path, "pci-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "pci-%s", sysname);
parent = skip_subsystem(parent, "pci");
supported_parent = true;
} else if (streq(subsys, "platform")) {
path_prepend(&path, "platform-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "platform-%s", sysname);
parent = skip_subsystem(parent, "platform");
supported_transport = true;
supported_parent = true;
} else if (streq(subsys, "acpi")) {
path_prepend(&path, "acpi-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "acpi-%s", sysname);
parent = skip_subsystem(parent, "acpi");
supported_parent = true;
} else if (streq(subsys, "xen")) {
path_prepend(&path, "xen-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "xen-%s", sysname);
parent = skip_subsystem(parent, "xen");
supported_parent = true;
} else if (streq(subsys, "virtio")) {
@ -602,22 +577,16 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
supported_transport = true;
} else if (streq(subsys, "scm")) {
path_prepend(&path, "scm-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "scm-%s", sysname);
parent = skip_subsystem(parent, "scm");
supported_transport = true;
supported_parent = true;
} else if (streq(subsys, "ccw")) {
path_prepend(&path, "ccw-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "ccw-%s", sysname);
parent = skip_subsystem(parent, "ccw");
supported_transport = true;
supported_parent = true;
} else if (streq(subsys, "ccwgroup")) {
path_prepend(&path, "ccwgroup-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "ccwgroup-%s", sysname);
parent = skip_subsystem(parent, "ccwgroup");
supported_transport = true;
supported_parent = true;
@ -627,8 +596,6 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
supported_parent = true;
} else if (streq(subsys, "iucv")) {
path_prepend(&path, "iucv-%s", sysname);
if (compat_path)
path_prepend(&compat_path, "iucv-%s", sysname);
parent = skip_subsystem(parent, "iucv");
supported_transport = true;
supported_parent = true;
@ -637,8 +604,6 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
if (sd_device_get_sysattr_value(dev, "nsid", &nsid) >= 0) {
path_prepend(&path, "nvme-%s", nsid);
if (compat_path)
path_prepend(&compat_path, "nvme-%s", nsid);
parent = skip_subsystem(parent, "nvme");
supported_parent = true;
supported_transport = true;
@ -706,14 +671,6 @@ static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag);
}
/*
* Compatible link generation for ATA devices
* we assign compat_link to the env variable
* ID_PATH_ATA_COMPAT
*/
if (compat_path)
udev_builtin_add_property(dev, test, "ID_PATH_ATA_COMPAT", compat_path);
return 0;
}

View File

@ -1814,7 +1814,7 @@ static int udev_rule_apply_token_to_event(
case TK_M_IMPORT_CMDLINE: {
_cleanup_free_ char *value = NULL;
r = proc_cmdline_get_key(token->value, PROC_CMDLINE_VALUE_OPTIONAL|PROC_CMDLINE_IGNORE_EFI_OPTIONS, &value);
r = proc_cmdline_get_key(token->value, PROC_CMDLINE_VALUE_OPTIONAL, &value);
if (r < 0)
return log_rule_error_errno(dev, rules, r,
"Failed to read '%s' option from /proc/cmdline: %m",