linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] udev - allow all files in a directory as the config
@ 2004-02-20  1:56 Kay Sievers
  2004-02-20 12:30 ` Marco d'Itri
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Kay Sievers @ 2004-02-20  1:56 UTC (permalink / raw)
  To: linux-hotplug

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

I was on the train for 5 hours today and the TODO is almost empty :)
So, at least four people wanted this feature, then here is a actual
working patch.

We may specify now in udev.conf:

  udev_rules="/etc/udev/"

and udev will scan the whole directory for files ending with *.rules,
sort it in lexical order and create our rule list from all of the files.
A plain given file will still work and the same applies to the *.permissions.

I sort the files in our usual linked list, cause klibc has no scandir().

please have a look,
Kay

[-- Attachment #2: 01-dir-as-config.diff --]
[-- Type: text/plain, Size: 4963 bytes --]

===== namedev.h 1.25 vs edited =====
--- 1.25/namedev.h	Mon Feb 16 05:17:27 2004
+++ edited/namedev.h	Thu Feb 19 14:56:44 2004
@@ -48,9 +48,11 @@
 #define ATTR_PARTITIONS		"all_partitions"
 #define PARTITIONS_COUNT	15
 
-
 #define PROGRAM_MAXARG		10
 #define MAX_SYSFS_PAIRS		5
+
+#define RULEFILE_EXT		".rules"
+#define PERMFILE_EXT		".permissions"
 
 struct sysfs_pair {
 	char file[FILE_SIZE];
===== namedev_parse.c 1.26 vs edited =====
--- 1.26/namedev_parse.c	Mon Feb 16 05:17:27 2004
+++ edited/namedev_parse.c	Fri Feb 20 02:52:38 2004
@@ -33,12 +33,16 @@
 #include <fcntl.h>
 #include <ctype.h>
 #include <unistd.h>
+#include <sys/stat.h>
+#include <dirent.h>
 #include <errno.h>
 
 #include "udev.h"
 #include "logging.h"
 #include "namedev.h"
 
+LIST_HEAD(file_list);
+
 static int add_config_dev(struct config_device *new_dev)
 {
 	struct config_device *tmp_dev;
@@ -114,7 +118,7 @@
 	return NULL;
 }
 
-int namedev_init_rules(void)
+static int namedev_parse_rules(char *filename)
 {
 	char line[255];
 	int lineno;
@@ -127,11 +131,11 @@
 	int retval = 0;
 	struct config_device dev;
 
-	fd = fopen(udev_rules_filename, "r");
+	fd = fopen(filename, "r");
 	if (fd != NULL) {
-		dbg("reading '%s' as rules file", udev_rules_filename);
+		dbg("reading '%s' as rules file", filename);
 	} else {
-		dbg("can't open '%s' as a rules file", udev_rules_filename);
+		dbg("can't open '%s' as a rules file", filename);
 		return -ENODEV;
 	}
 
@@ -262,7 +266,7 @@
 			continue;
 error:
 			dbg("%s:%d:%d: parse error, rule skipped",
-				  udev_rules_filename, lineno, temp - line);
+			    filename, lineno, temp - line);
 		}
 	}
 exit:
@@ -270,7 +274,7 @@
 	return retval;
 }
 
-int namedev_init_permissions(void)
+static int namedev_parse_permissions(char *filename)
 {
 	char line[255];
 	char *temp;
@@ -279,11 +283,11 @@
 	int retval = 0;
 	struct perm_device dev;
 
-	fd = fopen(udev_permissions_filename, "r");
+	fd = fopen(filename, "r");
 	if (fd != NULL) {
-		dbg("reading '%s' as permissions file", udev_permissions_filename);
+		dbg("reading '%s' as permissions file", filename);
 	} else {
-		dbg("can't open '%s' as permissions file", udev_permissions_filename);
+		dbg("can't open '%s' as permissions file", filename);
 		return -ENODEV;
 	}
 
@@ -352,3 +356,88 @@
 	return retval;
 }
 
+struct files {
+	struct list_head list;
+	char name[NAME_SIZE];
+};
+
+/* sort files in lexical order */
+static int file_list_insert(char *filename)
+{
+	struct files *loop_file;
+	struct files *new_file;
+
+	list_for_each_entry(loop_file, &file_list, list) {
+		if (strcmp(loop_file->name, filename) > 0) {
+			break;
+		}
+	}
+
+	new_file = malloc(sizeof(struct files));
+	if (new_file == NULL) {
+		dbg("error malloc");
+		return -ENOMEM;
+	}
+
+	strfieldcpy(new_file->name, filename);
+	list_add_tail(&new_file->list, &loop_file->list);
+	return 0;
+}
+
+/* calls function for file or every file found in directory */
+static int call_foreach_file(int parser (char *f) , char *filename, char *extension)
+{
+	struct dirent *ent;
+	DIR *dir;
+	char *ext;
+	char file[NAME_SIZE];
+	struct stat stats;
+	struct files *loop_file;
+	struct files *tmp_file;
+
+	/* look if we have a plain file or a directory to scan */
+	stat(filename, &stats);
+	if ((stats.st_mode & S_IFMT) != S_IFDIR)
+		return parser(filename);
+
+	/* sort matching filename into list */
+	dbg("open config as directory '%s'", filename);
+	dir = opendir(filename);
+	while (1) {
+		ent = readdir(dir);
+		if (ent == NULL || ent->d_name[0] == '\0')
+			break;
+
+		dbg("found file '%s'", ent->d_name);
+		ext = strrchr(ent->d_name, '.');
+		if (ext == NULL)
+			continue;
+
+		if (strcmp(ext, extension) == 0) {
+			dbg("put file in list '%s'", ent->d_name);
+			file_list_insert(ent->d_name);
+		}
+	}
+
+	/* parse every file in the list */
+	list_for_each_entry_safe(loop_file, tmp_file, &file_list, list) {
+		strfieldcpy(file, filename);
+		strcat(file, loop_file->name);
+		parser(file);
+		list_del(&loop_file->list);
+		free(loop_file);
+	}
+
+	closedir(dir);
+	return 0;
+}
+
+int namedev_init_rules()
+{
+	return call_foreach_file(namedev_parse_rules, udev_rules_filename, RULEFILE_EXT);
+}
+
+int namedev_init_permissions()
+{
+	return call_foreach_file(namedev_parse_permissions, udev_permissions_filename, PERMFILE_EXT);
+}
===== udev.c 1.46 vs edited =====
--- 1.46/udev.c	Tue Feb 17 14:16:03 2004
+++ edited/udev.c	Thu Feb 19 16:26:45 2004
@@ -111,13 +111,13 @@
 
 	action = get_action();
 	if (!action) {
-		dbg ("no action?");
+		dbg("no action?");
 		goto exit;
 	}
 
 	devpath = get_devpath();
 	if (!devpath) {
-		dbg ("no devpath?");
+		dbg("no devpath?");
 		goto exit;
 	}
 	dbg("looking at '%s'", devpath);
@@ -131,6 +131,10 @@
 
 	/* skip blacklisted subsystems */
 	subsystem = argv[1];
+	if (!subsystem) {
+		dbg("no subsystem?");
+		goto exit;
+	}
 	i = 0;
 	while (subsystem_blacklist[i][0] != '\0') {
 		if (strcmp(subsystem, subsystem_blacklist[i]) == 0) {

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] udev - allow all files in a directory as the config
  2004-02-20  1:56 [PATCH] udev - allow all files in a directory as the config Kay Sievers
@ 2004-02-20 12:30 ` Marco d'Itri
  2004-02-23 19:32 ` Greg KH
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Marco d'Itri @ 2004-02-20 12:30 UTC (permalink / raw)
  To: linux-hotplug

On Feb 20, Kay Sievers <kay.sievers@vrfy.org> wrote:

 >I was on the train for 5 hours today and the TODO is almost empty :)
Don't forget about the patch to merge multiple entries (e.g. for adding
symlinks)... :-)

 >We may specify now in udev.conf:
 >
 >  udev_rules="/etc/udev/"
 >
 >and udev will scan the whole directory for files ending with *.rules,
 >sort it in lexical order and create our rule list from all of the files.
 >A plain given file will still work and the same applies to the *.permissions.
As a vendor, I think that it would be easier to just specify a list of
files in udev.conf. This way users could easily select the config files
they need (devfs style, devfsstyle with compatibility symlink, old
style, etc) without the need to rename the config files provided
(something annoying for package managers).

-- 
ciao, |
Marco | [4685 un7QkK300vm7o]


-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&op=click
_______________________________________________
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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] udev - allow all files in a directory as the config
  2004-02-20  1:56 [PATCH] udev - allow all files in a directory as the config Kay Sievers
  2004-02-20 12:30 ` Marco d'Itri
@ 2004-02-23 19:32 ` Greg KH
  2004-02-23 20:21 ` Kay Sievers
  2004-02-26 20:55 ` Greg KH
  3 siblings, 0 replies; 5+ messages in thread
From: Greg KH @ 2004-02-23 19:32 UTC (permalink / raw)
  To: linux-hotplug

On Fri, Feb 20, 2004 at 02:56:46AM +0100, Kay Sievers wrote:
> I was on the train for 5 hours today and the TODO is almost empty :)
> So, at least four people wanted this feature, then here is a actual
> working patch.
> 
> We may specify now in udev.conf:
> 
>   udev_rules="/etc/udev/"
> 
> and udev will scan the whole directory for files ending with *.rules,
> sort it in lexical order and create our rule list from all of the files.
> A plain given file will still work and the same applies to the *.permissions.
> 
> I sort the files in our usual linked list, cause klibc has no scandir().

Nice, applied, thanks.

greg k-h


-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&op=click
_______________________________________________
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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] udev - allow all files in a directory as the config
  2004-02-20  1:56 [PATCH] udev - allow all files in a directory as the config Kay Sievers
  2004-02-20 12:30 ` Marco d'Itri
  2004-02-23 19:32 ` Greg KH
@ 2004-02-23 20:21 ` Kay Sievers
  2004-02-26 20:55 ` Greg KH
  3 siblings, 0 replies; 5+ messages in thread
From: Kay Sievers @ 2004-02-23 20:21 UTC (permalink / raw)
  To: linux-hotplug

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

On Mon, Feb 23, 2004 at 11:32:29AM -0800, Greg KH wrote:
> On Fri, Feb 20, 2004 at 02:56:46AM +0100, Kay Sievers wrote:
> > I was on the train for 5 hours today and the TODO is almost empty :)
> > So, at least four people wanted this feature, then here is a actual
> > working patch.
> > 
> > We may specify now in udev.conf:
> > 
> >   udev_rules="/etc/udev/"
> > 
> > and udev will scan the whole directory for files ending with *.rules,
> > sort it in lexical order and create our rule list from all of the files.
> > A plain given file will still work and the same applies to the *.permissions.
> > 
> > I sort the files in our usual linked list, cause klibc has no scandir().
> 
> Nice, applied, thanks.

Nice, here is the corresponding man update which also removes the
mention of the limitation of getgrname() and friends with klibc.

thanks,
Kay

[-- Attachment #2: 01-man-update.patch --]
[-- Type: text/plain, Size: 3395 bytes --]

===== udev.8 1.40 vs edited =====
--- 1.40/udev.8	Tue Feb 17 20:39:30 2004
+++ edited/udev.8	Mon Feb 23 21:19:34 2004
@@ -35,7 +35,7 @@
 
 .B udev
 expects its main configuration file at
-.I /etc/udev/udev.conf.
+.IR /etc/udev/udev.conf .
 The file consists of a set of variables and values that allow the user to
 override default udev values.  The current set of variables that can be
 overridden in this file is:
@@ -43,39 +43,46 @@
 .B udev_root
 This is the where in the filesystem to place the device nodes.  The default
 value for this is
-.I /udev/
+.IR /udev/ .
 .TP
 .B udev_db
 The name and location of the udev database.  The default value for this is
-.I /udev/.udev.tdb
+.IR /udev/.udev.tdb .
 .TP
 .B udev_rules
 This is the location of the udev rules file.  The default value for this is
-.I /etc/udev/udev.rules
+.IR /etc/udev/udev.rules .
+If a directory is specified, the whole directory is
+scanned for files ending with
+.I .rules
+and all rule files are read in lexical order.
 .TP
 .B udev_permissions
-This is the location of the udev permission file.  The default value for this is
-.I /etc/udev/udev.permissions
+This is the location of the udev permission file. The default value for this is
+.IR /etc/udev/udev.permissions .
+If a directory is specified, the whole directory is scanned for files ending with
+.I .permissions
+and all permission files are read in lexical order.
 .TP
 .B udev_log
 If you want udev to log some information to the syslog for every node created or
 removed. The default value for this is
-.I yes
+.IR yes .
 .TP
 .B default_mode
 This is the default mode for all nodes that have no explicit match in the
 permissions file.  The default value for this is
-.I 0666
+.IR 0666 .
 .TP
 .B default_owner
 This is the default owner for all nodes that have no explicit match in the
 permissions file.  The default value for this is
-.I root
+.IR root .
 .TP
 .B default_group
 This is the default group for all nodes that have no explicit match in the
 permissions file.  The default value for this is
-.I root
+.IR root .
 .br
 .P
 .RI "A sample " udev.conf " might look like this:
@@ -87,8 +94,9 @@
 # udev_db - The name and location of the udev database.
 udev_db="/udev/.udev.tdb"
 
-# udev_rules - The name and location of the udev rules file
-udev_rules="/etc/udev/udev.rules"
+# udev_rules - The location of the directory where to look for files
+               which names ending with .rules
+udev_rules="/etc/udev/"
 
 # udev_permissions - The name and location of the udev permission file
 udev_permissions="/etc/udev/udev.permissions"
@@ -242,11 +250,6 @@
 Every line lists a device name followed by owner, group and permission
 mode. All values are separated by colons. The name field may contain a
 pattern to apply the values to a whole class of devices.
-.br
-If
-.B udev
-was built using klibc or is used before the user database is accessible (e.g.
-.BR initrd "(4)), only numeric owner and group values may be used."
 .sp
 .RI "A sample " udev.permissions " might look like this:"
 .sp
===== udevd.8 1.2 vs edited =====
--- 1.2/udevd.8	Tue Feb 17 20:30:47 2004
+++ edited/udevd.8	Mon Feb 23 21:07:52 2004
@@ -33,7 +33,7 @@
 .B udevsend
 will start it.
 .SH "SEE ALSO"
-.BR udev (8), hotplug (8)
+.BR udev (8), " hotplug" (8)
 .SH AUTHORS
 .B udevd
 was developed primarily by Kay Sievers <kay.sievers@vrfy.org>, with much help

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] udev - allow all files in a directory as the config
  2004-02-20  1:56 [PATCH] udev - allow all files in a directory as the config Kay Sievers
                   ` (2 preceding siblings ...)
  2004-02-23 20:21 ` Kay Sievers
@ 2004-02-26 20:55 ` Greg KH
  3 siblings, 0 replies; 5+ messages in thread
From: Greg KH @ 2004-02-26 20:55 UTC (permalink / raw)
  To: linux-hotplug

On Mon, Feb 23, 2004 at 09:21:53PM +0100, Kay Sievers wrote:
> On Mon, Feb 23, 2004 at 11:32:29AM -0800, Greg KH wrote:
> > On Fri, Feb 20, 2004 at 02:56:46AM +0100, Kay Sievers wrote:
> > > I was on the train for 5 hours today and the TODO is almost empty :)
> > > So, at least four people wanted this feature, then here is a actual
> > > working patch.
> > > 
> > > We may specify now in udev.conf:
> > > 
> > >   udev_rules="/etc/udev/"
> > > 
> > > and udev will scan the whole directory for files ending with *.rules,
> > > sort it in lexical order and create our rule list from all of the files.
> > > A plain given file will still work and the same applies to the *.permissions.
> > > 
> > > I sort the files in our usual linked list, cause klibc has no scandir().
> > 
> > Nice, applied, thanks.
> 
> Nice, here is the corresponding man update which also removes the
> mention of the limitation of getgrname() and friends with klibc.

Applied, thanks.

greg k-h


-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&op=click
_______________________________________________
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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2004-02-26 20:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-20  1:56 [PATCH] udev - allow all files in a directory as the config Kay Sievers
2004-02-20 12:30 ` Marco d'Itri
2004-02-23 19:32 ` Greg KH
2004-02-23 20:21 ` Kay Sievers
2004-02-26 20:55 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).