While I was adding pattern match to the LABEL method i hit a bug.
We modify a string returned from libsysfs, so with every iteration is is
truncated by one char:
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESXS '
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ESX' with '?IBM-ESXS'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESX'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ES' with 'IBM-ESXS?'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ES'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-E' with 'IBM-ES??'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-E'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-' with 'IBM-ESXSS'
I changed the behavior to remove only the line feed.
03-bug-in-linefeed-removal.diff
remove only the line feed from string not every last char
As promised yesterday, here is a patch to implement a more advanced
pattern matching instead of the simple '*'.
We can remove the "tty"="tty" line from udev.rules now and
replace "tty*" by "tty[0-9]*" to catch only the vc's.
implement pattern matching in namedev
'*' - to match zero or more chars
'?' - to match exactly one char
'[]' - character classes with ranges '[0-9]'and negation [!A]
greg@kroah.com [Wed, 3 Dec 2003 09:08:46 +0000 (01:08 -0800)]
[PATCH] add support for a main udev config file, udev.conf.
the older udev.config file is now called udev.rules.
This allows us to better control configuration values, and move away from
the environment variables.
[PATCH] Add -nodefaultlibs while compiling against klibc
This patch adds -nodefaultlibs to LDFLAGS when compiling udev against
klibc. This fixes the warning that I was getting when using $(LD)=gcc
in the versions after Makefile.klibc disappeared. The problem was that
it was still including a "-lc" in the call to the linker.
The quick patch I sent you yesterday fixes it in one location, but
there are other points in the library that calls sysfs_get_mnt_path. We
need to address all the areas in the library where paths are used. The
following patch is a band-aid until we can get a proper path management
in the library.
On Tuesday 25 November 2003 00:12, Chris Larson wrote:
> udev fails to compile here unless I'm doing a KLIBC build. The reason
> appears to be that the normal limits.h in the gcc inc dir doesn't pull
> in linux/limits.h, whereas the limits.h out in the klibc include dirs
> does. I'd think it'd be best to add a #include <linux/limits.h> to
> udev.h directly, since it uses PATH_MAX.
No, don't include kernel headers directly if you can avoid it.
The problem you are referring to seems to be with old tool chains,
I have the same symptom with my s390 gcc-2.95/glibc-2.1.3.
Including <sys/param.h> instead of <limits.h> seems to fix it.
* removes sg_err.[ch] deps
* makes sure the core code play nice with klibc
* port the sysfs calls to dlist helpers
* links against udev's sysfs (need libsysfs.a & dlist.a)
* finally define DM_TARGET as "multipath" as Joe posted the code today
(not tested yet)
* push version forward (do you want it in sync with udev version?)
libdevmapper doesn't play well with klibc, so I wasn't able to produce a
static binary yet. Help needed here ... as I don't want to fall back to
merge libdevmapper code in the core.
There seems to be a
mismatch in udev and in libsysfs as to what to expect if the mnt point
has a slash on the end or not. If I use the included patch, it breaks
something in udev. If I patch sysfs_get_mnt_path I break udev as well
because what you're expecting. I need to sit down and go through
the library and creaate a rule as to trailing slashes. Adding the env
brought this to light.
Here's the patch to up the library to the sysfsutils-0_3_0 level. The
following changes:
1) adds class name to sysfs_class_device structure
2) adds bus to sysfs_device
3) gets rid of code that made assumptions as to bus addresses being
unique across buses, which isn't the case.
I still owe you:
1) change getpagesize->sysconf. This is in the CVS tree and part of other
changes we're currently testing. Patch will follow.
2) you need a function to get a sysfs_class_device's parent. We hadn't
considered class devices to have parents, the one example of a multilevel
is the block class. We will add this function and send the patch to you.
arnd@arndb.de [Tue, 25 Nov 2003 07:41:40 +0000 (23:41 -0800)]
[PATCH] Add format modifier for devfs like naming
On Monday 24 November 2003 01:29, Greg KH wrote:
> I think with the ability to capture the output of the CALLOUT rule,
> combined with the ability to put format modifiers in the CALLOUT program
> string, we now have everything in place to emulate the existing devfs
> naming scheme. Anyone want to verify this or not?
I would prefer to have the ability of creating partition nodes in devfs
style built-in to udev. Devfs used to call the whole disk e.g.
"/dev/dasd/0123/disk" and the partitions "/dev/dasd/0123/part[1-3]".
This can obviously be done with a CALLOUT rule, but its common enough
to make it a format modifier. AFAIK, this scheme has been used for
ide, scsi and dasd disks, which is about 99% of all disks ever connected
to Linux.
udev kept on segfaulting when it was in use, and not having the time
(and building it with DEBUG=true showing nothing), I have not tracked it
until tonight. Seems like I made a type-o, and forgotten the ':'
between one line's group and permission parameters. Attached patch
should stop the segfault, and warn at that at least.
04-udev.8-tweak-numeric-id-text.diff
o change "return value" to "returned string"
o add textual owner/group example for udev.permissions
o mention klibc compile as special case for udev.permissions
o remove duplicated numeric owner clause
here is a patch for inserting the callout output into NAME=.
ID= supports the usual wildcard to compare with the output.
I've moved all wildcard matching to a function cause this was the third occurrence.
Also attached is the last whitespace cleanup and debug text corrections.
The callout patch depends on the whitespace patch.
olh@suse.de [Sun, 23 Nov 2003 13:58:21 +0000 (05:58 -0800)]
[PATCH] static klibc udev does not link against crt0.o
On Wed, Nov 19, Greg KH wrote:
> > I did 'make KLIBC=true' in the current bk tree.
>
> try 'make -f Makefile.klibc' in the current tree. For some reason I
> couldn't figure out how to have Makefile work for both KLIBC=true and
> KLIBC=false. But I didn't try too hard :)
I dont understand that.
please do rm -f Makefile.klibc; apply this patch and tell me what fails.
works for me.
Nov 20 02:35:20 pim udev[30422]: get_major_minor: found major = 81, minor = 0
Nov 20 02:35:20 pim udev[30422]: exec_callout: callout to /bin/echo -n xxx
Nov 20 02:35:20 pim udev[30422]: exec_callout: callout returned 'xxx'
Nov 20 02:35:20 pim udev[30422]: get_attr: kernel number appended: 0
The feature is really nice, but the maximum argument count is hard coded to 8.
[PATCH] namedev.c - change order of fields in CALLOUT
I want to bring the CALLOUT field ordering in line with the other
methods, cause the current parsing relies on the ordering it's good
to have it like the others. The BUS= is now the first expected field.
Also made the last two remaining field names to uppercase and the man page
callout example is updated.
here is mainly a whitespace cleanup for namedev.c. I changed the
dbg_parse() output a bit for better readability:
current:
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER temp='/2-1.1' id='00:07.1'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER temp='/2-1' id='00:07.1'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER temp='/2-1.1' id='00:0b.0'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER temp='/2-1' id='00:0b.0'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:00:59 pim udev[25582]: do_number: NUMBER temp='/2-1.1' id='2-1.1'
Nov 19 19:00:59 pim udev[25582]: do_number: device id '2-1.1' becomes 'webcam%n' - owner='', group ='', mode=0
becomes:
Nov 19 19:23:40 pim udev[26091]: do_number: search '00:07.1' in '/2-1.1', path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:23:40 pim udev[26091]: do_number: search '00:07.1' in '/2-1', path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1'
Nov 19 19:23:40 pim udev[26091]: do_number: search '00:0b.0' in '/2-1.1', path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:23:40 pim udev[26091]: do_number: search '00:0b.0' in '/2-1', path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1'
Nov 19 19:23:40 pim udev[26091]: do_number: search '2-1.1' in '/2-1.1', path='/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1.1'
Nov 19 19:23:40 pim udev[26091]: do_number: found id '2-1.1', 'video0' becomes 'webcam%n' - owner='', group ='', mode=0
[PATCH] apply permissions.conf support for wildcard and default name
Permissions given in udev.permissions are not applied if no METHOD from
udev.config is found. I've added do_kernelname() to scan for known
permissions if we only use the default method.
Simple support for wildcards is also added:
#name:user:group:mode
hdb*:2702:2702:0660
results in:
drwxr-xr-x 2 root root 240 Nov 19 03:45 .
drwxr-xr-x 23 root root 528 Nov 17 03:36 ..
brw-r--r-- 1 root root 3, 0 Nov 19 03:45 hda
brw-r--r-- 1 root root 3, 1 Nov 19 03:45 hda1
brw-r--r-- 1 root root 3, 2 Nov 19 03:45 hda2
brw-r--r-- 1 root root 3, 4 Nov 19 03:45 hda4
brw-r----- 1 kay kay 3, 64 Nov 19 03:45 hdb
brw-r----- 1 kay kay 3, 65 Nov 19 03:45 hdb1
brw-r--r-- 1 root root 22, 0 Nov 19 03:45 hdc
crw-r--r-- 1 root root 81, 0 Nov 19 03:34 webcam0
I've attached a patch against 005 for both the block and tty scripts. I
didn't bother running udev backgrounded, since as you say, the new code
runs a lot faster.
arnd@arndb.de [Wed, 19 Nov 2003 05:39:30 +0000 (21:39 -0800)]
[PATCH] more robust config file parsing in namedev.c
After getting a number of different crashes for udev reading broken
udev.config files, I decided to try to make the parser a little
more robust.
The behaviour is changed to stop reading the configuration file
and logging the broken entry instead of silently ignoring it (is
that good? It's easy to just print and continue).
All strcpy()'s to a fixed length string are now implicitly limited
to the bounds of the target string.
I kept the -ENODEV return code for now, not sure if there should be
different ones.
arnd@arndb.de [Wed, 19 Nov 2003 05:36:10 +0000 (21:36 -0800)]
[PATCH] add bus id modifier
On Tuesday 18 November 2003 02:14, Greg KH wrote:
> On Mon, Nov 17, 2003 at 06:33:32PM +0100, Arnd Bergmann wrote:
> > That would at least be part of the solution I'm looking for. How about
> > extra format characters for bus_id and for the result of a callout
> > program?
>
> Sure, I can see the use for that. Want to send a patch? :)
> Take a look at the current bk tree (which has moved to
> bk://linuxusb.bkbits.net/udev/ ) I've made finding that device a lot
> easier now, and it works for all rule types.
Great, just what I was missing. I didn't see the any link to the bk
repository. Here's the patch for the bus_id. I'll need to think about
the handling of callout results a bit more.
[PATCH] implement printf-like placeholder support for NAME
> Problem is, if you use the LABEL rule to match a device, like a SCSI
> vendor, then all of the partitions, as well as the main block device,
> will end up with the same name. That's why I added the "add the number"
> hack to the LABEL rule.
>
> So yes, your patch is correct in that we shouldn't always be adding the
> number to any match for LABEL (like for char devices), but if we do
> that, then we break partitions. Your '%' patch fixes this, but I'd just
> like to extend it a bit. Let me see what I can come up with...
Nov 15 16:51:53 pim udev[16193]: get_class_dev: looking at /sys/class/video4linux/video0
Nov 15 16:51:53 pim udev[16193]: get_class_dev: class_dev->name = video0
Nov 15 16:51:53 pim udev[16193]: get_major_minor: dev = 81:0
Nov 15 16:51:53 pim udev[16193]: get_major_minor: found major = 81, minor = 0
Nov 15 16:51:53 pim udev[16193]: udev_add_device: name = webcam0-81:0-test
Nov 15 16:51:53 pim udev[16193]: create_node: mknod(/udev/webcam0-81:0-test, 020666, 81, 0)
implement printf-like placeholder support for NAME
%n-kernel number, %M-major number, %m-minor number