mdev: remove undocumented subsystem/devname matching hack
It was colliding with matching of devnames with slashes. We need a more generic way to examine env.vars in rules anyway. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
ea57f51819
commit
b6beada5a1
@ -53,7 +53,6 @@ sr[0-9]* root:cdrom 660 @ln -sf $MDEV cdrom
|
|||||||
fd[0-9]* root:floppy 660
|
fd[0-9]* root:floppy 660
|
||||||
|
|
||||||
# net devices
|
# net devices
|
||||||
-net/.* root:root 600 @nameif
|
|
||||||
tun[0-9]* root:root 600 =net/
|
tun[0-9]* root:root 600 =net/
|
||||||
tap[0-9]* root:root 600 =net/
|
tap[0-9]* root:root 600 =net/
|
||||||
|
|
||||||
|
@ -236,7 +236,6 @@ enum { OP_add, OP_remove };
|
|||||||
struct rule {
|
struct rule {
|
||||||
bool keep_matching;
|
bool keep_matching;
|
||||||
bool regex_compiled;
|
bool regex_compiled;
|
||||||
bool regex_has_slash;
|
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
int maj, min0, min1;
|
int maj, min0, min1;
|
||||||
struct bb_uidgid_t ugid;
|
struct bb_uidgid_t ugid;
|
||||||
@ -340,7 +339,6 @@ static void parse_next_rule(void)
|
|||||||
}
|
}
|
||||||
xregcomp(&G.cur_rule.match, val, REG_EXTENDED);
|
xregcomp(&G.cur_rule.match, val, REG_EXTENDED);
|
||||||
G.cur_rule.regex_compiled = 1;
|
G.cur_rule.regex_compiled = 1;
|
||||||
G.cur_rule.regex_has_slash = (strchr(val, '/') != NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 2nd field: uid:gid - device ownership */
|
/* 2nd field: uid:gid - device ownership */
|
||||||
@ -467,7 +465,6 @@ static char *build_alias(char *alias, const char *device_name)
|
|||||||
*/
|
*/
|
||||||
static void make_device(char *device_name, char *path, int operation)
|
static void make_device(char *device_name, char *path, int operation)
|
||||||
{
|
{
|
||||||
char *subsystem_slash_devname;
|
|
||||||
int major, minor, type, len;
|
int major, minor, type, len;
|
||||||
|
|
||||||
if (G.verbose)
|
if (G.verbose)
|
||||||
@ -511,24 +508,6 @@ static void make_device(char *device_name, char *path, int operation)
|
|||||||
if (strstr(path, "/block/") || (G.subsystem && strncmp(G.subsystem, "block", 5) == 0))
|
if (strstr(path, "/block/") || (G.subsystem && strncmp(G.subsystem, "block", 5) == 0))
|
||||||
type = S_IFBLK;
|
type = S_IFBLK;
|
||||||
|
|
||||||
/* Make path point to "subsystem/device_name" */
|
|
||||||
subsystem_slash_devname = NULL;
|
|
||||||
/* Check for coldplug invocations first */
|
|
||||||
if (strncmp(path, "/sys/block/", 11) == 0) /* legacy case */
|
|
||||||
path += sizeof("/sys/") - 1;
|
|
||||||
else if (strncmp(path, "/sys/class/", 11) == 0)
|
|
||||||
path += sizeof("/sys/class/") - 1;
|
|
||||||
else {
|
|
||||||
/* Example of a hotplug invocation:
|
|
||||||
* SUBSYSTEM="block"
|
|
||||||
* DEVPATH="/sys" + "/devices/virtual/mtd/mtd3/mtdblock3"
|
|
||||||
* ("/sys" is added by mdev_main)
|
|
||||||
* - path does not contain subsystem
|
|
||||||
*/
|
|
||||||
subsystem_slash_devname = concat_path_file(G.subsystem, device_name);
|
|
||||||
path = subsystem_slash_devname;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if ENABLE_FEATURE_MDEV_CONF
|
#if ENABLE_FEATURE_MDEV_CONF
|
||||||
G.rule_idx = 0; /* restart from the beginning (think mdev -s) */
|
G.rule_idx = 0; /* restart from the beginning (think mdev -s) */
|
||||||
#endif
|
#endif
|
||||||
@ -541,7 +520,7 @@ static void make_device(char *device_name, char *path, int operation)
|
|||||||
char *node_name;
|
char *node_name;
|
||||||
const struct rule *rule;
|
const struct rule *rule;
|
||||||
|
|
||||||
str_to_match = "";
|
str_to_match = device_name;
|
||||||
|
|
||||||
rule = next_rule();
|
rule = next_rule();
|
||||||
|
|
||||||
@ -559,12 +538,8 @@ static void make_device(char *device_name, char *path, int operation)
|
|||||||
dbg("getenv('%s'):'%s'", rule->envvar, str_to_match);
|
dbg("getenv('%s'):'%s'", rule->envvar, str_to_match);
|
||||||
if (!str_to_match)
|
if (!str_to_match)
|
||||||
continue;
|
continue;
|
||||||
} else {
|
|
||||||
//TODO: $DEVNAME can have slashes too,
|
|
||||||
// we should stop abusing '/' as a special syntax in our regex'es
|
|
||||||
/* regex to match [subsystem/]device_name */
|
|
||||||
str_to_match = (rule->regex_has_slash ? path : device_name);
|
|
||||||
}
|
}
|
||||||
|
/* else: str_to_match = device_name */
|
||||||
|
|
||||||
if (rule->regex_compiled) {
|
if (rule->regex_compiled) {
|
||||||
int regex_match = regexec(&rule->match, str_to_match, ARRAY_SIZE(off), off, 0);
|
int regex_match = regexec(&rule->match, str_to_match, ARRAY_SIZE(off), off, 0);
|
||||||
@ -727,8 +702,6 @@ static void make_device(char *device_name, char *path, int operation)
|
|||||||
if (!ENABLE_FEATURE_MDEV_CONF || !rule->keep_matching)
|
if (!ENABLE_FEATURE_MDEV_CONF || !rule->keep_matching)
|
||||||
break;
|
break;
|
||||||
} /* for (;;) */
|
} /* for (;;) */
|
||||||
|
|
||||||
free(subsystem_slash_devname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* File callback for /sys/ traversal */
|
/* File callback for /sys/ traversal */
|
||||||
|
Loading…
Reference in New Issue
Block a user