diff options
Diffstat (limited to 'udev')
-rw-r--r-- | udev/udev-rules.c | 8 | ||||
-rw-r--r-- | udev/udevd.c | 19 | ||||
-rw-r--r-- | udev/udevd.xml | 11 |
3 files changed, 31 insertions, 7 deletions
diff --git a/udev/udev-rules.c b/udev/udev-rules.c index 2d120dd927..ccf1eaaf8f 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -1454,10 +1454,10 @@ static int add_rule(struct udev_rules *rules, char *line, uid = strtoul(value, &endptr, 10); if (endptr[0] == '\0') { rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid); - } else if (rules->resolve_names && strchr("$%", value[0]) == NULL) { + } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { uid = add_uid(rules, value); rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid); - } else { + } else if (rules->resolve_names == 0) { rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL); } rule_tmp.rule.rule.flags = 1; @@ -1472,10 +1472,10 @@ static int add_rule(struct udev_rules *rules, char *line, gid = strtoul(value, &endptr, 10); if (endptr[0] == '\0') { rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid); - } else if (rules->resolve_names && strchr("$%", value[0]) == NULL) { + } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { gid = add_gid(rules, value); rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid); - } else { + } else if (rules->resolve_names == 0) { rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL); } rule_tmp.rule.rule.flags = 1; diff --git a/udev/udevd.c b/udev/udevd.c index 9a278ce1f3..13a10240d7 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -645,12 +645,14 @@ int main(int argc, char *argv[]) struct sigaction act; const char *value; int daemonize = 0; + int resolve_names = 1; static const struct option options[] = { { "daemon", no_argument, NULL, 'd' }, { "debug-trace", no_argument, NULL, 't' }, { "debug", no_argument, NULL, 'D' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, + { "resolve-names", required_argument, NULL, 'N' }, {} }; int rc = 1; @@ -683,8 +685,19 @@ int main(int argc, char *argv[]) if (udev_get_log_priority(udev) < LOG_INFO) udev_set_log_priority(udev, LOG_INFO); break; + case 'N': + if (strcmp (optarg, "early") == 0) { + resolve_names = 1; + } else if (strcmp (optarg, "never") == 0) { + resolve_names = -1; + } else { + fprintf(stderr, "resolve-names must be early or never\n"); + err(udev, "resolve-names must be early or never\n"); + goto exit; + } + break; case 'h': - printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] [--version]\n"); + printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] [--resolve-names=early|never] [--version]\n"); goto exit; case 'V': printf("%s\n", VERSION); @@ -736,7 +749,7 @@ int main(int argc, char *argv[]) } udev_monitor_set_receive_buffer_size(kernel_monitor, 128*1024*1024); - rules = udev_rules_new(udev, 1); + rules = udev_rules_new(udev, resolve_names); if (rules == NULL) { err(udev, "error reading rules\n"); goto exit; @@ -946,7 +959,7 @@ handle_signals: struct udev_rules *rules_new; reload_config = 0; - rules_new = udev_rules_new(udev, 1); + rules_new = udev_rules_new(udev, resolve_names); if (rules_new != NULL) { udev_rules_unref(rules); rules = rules_new; diff --git a/udev/udevd.xml b/udev/udevd.xml index b5726b8b03..010411c781 100644 --- a/udev/udevd.xml +++ b/udev/udevd.xml @@ -29,6 +29,7 @@ <arg><option>--debug-trace</option></arg> <arg><option>--debug</option></arg> <arg><option>--version</option></arg> + <arg><option>--resolve-names=early|never</option></arg> <arg><option>--help</option></arg> </cmdsynopsis> </refsynopsisdiv> @@ -65,6 +66,16 @@ </listitem> </varlistentry> <varlistentry> + <term><option>--resolve-names</option></term> + <listitem> + <para>Specify when udevd should resolve names of users and groups. + When set to <option>early</option> (the default) names will be + resolved when the rules are parsed. + When set to <option>never</option> names will never be resolved + and all devices will be owned by root.</para> + </listitem> + </varlistentry> + <varlistentry> <term><option>--version</option></term> <listitem> <para>Print version number.</para> |