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:
Denys Vlasenko 2012-05-18 15:11:16 +02:00
parent ea57f51819
commit b6beada5a1
2 changed files with 2 additions and 30 deletions

View File

@ -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/

View File

@ -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 */