]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: allow substitutions for SECLABEL key (#4505)
authorMichal Sekletar <msekletar@users.noreply.github.com>
Fri, 28 Oct 2016 10:09:14 +0000 (12:09 +0200)
committerMartin Pitt <martin.pitt@ubuntu.com>
Fri, 28 Oct 2016 10:09:14 +0000 (12:09 +0200)
man/udev.xml
src/udev/udev-rules.c

index dd5563605ca63cc704b7804e3074da8824993cf1..3359fb0865ac4f5409d3293479aa698e7e37e0d8 100644 (file)
 
       <para>The <varname>NAME</varname>, <varname>SYMLINK</varname>,
       <varname>PROGRAM</varname>, <varname>OWNER</varname>,
-      <varname>GROUP</varname>, <varname>MODE</varname>, and
-      <varname>RUN</varname> fields support simple string substitutions.
+      <varname>GROUP</varname>, <varname>MODE</varname>, <varname>SECLABEL</varname>,
+      and <varname>RUN</varname> fields support simple string substitutions.
       The <varname>RUN</varname> substitutions are performed after all rules
       have been processed, right before the program is executed, allowing for
       the use of device properties set by earlier matching rules. For all other
index 7619c8371b5ea32ad8dc300a934ad60af09f667a..f6c416bf704d44d45c9ed0ce07bcea0b7975af87 100644 (file)
@@ -2218,10 +2218,16 @@ void udev_rules_apply_to_event(struct udev_rules *rules,
                                   rule->rule.filename_line);
                         break;
                 case TK_A_SECLABEL: {
+                        char label_str[UTIL_LINE_SIZE] = {};
                         const char *name, *label;
 
                         name = rules_str(rules, cur->key.attr_off);
-                        label = rules_str(rules, cur->key.value_off);
+                        udev_event_apply_format(event, rules_str(rules, cur->key.value_off), label_str, sizeof(label_str));
+                        if (label_str[0] != '\0')
+                                label = label_str;
+                        else
+                                label = rules_str(rules, cur->key.value_off);
+
                         if (cur->key.op == OP_ASSIGN || cur->key.op == OP_ASSIGN_FINAL)
                                 udev_list_cleanup(&event->seclabel_list);
                         udev_list_entry_add(&event->seclabel_list, name, label);