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.
efdbf5fe9c
...
b10ceb4783
@ -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}"
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user