All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roy Marples <uberlord@gentoo.org>
To: linux-hotplug@vger.kernel.org
Subject: [PATCH] Only lookup uid/gid when applying rules
Date: Tue, 01 Aug 2006 10:35:25 +0000	[thread overview]
Message-ID: <200608011135.25769.uberlord@gentoo.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 568 bytes --]

Hi List

Attached is a patch that stops udev from doing a uid/gid lookup unless it is 
actually going to use the rule.

This is important as udev ships with rules for user/group names that may not 
exist in /etc/passwd. Normally this would not be a problem, but if a system 
is configured for LDAP, NIS or some other off line system at boot time then 
things get very nasty.

See Gentoo bug #99564 for futher commentary on this
http://bugs.gentoo.org/show_bug.cgi?id=99564

Thanks

-- 
Roy Marples <uberlord@gentoo.org>
Gentoo/Linux Developer (baselayout, networking)

[-- Attachment #2: udev-nolookup.patch --]
[-- Type: text/x-diff, Size: 3850 bytes --]

diff -u udev-094.orig/udev.c udev-094/udev.c
--- udev-094.orig/udev.c	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udev.c	2006-07-07 14:41:39.000000000 +0100
@@ -128,7 +128,7 @@
 	}
 
 	sysfs_init();
-	udev_rules_init(&rules, 0);
+	udev_rules_init(&rules);
 
 	dev = sysfs_device_get(devpath);
 	if (dev == NULL) {
diff -u udev-094.orig/udevd.c udev-094/udevd.c
--- udev-094.orig/udevd.c	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udevd.c	2006-07-07 14:41:56.000000000 +0100
@@ -908,7 +908,7 @@
 
 	/* parse the rules and keep it in memory */
 	sysfs_init();
-	udev_rules_init(&rules, 1);
+	udev_rules_init(&rules);
 
 	export_initial_seqnum();
 
@@ -1088,7 +1088,7 @@
 		if (reload_config) {
 			reload_config = 0;
 			udev_rules_cleanup(&rules);
-			udev_rules_init(&rules, 1);
+			udev_rules_init(&rules);
 		}
 
 		/* forked child has returned */
diff -u udev-094.orig/udev_rules.h udev-094/udev_rules.h
--- udev-094.orig/udev_rules.h	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udev_rules.h	2006-07-07 14:41:27.000000000 +0100
@@ -98,10 +98,9 @@
 	char *buf;
 	size_t bufsize;
 	size_t current;
-	int resolve_names;
 };
 
-extern int udev_rules_init(struct udev_rules *rules, int resolve_names);
+extern int udev_rules_init(struct udev_rules *rules);
 extern void udev_rules_cleanup(struct udev_rules *rules);
 
 extern void udev_rules_iter_init(struct udev_rules *rules);
diff -u udev-094.orig/udev_rules_parse.c udev-094/udev_rules_parse.c
--- udev-094.orig/udev_rules_parse.c	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udev_rules_parse.c	2006-07-07 14:41:00.000000000 +0100
@@ -473,38 +473,12 @@
 
 		if (strcasecmp(key, "OWNER") == 0) {
 			valid = 1;
-			if (rules->resolve_names && (!strchr(value, '$') && !strchr(value, '%'))) {
-				char *endptr;
-				strtoul(value, &endptr, 10);
-				if (endptr[0] != '\0') {
-					char owner[32];
-					uid_t uid = lookup_user(value);
-					dbg("replacing username='%s' by id=%i", value, uid);
-					sprintf(owner, "%u", (unsigned int) uid);
-					add_rule_key(rule, &rule->owner, operation, owner);
-					continue;
-				}
-			}
-
 			add_rule_key(rule, &rule->owner, operation, value);
 			continue;
 		}
 
 		if (strcasecmp(key, "GROUP") == 0) {
 			valid = 1;
-			if (rules->resolve_names && (!strchr(value, '$') && !strchr(value, '%'))) {
-				char *endptr;
-				strtoul(value, &endptr, 10);
-				if (endptr[0] != '\0') {
-					char group[32];
-					gid_t gid = lookup_group(value);
-					dbg("replacing groupname='%s' by id=%i", value, gid);
-					sprintf(group, "%u", (unsigned int) gid);
-					add_rule_key(rule, &rule->group, operation, group);
-					continue;
-				}
-			}
-
 			add_rule_key(rule, &rule->group, operation, value);
 			continue;
 		}
@@ -637,13 +611,12 @@
 	return retval;
 }
 
-int udev_rules_init(struct udev_rules *rules, int resolve_names)
+int udev_rules_init(struct udev_rules *rules)
 {
 	struct stat stats;
 	int retval;
 
 	memset(rules, 0x00, sizeof(struct udev_rules));
-	rules->resolve_names = resolve_names;
 
 	/* parse rules file or all matching files in directory */
 	if (stat(udev_rules_filename, &stats) != 0)
diff -u udev-094.orig/udevstart.c udev-094/udevstart.c
--- udev-094.orig/udevstart.c	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udevstart.c	2006-07-07 14:42:25.000000000 +0100
@@ -361,7 +361,7 @@
 	alarm(UDEV_ALARM_TIMEOUT);
 
 	sysfs_init();
-	udev_rules_init(&rules, 1);
+	udev_rules_init(&rules);
 
 	udev_scan_class(&device_list);
 	udev_scan_block(&device_list);
diff -u udev-094.orig/udevtest.c udev-094/udevtest.c
--- udev-094.orig/udevtest.c	2006-07-07 14:39:34.000000000 +0100
+++ udev-094/udevtest.c	2006-07-07 14:42:11.000000000 +0100
@@ -83,7 +83,7 @@
 			devpath = argv[1];
 
 	sysfs_init();
-	udev_rules_init(&rules, 0);
+	udev_rules_init(&rules);
 
 	dev = sysfs_device_get(devpath);
 	if (dev == NULL) {

[-- Attachment #3: Type: text/plain, Size: 348 bytes --]

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

[-- Attachment #4: Type: text/plain, Size: 226 bytes --]

_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

             reply	other threads:[~2006-08-01 10:35 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-01 10:35 Roy Marples [this message]
2006-08-01 12:35 ` [PATCH] Only lookup uid/gid when applying rules Kay Sievers
2006-08-01 12:54 ` Roy Marples
2006-08-01 13:12 ` Kay Sievers
2006-08-01 13:56 ` Roy Marples
2006-08-04 23:32 ` Roy Marples
2006-08-05  0:04 ` Kay Sievers
2006-08-05  0:29 ` Marco d'Itri
2006-08-05  0:40 ` Kay Sievers
2006-08-05  0:43 ` Marco d'Itri
2006-08-05  0:49 ` Kay Sievers
2006-08-05  0:52 ` Marco d'Itri
2006-08-05  2:20 ` Roy Marples
2006-08-05  2:42 ` Kay Sievers
2006-08-05  2:59 ` Roy Marples
2006-08-05  3:07 ` Kay Sievers
2006-08-05  3:37 ` Roy Marples

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200608011135.25769.uberlord@gentoo.org \
    --to=uberlord@gentoo.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.