# Pull in backlight save/restore for all backlight devices and
# keyboard backlights
-ACTION=="add", SUBSYSTEM=="backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
-ACTION=="add", SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
+ACTION=="add", SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
+ACTION=="add", SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
# Pull in rfkill save/restore for all rfkill devices
int main(int argc, char *argv[]) {
_cleanup_udev_unref_ struct udev *udev = NULL;
_cleanup_udev_device_unref_ struct udev_device *device = NULL;
- _cleanup_free_ char *saved = NULL, *ss = NULL;
- const char *sysname;
+ _cleanup_free_ char *saved = NULL, *ss = NULL, *escaped_ss = NULL, *escaped_sysname = NULL, *escaped_path_id = NULL;
+ const char *sysname, *path_id;
int r;
if (argc != 3) {
return EXIT_FAILURE;
}
- saved = strjoin("/var/lib/systemd/backlight/", ss, ":", sysname, NULL);
+ escaped_ss = cescape(ss);
+ if (!escaped_ss) {
+ log_oom();
+ return EXIT_FAILURE;
+ }
+
+ escaped_sysname = cescape(sysname);
+ if (!escaped_sysname) {
+ log_oom();
+ return EXIT_FAILURE;
+ }
+
+ path_id = udev_device_get_property_value(device, "ID_PATH");
+ if (path_id) {
+ escaped_path_id = cescape(path_id);
+ if (!escaped_path_id) {
+ log_oom();
+ return EXIT_FAILURE;
+ }
+
+ saved = strjoin("/var/lib/systemd/backlight/", escaped_path_id, ":", escaped_ss, ":", escaped_sysname, NULL);
+ } else
+ saved = strjoin("/var/lib/systemd/backlight/", escaped_ss, ":", escaped_sysname, NULL);
+
if (!saved) {
log_oom();
return EXIT_FAILURE;
return EXIT_FAILURE;
}
- saved = strjoin("/var/lib/systemd/rfkill/", escaped_path_id, "-", escaped_name, NULL);
+ saved = strjoin("/var/lib/systemd/rfkill/", escaped_path_id, ":", escaped_name, NULL);
} else
saved = strjoin("/var/lib/systemd/rfkill/", escaped_name, NULL);