Kay Sievers [Wed, 9 Sep 2009 16:18:17 +0000 (18:18 +0200)]
simplify "symlink name stack"
With well defined and kernel-supplied node names, we no longer need
to support a possible stack of conflicting symlinks and node names.
Only symlinks with identical names can be claimed by multiple devices.
This shrinks the former /dev/.udev/names/ significantly.
Also the /dev/{block,char}/MAJ:MIN" links are excluded from the name
stack - they are unique and can not conflict.
Martin Pitt [Wed, 9 Sep 2009 13:22:48 +0000 (15:22 +0200)]
extras/keymap: Rename KEY_COFFEE to KEY_SCREENLOCK
Unfortunately KEY_COFFEE is the canonical name in linux/input.h, and the more
sensible KEY_SCREENLOCK is an alias. Manually override this particular case,
since it's better to have "screenlock" in keymaps.
However, we still keep the automatic filtering for the general case, to avoid
introducing this problem again when input.h changes.
Martin Pitt [Wed, 9 Sep 2009 09:09:17 +0000 (11:09 +0200)]
extras/keymap: fix hash table collisions
More than one key name was mapped to the same key, due to linux/input.h
defining some aliases (in particular, KEY_HANGUEL, KEY_SCREENLOCK,
KEY_MIN_INTERESTING). These caused hash table collisions.
Changed the generation of the tables to ignore these aliases, and updated all
keymaps to use the canonical name.
This was detected by llvm-clang-analyzer. Thanks to Lennart Poettering for
doing these checks and pointing this out!
util_run_program(): fix possible buffer overflow #2
I'm not sure how likely it is for UTIL_PATH_SIZE to have an odd value
(maybe it has right now? :-), but I guess making this universally correct
doesn't hurt ...
Kay Sievers [Tue, 8 Sep 2009 12:57:42 +0000 (14:57 +0200)]
require 2.6.27 for proper signalfd handling
<zzam> kay: ping I found out why udev-145 fails on some
systems with kernel 2.6.25 and 2.6.26
<zzam> kay: it is because glibc was compiled against linux-headers-2.6.27
or newer and issues signalfd4 syscall which was introduced in
kernel 2.6.27 and not older signalfd syscall
Jeremy Kerr [Sat, 5 Sep 2009 07:48:23 +0000 (17:48 +1000)]
util_run_program: restore signal mask before executing event RUN commands
External programs triggered by events (via RUN=) will inherit udev's
signal mask, which is set to block all but SIGALRM. For most utilities,
this is OK, but if we start daemons from RUN=, we run into trouble
(especially as SIGCHLD is blocked).
This change saves the original sigmask when udev starts, and restores it
just before we exec() the external command.
Martin Pitt [Fri, 4 Sep 2009 15:12:28 +0000 (17:12 +0200)]
make raw USB printer devices accessible for lp
Starting from version 1.4, cups now uses libusb and printer USB devices instead
of the usblp generated /dev/usb/lpX ones. In order to not require the cups USB
backend to run as root now, change raw USB printer devices to be root:lp 0660,
similar to usblpX devices.
This might also enable the hplip backend to not run as root, since this has
always used raw device nodes.
pci-db: make sure we actually read the pci.ids file instead of usb.ids
Since the recent Makefile.am rework both usb-db and pci-db were built to
read the usb.ids database file. This fix makes sure pci-db properly
reads pci.ids instead.
Kay Sievers [Sun, 30 Aug 2009 18:42:06 +0000 (20:42 +0200)]
inotify_add_watch(): do not store watch, if it failed
On Sun, Aug 30, 2009 at 04:36, Marco d'Itri<md@linux.it> wrote:
> inotify_add_watch may fail in udev_watch_begin, and then a link with
> name -1 is created.
> I do not know why, but it happened once on my system:
>
> lrwxrwxrwx 1 root root 27 Aug 4 11:27 -1 -> /devices/virtual/block/ram8
Further debugging in https://launchpad.net/bugs/178860 showed that for some
weird reason the correct key codes already come out of the "Video Bus" input
device, and the previous commit would cause them to appear a second time
through the standard keyboard device.
This is a kernel bug in the end, but let's not break working things
prematurely.
Kay Sievers [Tue, 25 Aug 2009 19:06:35 +0000 (21:06 +0200)]
assign errno for getgrnam_r()/getpwnam_r()
On Mon, Aug 24, 2009 at 19:50, Lennart Poettering<lennart@poettering.net> wrote:
> One little comment here: on POSIX getrnam_r() doesn't touch
> errno. Instead it returns the error value as return value.
modem-modeswitch does not fully work on ZTE MF6xx modems, their fake CD-ROMs
need to be properly ejected in order for the actual modem to appear. Add udev
rule for this device (19d2:2000 in CD-ROM mode).
Kay Sievers [Wed, 19 Aug 2009 18:49:49 +0000 (20:49 +0200)]
change database file names
With very deeply nested devices, We can not use a single file
name to carry an entire DEVPATH. Use <subsystem>:<sysname> as
the database filename, which should also simplify the handling
of devices moving around, as these values will not change but
still be unique.
For the name stack we use the <maj>:<min> now as the filename.
> On Tue, Aug 18, 2009 at 09:59:56AM -0400, Ric Wheeler wrote:
> The first is that udev grumbles during boot about "file name too long"
> like the following:
>
> Aug 17 06:49:58 megadeth udevd-event[20447]: unable to create db file
> '/dev/.udev/db/\x2fdevices\x2fpci0000:00\x2f0000:00:04.0\x2f0000:17:00.0\x2f0000:18:0a.0\x2f0000:1f:00.0\x2fhost11\x2fport-11:0\x2fexpander-11:0\x2fport-11:0:0\x2fexpander-11:1\x2fport-11:1:0\x2fexpander-11:2\x2fport-11:2:17\x2fexpander-11:3\x2fport-11:3:1\x2fend_device-11:3:1\x2fbsg\x2fend_device-11:3:1':
> File name too long
Daniel Mierswa [Mon, 17 Aug 2009 21:13:19 +0000 (23:13 +0200)]
don't compare a non-existing function with NULL
Obviously someone forgot something here or didn't use -ansi. Either way,
index is nowhere declared so I assume the current behaviour is to check
against the index() function coming from somewhere in the POSIX headers.
The comparison doesn't make sense then.
Signed-off-by: Daniel Mierswa <impulze@impulze.org>
Fix building of documentation when doing out-of-source builds.
Since gtk-mkhtml is executed in a sub-directory of the build directory, and
make does not know of that, the $(buildir) variable will still be "." and
the $(srcdir) will not properly be found. For this reason, use the absolute
variants for the two functions, which won't be changing.
Use the keymap check during “make distcheck” rather than “check”.
Since the check-keymaps.sh script checks for validity the source directory
and the Makefile.am file, instead of running it during user-oriented “make
check”, run it during developed-oriented “make distcheck”.
An invalid keymap will abort the execution which will prevent shipping
an incomplete Makefile.am.
To properly support out-of-source builds, pass as single parameter to the
test the path to the source directory.
Replace the custom test-run target with the standard make check.
A little fix is needed for the udev-test.pl script (to be called with the
proper path), but this allows for the test binaries to be only built when
running the tests themselves.
Merge libudev, udev, and the unconditional extras in a single Makefile.am.
Instead of using multiple recursive Makefile.am files, use a single
Makefile.am that sets and builds all the basic suite of libraries and
binaries for udev. This reduces the number of files in the source tree, and
also reduces drastically the build time when using parallel-make.
With this setup, all the compile steps will be executed in parallel, and
just the linking stage will be (partially) serialised on the libraries
creation.
- create an additional link with a shorter name
- create a link which matches more loosely
(omit certain path segments e.g. serial numbers)
- change permissions on certain USB device nodes
Allow them to realize this without reading the friendly *.c files.
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Alan Jenkins [Fri, 7 Aug 2009 12:28:27 +0000 (13:28 +0100)]
man: fix unused, inaccurate metadata
Dates aren't shown in the manpages. So they are not really useful,
and no-one is going to remember to update them.
"<refmiscinfo class="version"></refmiscinfo>" sounds even less useful.
I leave the unused "title" and "productname" tags. They could
theoretically be useful, and aren't hard to maintain. We just need to
fix the "title" for udevadm.
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Kay Sievers [Thu, 6 Aug 2009 14:16:26 +0000 (16:16 +0200)]
re-enable failed event tracking
It did not work for the last couple of releases.
If RUN{record_failed}+="..." is given, a non-zero execution will mark
the event as failed. Recorded failed events can be re-triggered with:
udevadm trigger --type=failed
The failed tracking _might_ be useful for things which might not be
ready to be executed at early bootup, but a bit later when the needed
dependencies are available. In many cases though, it indicates that
something is used in a way it should not.
The errno value from getgrnam_r here is ERANGE which is documented as
"Insufficient buffer space supplied".
When I call get getgrnam_r with a large enough buffer everything
works. Indicating that the problem is that sysconf is returning
a value too small.
A quick google search tells me that sysconf(_S_GETGR_R_SIZE_MAX)
is documented as:
> sysconf(_S_GETGR_R_SIZE_MAX) returns either -1 or a good
> suggested starting value for buflen. It does not return the
> worst case possible for buflen.
In my case I have a group with about 50 users in /etc/group
and that is what triggered the problem in udev and caused
all of the udevs group lookups to fail.
The following patch which dynamically allocates the group member buffer
should fix this problem.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
enumeration: move ALSA control devices to the end of the enumerated devices of each card
Generally ALSA control devices should be the last ones to be processed
for ACL changes and similar operations because they can then be used as
indicators that ACL management finished for all device nodes of a
specific card.
This patch simple moves each controlC device behind all the pcmC devices
(and similar).
Kay Sievers [Fri, 24 Jul 2009 16:06:22 +0000 (18:06 +0200)]
hid2hci: rewrite (and break) rules and device handling
We must never access random devices in /dev which do not belong to
the event we are handling. Hard-coding /dev/hidrawX, and looping over all
devices is absolutely not acceptable --> hook into hidraw events.
We can not relay on (rather random) properties merged into the parent
device by earlier rules --> use libudev to find the sibling device
with a matching interface.
Libusb does not fit into udev's use case. We never want want to scan
and open() all usb devices in the system, just to find the device
we are already handling the event for --> put all the stupid scanning
into a single function and prepare for a fixed libusb or drop it later.
Martin Pitt [Thu, 23 Jul 2009 17:00:38 +0000 (19:00 +0200)]
extras/keymap: Fix crash for unknown keys
The keymap table has some holes in it, which caused the interactive mode to
crash for unknown keys. In these cases, print the numeric key code instead.