udev: allow substitutions for SECLABEL key (#4505)

This commit is contained in:
Michal Sekletar 2016-10-28 12:09:14 +02:00 committed by Martin Pitt
parent e100155dcc
commit 4f985bd802
2 changed files with 9 additions and 3 deletions

View file

@ -577,8 +577,8 @@
<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

View 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);