X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_rules_parse.c;h=929a5e6f4cca15e3107a1158a22462d048b5f31a;hp=36bf97177db4172be9f648f18d1c36195a0a6d5e;hb=ffd5c6893756af43daf2a9a30bdcff13784a1ec4;hpb=6bf0ffe8fd312c1e6549cb1721d7a7efeee77185 diff --git a/udev_rules_parse.c b/udev_rules_parse.c index 36bf97177..929a5e6f4 100644 --- a/udev_rules_parse.c +++ b/udev_rules_parse.c @@ -375,6 +375,35 @@ static int rules_parse(const char *filename) continue; } + if (strncasecmp(key, KEY_IMPORT, sizeof(KEY_IMPORT)-1) == 0) { + attr = get_key_attribute(key + sizeof(KEY_IMPORT)-1); + if (attr && strstr(attr, "program")) { + dbg(KEY_IMPORT" will be executed"); + rule.import_exec = 1; + } else if (attr && strstr(attr, "file")) { + dbg(KEY_IMPORT" will be included as file"); + } else { + /* figure it out if it is executable */ + char file[PATH_SIZE]; + char *pos; + struct stat stats; + + strlcpy(file, value, sizeof(file)); + pos = strchr(file, ' '); + if (pos) + pos[0] = '\0'; + dbg(KEY_IMPORT" auto mode for '%s'", file); + if (!lstat(file, &stats) && (stats.st_mode & S_IXUSR)) { + dbg(KEY_IMPORT" is executable, will be executed"); + rule.import_exec = 1; + } + } + strlcpy(rule.import, value, sizeof(rule.import)); + rule.import_operation = operation; + valid = 1; + continue; + } + if (strcasecmp(key, KEY_DRIVER) == 0) { strlcpy(rule.driver, value, sizeof(rule.driver)); rule.driver_operation = operation; @@ -404,7 +433,6 @@ static int rules_parse(const char *filename) dbg("creation of partition nodes requested"); rule.partitions = DEFAULT_PARTITIONS_COUNT; } - /* FIXME: remove old style option and make OPTIONS= mandatory */ if (strstr(attr, OPTION_IGNORE_REMOVE) != NULL) { dbg("remove event should be ignored"); rule.ignore_remove = 1;