2003-11-23 16:47:28 +03:00
#!/usr/bin/perl
2008-09-29 04:00:17 +04:00
# udev test
2003-11-23 16:47:28 +03:00
#
# Provides automated testing of the udev binary.
# The whole test is self contained in this file, except the matching sysfs tree.
# Simply extend the @tests array, to add a new test variant.
#
# Every test is driven by its own temporary config file.
# This program prepares the environment, creates the config and calls udev.
#
2005-03-27 03:10:03 +04:00
# udev parses the rules, looks at the provided sysfs and
2003-11-23 16:47:28 +03:00
# first creates and then removes the device node.
# After creation and removal the result is checked against the
# expected value and the result is printed.
#
2008-09-29 04:00:17 +04:00
# Copyright (C) 2004-2008 Kay Sievers <kay.sievers@vrfy.org>
2006-08-20 21:11:32 +04:00
# Copyright (C) 2004 Leann Ogasawara <ogasawara@osdl.org>
2003-11-23 16:47:28 +03:00
use warnings ;
use strict ;
2008-09-01 18:20:06 +04:00
my $ PWD = $ ENV { PWD } ;
my $ sysfs = "sys/" ;
my $ udev_bin = "../udev/test-udev" ;
my $ valgrind = 0 ;
my $ udev_bin_valgrind = "valgrind --tool=memcheck --leak-check=yes --quiet $udev_bin" ;
my $ udev_root = "udev-root/" ;
my $ udev_conf = "udev-test.conf" ;
my $ udev_rules = "udev-test.rules" ;
2003-11-23 16:47:28 +03:00
my @ tests = (
2008-11-12 07:50:05 +03:00
{
desc = > "no rules" ,
subsys = > "block" ,
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "sda" ,
rules = > << EOF
EOF
} ,
2006-08-20 21:11:32 +04:00
{
desc = > "label test of scsi disc (old key names)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2006-08-20 21:11:32 +04:00
exp_name = > "boot_disk" ,
rules = > << EOF
2008-10-26 06:35:32 +03:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "boot_disk%n" , RUN += "socket:@/org/kernel/udev/monitor"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2006-08-20 21:11:32 +04:00
EOF
} ,
{
desc = > "label test of scsi disc (old key names)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2006-08-20 21:11:32 +04:00
exp_name = > "boot_disk" ,
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "boot_disk%n"
KERNEL == "ttyACM0" , NAME = "modem"
2006-08-20 21:11:32 +04:00
EOF
} ,
2003-11-23 16:47:28 +03:00
{
2004-03-13 04:13:59 +03:00
desc = > "label test of scsi disc" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 05:18:58 +03:00
exp_name = > "boot_disk" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "boot_disk%n"
KERNEL == "ttyACM0" , NAME = "modem"
2003-11-23 16:47:28 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "label test of scsi partition" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2004-03-13 05:18:58 +03:00
exp_name = > "boot_disk1" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "boot_disk%n"
2003-12-05 06:21:31 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "label test of pattern match" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2004-03-13 05:18:58 +03:00
exp_name = > "boot_disk1" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "?ATA" , NAME = "boot_disk%n-1"
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA?" , NAME = "boot_disk%n-2"
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "A??" , NAME = "boot_disk%n"
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATAS" , NAME = "boot_disk%n-3"
2003-12-23 09:32:06 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "label test of multiple sysfs files" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2004-03-13 04:13:59 +03:00
exp_name = > "boot_disk1" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , ATTRS { model } == "ST910021AS X " , NAME = "boot_diskX%n"
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , ATTRS { model } == "ST910021AS" , NAME = "boot_disk%n"
2003-12-23 09:32:06 +03:00
EOF
} ,
{
2008-10-17 15:54:50 +04:00
desc = > "label test of max sysfs files (skip invalid rule)" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2004-03-13 04:13:59 +03:00
exp_name = > "boot_disk1" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , ATTRS { model } == "ST910021AS" , ATTRS { scsi_level } == "6" , ATTRS { rev } == "4.06" , ATTRS { type } == "0" , ATTRS { queue_depth } == "32" , NAME = "boot_diskXX%n"
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , ATTRS { model } == "ST910021AS" , ATTRS { scsi_level } == "6" , ATTRS { rev } == "4.06" , ATTRS { type } == "0" , NAME = "boot_disk%n"
2003-12-03 04:52:26 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "catch device by *" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem/0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM*" , NAME = "modem/%n"
2004-02-12 11:49:52 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "catch device by * - take 2" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem/0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "*ACM1" , NAME = "bad"
KERNEL == "*ACM0" , NAME = "modem/%n"
2003-12-03 17:22:53 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "catch device by ?" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem/0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM??*" , NAME = "modem/%n-1"
KERNEL == "ttyACM??" , NAME = "modem/%n-2"
KERNEL == "ttyACM?" , NAME = "modem/%n"
2003-12-03 17:22:53 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "catch device by character class" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem/0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[A-Z]*" , NAME = "modem/%n-1"
KERNEL == "ttyACM?[0-9]" , NAME = "modem/%n-2"
KERNEL == "ttyACM[0-9]*" , NAME = "modem/%n"
2003-11-23 16:47:28 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "replace kernel name" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2003-12-18 05:28:05 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "Handle comment lines in config file (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2003-12-18 05:28:05 +03:00
# this is a comment
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2003-12-18 05:28:05 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "Handle comment lines in config file with whitespace (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2003-12-18 05:28:05 +03:00
# this is a comment with whitespace before the comment
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2003-12-18 05:28:05 +03:00
2004-09-15 04:45:48 +04:00
EOF
} ,
{
desc = > "Handle whitespace only lines (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-09-15 04:45:48 +04:00
exp_name = > "whitespace" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2004-09-15 04:45:48 +04:00
# this is a comment with whitespace before the comment
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "whitespace"
2004-09-15 04:45:48 +04:00
2003-12-18 05:28:05 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "Handle empty lines in config file (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2003-12-18 05:28:05 +03:00
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2003-12-18 05:28:05 +03:00
2004-12-20 09:38:33 +03:00
EOF
} ,
{
desc = > "Handle backslashed multi lines in config file (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , \ \
NAME = "modem"
2004-12-20 09:38:33 +03:00
2005-02-26 04:52:04 +03:00
EOF
} ,
{
desc = > "preserve backslashes, if they are not for a newline" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-02-26 04:52:04 +03:00
exp_name = > "aaa" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , PROGRAM == "/bin/echo -e \\101" , RESULT == "A" , NAME = "aaa"
2004-12-20 09:38:33 +03:00
EOF
} ,
{
desc = > "Handle stupid backslashed multi lines in config file (and replace kernel name)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2004-12-20 09:38:33 +03:00
#
\ \
2008-10-17 15:54:50 +04:00
\ \
2004-12-20 09:38:33 +03:00
#\\
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , \ \
NAME = "modem"
2004-12-20 09:38:33 +03:00
2003-11-25 09:27:23 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "subdirectory handling" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "sub/direct/ory/modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "sub/direct/ory/modem"
2003-11-23 16:47:28 +03:00
EOF
} ,
{
2006-01-16 08:12:49 +03:00
desc = > "parent device name match of scsi partition" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "first_disk5" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "first_disk%n"
2003-11-23 16:47:28 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "test substitution chars (old key names)" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "Major:8:minor:5:kernelnumber:5:id:0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-01-16 08:12:49 +03:00
BUS == "scsi" , ID == "0:0:0:0" , NAME = "Major:%M:minor:%m:kernelnumber:%n:id:%b"
2006-08-20 21:11:32 +04:00
EOF
} ,
{
desc = > "test substitution chars" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "Major:8:minor:5:kernelnumber:5:id:0:0:0:0" ,
2006-08-20 21:11:32 +04:00
rules = > << EOF
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "Major:%M:minor:%m:kernelnumber:%n:id:%b"
2005-06-25 15:10:16 +04:00
EOF
} ,
{
2005-06-25 20:58:49 +04:00
desc = > "import of shell-value file" ,
2005-06-25 15:10:16 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2008-09-08 23:50:17 +04:00
exp_name = > "subdir/err/node" ,
2005-06-25 15:10:16 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , IMPORT { file } = "udev-test.conf" , NAME = "subdir/%E{udev_log}/node"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2005-06-25 20:58:49 +04:00
EOF
} ,
{
desc = > "import of shell-value returned from program" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-06-25 20:58:49 +04:00
exp_name = > "node12345678" ,
rules = > << EOF
2007-05-21 09:59:40 +04:00
SUBSYSTEMS == "scsi" , IMPORT = "/bin/echo -e \' TEST_KEY=12345678\\n TEST_key2=98765\'" , NAME = "node\$env{TEST_KEY}"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
[PATCH] Adding '%s' format specifier to NAME and SYMLINK
On Thu, Feb 12, 2004 at 05:34:57PM -0800, Greg KH wrote:
> On Tue, Feb 10, 2004 at 09:14:20AM +0100, Hannes Reinecke wrote:
> > Hi all,
> >
> > this patch makes the format for NAME and SYMLINK a bit more flexible:
> > I've added a new format specifier '%s{<SYSFS_var>}', which allows for
> > the value of any sysfs entry found for this device to be inserted.
> > Example (for our S/390 fcp adapter):
> >
> > BUS="ccw", SYSFS_devtype="1732/03", NAME="%k" \
> > SYMLINK="zfcp-%s{hba_id}-%s{wwpn}:%s{fcp_lun}"
> >
> > I know this could also be done with an external program, but having this
> > incorporated into udev makes life easier, especially if run from
> > initramfs. Plus it makes the rules easier to follow, as the result is
> > directly visible and need not to be looked up in some external program.
> >
> > Comments etc. welcome.
>
> Oops, sorry I missed this for the 017 release. I'll look at it tomorrow
> and get back to you. At first glance it looks like a good thing.
>
> Oh, you forgot to update the documentation, that's important to do if
> you want this change to make it in :)
I took a part of the code and made a version that uses already implemented
attribute finding logic.
The parsing of the format length '%3x' and the '%x{attribute}' is a fuction now,
maybe there are more possible users in the future.
I've also added the test to udev-test.pl.
2004-02-17 08:36:34 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "sustitution of sysfs value (%s{file})" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "disk-ATA-sda" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "disk-%s{vendor}-%k"
KERNEL == "ttyACM0" , NAME = "modem"
2003-11-23 16:47:28 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program result substitution" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "special-device-5" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n special-device" , RESULT == "-special-*" , NAME = "%c-1-%n"
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n special-device" , RESULT == "special--*" , NAME = "%c-2-%n"
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n special-device" , RESULT == "special-device-" , NAME = "%c-3-%n"
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n special-device" , RESULT == "special-devic" , NAME = "%c-4-%n"
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n special-device" , RESULT == "special-*" , NAME = "%c-%n"
[PATCH] netdev - udevdb+dev.d changes
Here is a patch to change the netdev handling in the database and for
the dev.d/ calls. I applies on top of the udevd.patch, cause klibc has
no sysinfo().
o netdev's are also put into our database now. I want this for the
udevruler gui to get a list of all handled devices.
All devices in the db are stamped with the system uptime value at
the creation time. 'udevinfo -d' prints it.
o the DEVPATH value is the key for udevdb, but if we rename
a netdev, the name is replaced in the kernel, so we add
the changed name to the db to match with the remove event.
NOTE: The dev.d/ scripts still get the original name from the
hotplug call. Should we replace DEVPATH with the new name too?
o We now only add a device to the db, if we have successfully created
the main node or successfully renamed a netdev. This is the main part
of the patch, cause I needed to clean the retval passing trough all
the functions used for node creation.
o DEVNODE sounds a bit ugly for netdev's so I exported DEVNAME too.
Can we change the name?
o I've added a UDEV_NO_DEVD to possibly skip the script execution
and used it in udev-test.pl.
udevstart is the same horror now, if you have scripts with logging
statements in dev.d/ it takes minutes to finish, can we skip the
scripts here too?
o The get_device_type() function is changed to be more strict, cause
'udevinfo -a -p /block/' gets a class device for it and tries to
print the major/minor values.
o bugfix, the RESULT value has now a working newline removal and a test
for this case.
2004-04-01 11:12:57 +04:00
EOF
} ,
{
desc = > "program result substitution (newline removal)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
[PATCH] netdev - udevdb+dev.d changes
Here is a patch to change the netdev handling in the database and for
the dev.d/ calls. I applies on top of the udevd.patch, cause klibc has
no sysinfo().
o netdev's are also put into our database now. I want this for the
udevruler gui to get a list of all handled devices.
All devices in the db are stamped with the system uptime value at
the creation time. 'udevinfo -d' prints it.
o the DEVPATH value is the key for udevdb, but if we rename
a netdev, the name is replaced in the kernel, so we add
the changed name to the db to match with the remove event.
NOTE: The dev.d/ scripts still get the original name from the
hotplug call. Should we replace DEVPATH with the new name too?
o We now only add a device to the db, if we have successfully created
the main node or successfully renamed a netdev. This is the main part
of the patch, cause I needed to clean the retval passing trough all
the functions used for node creation.
o DEVNODE sounds a bit ugly for netdev's so I exported DEVNAME too.
Can we change the name?
o I've added a UDEV_NO_DEVD to possibly skip the script execution
and used it in udev-test.pl.
udevstart is the same horror now, if you have scripts with logging
statements in dev.d/ it takes minutes to finish, can we skip the
scripts here too?
o The get_device_type() function is changed to be more strict, cause
'udevinfo -a -p /block/' gets a class device for it and tries to
print the major/minor values.
o bugfix, the RESULT value has now a working newline removal and a test
for this case.
2004-04-01 11:12:57 +04:00
exp_name = > "newline_removed" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo test" , RESULT == "test" , NAME = "newline_removed"
2003-11-24 09:25:13 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program result substitution" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2006-01-16 08:12:49 +03:00
exp_name = > "test-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n test-%b" , RESULT == "test-0:0*" , NAME = "%c"
2004-02-27 08:29:49 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program with lots of arguments" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-03-13 04:13:59 +03:00
exp_name = > "foo9" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9" , KERNEL == "sda5" , NAME = "%c{7}"
2004-03-11 12:36:12 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program with subshell" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-03-13 04:13:59 +03:00
exp_name = > "bar9" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/sh -c 'echo foo3 foo4 foo5 foo6 foo7 foo8 foo9 | sed s/foo9/bar9/'" , KERNEL == "sda5" , NAME = "%c{7}"
2004-03-11 12:36:12 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program arguments combined with apostrophes" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-03-13 04:13:59 +03:00
exp_name = > "foo7" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n 'foo3 foo4' 'foo5 foo6 foo7 foo8'" , KERNEL == "sda5" , NAME = "%c{5}"
2004-03-04 11:55:22 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "characters before the %c{N} substitution" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-03-13 04:13:59 +03:00
exp_name = > "my-foo9" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9" , KERNEL == "sda5" , NAME = "my-%c{7}"
2004-03-04 11:55:22 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "substitute the second to last argument" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-03-13 04:13:59 +03:00
exp_name = > "my-foo8" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9" , KERNEL == "sda5" , NAME = "my-%c{6}"
2005-06-20 02:29:38 +04:00
EOF
} ,
{
desc = > "test substitution by variable name" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "Major:8-minor:5-kernelnumber:5-id:0:0:0:0" ,
2005-06-20 02:29:38 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "Major:\$major-minor:\$minor-kernelnumber:\$number-id:\$id"
2005-06-20 02:29:38 +04:00
EOF
} ,
{
desc = > "test substitution by variable name 2" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "Major:8-minor:5-kernelnumber:5-id:0:0:0:0" ,
2005-06-20 02:29:38 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , DEVPATH == "*/sda/*" , NAME = "Major:\$major-minor:%m-kernelnumber:\$number-id:\$id"
2005-06-20 02:29:38 +04:00
EOF
} ,
{
desc = > "test substitution by variable name 3" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "850:0:0:05" ,
2005-06-20 02:29:38 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , DEVPATH == "*/sda/*" , NAME = "%M%m%b%n"
2005-06-20 02:29:38 +04:00
EOF
} ,
{
desc = > "test substitution by variable name 4" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "855" ,
2005-06-20 02:29:38 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , DEVPATH == "*/sda/*" , NAME = "\$major\$minor\$number"
2005-06-20 02:29:38 +04:00
EOF
} ,
{
desc = > "test substitution by variable name 5" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
exp_name = > "8550:0:0:0" ,
2005-06-20 02:29:38 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , DEVPATH == "*/sda/*" , NAME = "\$major%m%n\$id"
2003-12-25 10:56:54 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "non matching SUBSYSTEMS for device with no parent" ,
2004-03-13 04:13:59 +03:00
subsys = > "tty" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/virtual/tty/console" ,
2006-01-16 08:12:49 +03:00
exp_name = > "TTY" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n foo" , RESULT == "foo" , NAME = "foo"
2005-03-13 07:46:31 +03:00
KERNEL == "console" , NAME = "TTY"
2003-12-25 11:05:28 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "non matching SUBSYSTEMS" ,
2004-03-13 04:13:59 +03:00
subsys = > "tty" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/virtual/tty/console" ,
2004-03-13 04:13:59 +03:00
exp_name = > "TTY" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "foo" , ATTRS { dev } == "5:1" , NAME = "foo"
2005-03-13 07:46:31 +03:00
KERNEL == "console" , NAME = "TTY"
2003-12-25 11:33:56 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "ATTRS match" ,
2004-03-13 04:13:59 +03:00
subsys = > "tty" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/virtual/tty/console" ,
2004-03-13 04:13:59 +03:00
exp_name = > "foo" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
KERNEL == "console" , NAME = "TTY"
2008-10-23 02:13:59 +04:00
ATTRS { dev } == "5:1" , NAME = "foo"
2009-02-05 14:40:15 +03:00
EOF
} ,
{
desc = > "ATTR (empty file)" ,
subsys = > "tty" ,
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "empty" ,
rules = > << EOF
KERNEL == "sda" , ATTR { test_empty_file } == "?*" , NAME: = "something"
KERNEL == "sda" , ATTR { test_empty_file } != "" , NAME: = "not-empty"
KERNEL == "sda" , ATTR { test_empty_file } == "" , NAME: = "empty"
KERNEL == "sda" , ATTR { test_empty_file } != "?*" , NAME: = "not-something"
KERNEL == "sda" , NAME = "wrong"
EOF
} ,
{
desc = > "ATTR (non-existent file)" ,
subsys = > "tty" ,
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "non-existent" ,
rules = > << EOF
KERNEL == "sda" , ATTR { nofile } == "?*" , NAME: = "something"
KERNEL == "sda" , ATTR { nofile } != "" , NAME: = "not-empty"
KERNEL == "sda" , ATTR { nofile } == "" , NAME: = "empty"
KERNEL == "sda" , ATTR { nofile } != "?*" , NAME: = "not-something"
KERNEL == "sda" , TEST != "nofile" , NAME: = "non-existent"
KERNEL == "sda" , NAME = "wrong"
2003-11-27 04:45:26 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "program and bus type match" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2006-01-16 08:12:49 +03:00
exp_name = > "scsi-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "usb" , PROGRAM == "/bin/echo -n usb-%b" , NAME = "%c"
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n scsi-%b" , NAME = "%c"
SUBSYSTEMS == "foo" , PROGRAM == "/bin/echo -n foo-%b" , NAME = "%c"
2004-01-23 11:21:13 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "create all possible partitions" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "boot_disk15" ,
[PATCH] fix stupid all_partitions bug
> On Mon, 2005-04-11 at 14:55 +0200, Norbert Preining wrote:
> > On Mon, 11 Apr 2005, Kay Sievers wrote:
> > > > brw-rw---- 1 root root 8, 0 2005-04-10 14:58 /dev/sdcard
> > > > brw-rw---- 1 root root 8, 1 2005-04-10 14:58 /dev/sdcard1
> > > > brw-rw---- 1 root root 8, 1 2005-04-10 14:58 /dev/sdcard2
> > > > brw-rw---- 1 root root 8, 1 2005-04-10 14:58 /dev/sdcard3
> > >
> > > This looks broken.
> >
> > Good to hear.
Yeah, I guess it's broken. In create_node() in udev_add.c there is
always added 1 to the minor number, thus the error. The attached patch
should fix this.
2005-04-12 03:05:03 +04:00
exp_majorminor = > "8:15" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME { all_partitions } = "boot_disk"
2004-02-17 08:44:28 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "sysfs parent hierarchy" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
ATTRS { idProduct } == "007b" , NAME = "modem"
2004-02-12 10:34:21 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "name test with ! in the name" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/virtual/block/fake!blockdev0" ,
exp_name = > "is/a/fake/blockdev0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , NAME = "is/not/a/%k"
SUBSYSTEM == "block" , NAME = "is/a/%k"
KERNEL == "ttyACM0" , NAME = "modem"
2004-02-17 05:25:01 +03:00
EOF
} ,
{
2004-03-13 04:13:59 +03:00
desc = > "name test with ! in the name, but no matching rule" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/virtual/block/fake!blockdev0" ,
exp_name = > "fake/blockdev0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem"
2004-02-17 09:00:38 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "KERNELS rule" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "scsi-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "usb" , KERNELS == "0:0:0:0" , NAME = "not-scsi"
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:1" , NAME = "no-match"
SUBSYSTEMS == "scsi" , KERNELS == ":0" , NAME = "short-id"
SUBSYSTEMS == "scsi" , KERNELS == "/0:0:0:0" , NAME = "no-match"
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "scsi-0:0:0:0"
2004-02-17 09:00:38 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "KERNELS wildcard all" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "scsi-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "*:1" , NAME = "no-match"
SUBSYSTEMS == "scsi" , KERNELS == "*:0:1" , NAME = "no-match"
SUBSYSTEMS == "scsi" , KERNELS == "*:0:0:1" , NAME = "no-match"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "0:0:0:0" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "*" , NAME = "scsi-0:0:0:0"
2004-02-17 09:00:38 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "KERNELS wildcard partial" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "scsi-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "*:0" , NAME = "scsi-0:0:0:0"
2004-02-17 09:00:38 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "KERNELS wildcard partial 2" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "scsi-0:0:0:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "0:0:0:0" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNELS == "*:0:0:0" , NAME = "scsi-0:0:0:0"
2006-09-05 04:18:06 +04:00
EOF
} ,
{
desc = > "substitute attr with link target value (first match)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2006-09-05 04:18:06 +04:00
exp_name = > "driver-is-sd" ,
rules = > << EOF
SUBSYSTEMS == "scsi" , NAME = "driver-is-\$attr{driver}"
EOF
} ,
{
desc = > "substitute attr with link target value (currently selected device)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "driver-is-ahci" ,
2006-09-05 04:18:06 +04:00
rules = > << EOF
SUBSYSTEMS == "pci" , NAME = "driver-is-\$attr{driver}"
2004-03-05 05:59:13 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "ignore ATTRS attribute whitespace" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "ignored" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , ATTRS { whitespace_test } == "WHITE SPACE" , NAME = "ignored"
2004-03-05 05:59:13 +03:00
EOF
} ,
{
2006-08-20 21:11:32 +04:00
desc = > "do not ignore ATTRS attribute whitespace" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "matched-with-space" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , ATTRS { whitespace_test } == "WHITE SPACE " , NAME = "wrong-to-ignore"
SUBSYSTEMS == "scsi" , ATTRS { whitespace_test } == "WHITE SPACE " , NAME = "matched-with-space"
2004-03-11 12:39:53 +03:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions USER=bad GROUP=name" ,
2004-04-16 10:14:49 +04:00
subsys = > "tty" ,
2008-09-29 07:18:23 +04:00
devpath = > "/devices/virtual/tty/tty33" ,
2004-04-16 10:14:49 +04:00
exp_name = > "tty33" ,
2004-12-20 05:04:11 +03:00
exp_perms = > "0:0:0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
KERNEL == "tty33" , NAME = "tty33" , OWNER = "bad" , GROUP = "name"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions OWNER=5000" ,
2004-03-13 04:13:59 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "node" ,
2004-12-20 05:04:11 +03:00
exp_perms = > "5000::0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OWNER = "5000"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions GROUP=100" ,
2004-04-16 10:14:49 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "node" ,
2004-12-20 05:04:11 +03:00
exp_perms = > ":100:0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , GROUP = "100"
2005-03-19 01:52:41 +03:00
EOF
} ,
{
desc = > "textual user id" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-03-19 01:52:41 +03:00
exp_name = > "node" ,
2005-03-19 05:11:48 +03:00
exp_perms = > "nobody::0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OWNER = "nobody"
2005-03-19 01:52:41 +03:00
EOF
} ,
{
desc = > "textual group id" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-03-19 01:52:41 +03:00
exp_name = > "node" ,
exp_perms = > ":daemon:0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , GROUP = "daemon"
2005-03-19 03:45:03 +03:00
EOF
} ,
{
desc = > "textual user/group id" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-03-19 03:45:03 +03:00
exp_name = > "node" ,
2005-03-19 05:11:48 +03:00
exp_perms = > "root:mail:0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OWNER = "root" , GROUP = "mail"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions MODE=0777" ,
2004-04-16 10:14:49 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "node" ,
exp_perms = > "::0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , MODE = "0777"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions OWNER=5000 GROUP=100 MODE=0777" ,
2004-04-16 10:14:49 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "node" ,
exp_perms = > "5000:100:0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OWNER = "5000" , GROUP = "100" , MODE = "0777"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions OWNER to 5000" ,
2004-04-16 10:14:49 +04:00
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-18 13:34:17 +03:00
exp_perms = > "5000::" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , OWNER = "5000"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions GROUP to 100" ,
2004-04-16 10:14:49 +04:00
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-20 05:04:11 +03:00
exp_perms = > ":100:0660" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , GROUP = "100"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions MODE to 0060" ,
2004-04-16 10:14:49 +04:00
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-18 13:34:17 +03:00
exp_perms = > "::0060" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , MODE = "0060"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2004-12-18 13:34:17 +03:00
desc = > "permissions OWNER, GROUP, MODE" ,
2004-04-16 10:14:49 +04:00
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_perms = > "5000:100:0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , OWNER = "5000" , GROUP = "100" , MODE = "0777"
2004-12-21 01:44:57 +03:00
EOF
} ,
{
desc = > "permissions only rule" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-21 01:44:57 +03:00
exp_perms = > "5000:100:0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , OWNER = "5000" , GROUP = "100" , MODE = "0777"
2005-03-13 07:46:31 +03:00
KERNEL == "ttyUSX[0-9]*" , OWNER = "5001" , GROUP = "101" , MODE = "0444"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n"
2004-12-21 02:19:34 +03:00
EOF
} ,
{
desc = > "multiple permissions only rule" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-21 02:19:34 +03:00
exp_perms = > "3000:4000:0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
SUBSYSTEM == "tty" , OWNER = "3000"
SUBSYSTEM == "tty" , GROUP = "4000"
SUBSYSTEM == "tty" , MODE = "0777"
KERNEL == "ttyUSX[0-9]*" , OWNER = "5001" , GROUP = "101" , MODE = "0444"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n"
2004-12-21 02:19:34 +03:00
EOF
} ,
{
desc = > "permissions only rule with override at NAME rule" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "ttyACM0" ,
2004-12-21 02:19:34 +03:00
exp_perms = > "3000:8000:0777" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
SUBSYSTEM == "tty" , OWNER = "3000"
SUBSYSTEM == "tty" , GROUP = "4000"
SUBSYSTEM == "tty" , MODE = "0777"
KERNEL == "ttyUSX[0-9]*" , OWNER = "5001" , GROUP = "101" , MODE = "0444"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , GROUP = "8000"
2004-03-13 04:13:59 +03:00
EOF
} ,
{
desc = > "major/minor number test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-03-13 04:13:59 +03:00
exp_name = > "node" ,
exp_majorminor = > "8:0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node"
2004-03-13 05:00:39 +03:00
EOF
} ,
{
desc = > "big major number test" ,
2008-09-29 06:12:44 +04:00
subsys = > "misc" ,
devpath = > "/devices/virtual/misc/misc-fake1" ,
2004-03-13 05:00:39 +03:00
exp_name = > "node" ,
exp_majorminor = > "4095:1" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "misc-fake1" , NAME = "node"
2004-03-13 05:00:39 +03:00
EOF
} ,
{
desc = > "big major and big minor number test" ,
2008-09-29 06:12:44 +04:00
subsys = > "misc" ,
devpath = > "/devices/virtual/misc/misc-fake89999" ,
2004-03-13 05:00:39 +03:00
exp_name = > "node" ,
2008-09-29 06:12:44 +04:00
exp_majorminor = > "4095:89999" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "misc-fake89999" , NAME = "node"
2004-10-30 15:29:52 +04:00
EOF
} ,
{
desc = > "multiple symlinks with format char" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "symlink2-ttyACM0" ,
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK = "symlink1-%n symlink2-%k symlink3-%b"
2005-07-08 01:43:13 +04:00
EOF
} ,
{
desc = > "multiple symlinks with a lot of s p a c e s" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-07-08 01:43:13 +04:00
exp_name = > "one" ,
not_exp_name = > " " ,
2008-09-29 06:12:44 +04:00
exp_target = > "ttyACM0" ,
2005-07-08 01:43:13 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK = " one two "
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink creation (same directory)" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "modem0" ,
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK = "modem%n"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink creation (relative link forward)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6" ,
2004-04-16 10:14:49 +04:00
exp_name = > "1/2/symlink" ,
exp_target = > "a/b/node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "1/2/a/b/node" , SYMLINK = "1/2/symlink"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink creation (relative link back and forward)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6" ,
2004-04-16 10:14:49 +04:00
exp_name = > "1/2/c/d/symlink" ,
exp_target = > "../../a/b/node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , ATTRS { vendor } == "ATA" , NAME = "1/2/a/b/node" , SYMLINK = "1/2/c/d/symlink"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "multiple symlinks" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "second-0" ,
2008-09-29 06:12:44 +04:00
exp_target = > "modem" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM0" , NAME = "modem" , SYMLINK = "first-%n second-%n third-%n"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink only rule" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "symlink-only2" ,
exp_target = > "link" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , SYMLINK += "symlink-only1"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , SYMLINK += "symlink-only2"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "link" , SYMLINK += "symlink0"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink name '.'" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "." ,
exp_target = > "link" ,
2005-02-18 05:30:03 +03:00
exp_add_error = > "yes" ,
exp_rem_error = > "yes" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "link" , SYMLINK += "."
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink node to itself" ,
subsys = > "tty" ,
2008-09-29 07:18:23 +04:00
devpath = > "/devices/virtual/tty/tty0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "link" ,
exp_target = > "link" ,
2006-06-14 18:32:52 +04:00
exp_add_error = > "yes" ,
2005-02-18 05:30:03 +03:00
exp_rem_error = > "yes" ,
2005-03-28 14:20:05 +04:00
option = > "clean" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-06-05 07:13:33 +04:00
KERNEL == "tty0" , NAME = "link" , SYMLINK += "link"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %n substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "symlink0" ,
2008-09-29 06:12:44 +04:00
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK += "symlink%n"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %k substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "symlink-ttyACM0" ,
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK += "symlink-%k"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %M:%m substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "major-166:0" ,
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK += "major-%M:%m"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
2006-01-16 08:12:49 +03:00
desc = > "symlink %b substitution" ,
2004-04-16 10:14:49 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2006-01-16 08:12:49 +03:00
exp_name = > "symlink-0:0:0:0" ,
2004-04-16 10:14:49 +04:00
exp_target = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , SYMLINK += "symlink-%b"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %c substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "test" ,
2008-09-29 06:12:44 +04:00
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , PROGRAM == "/bin/echo test" NAME = "ttyACM%n" , SYMLINK += "%c"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %c{N} substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "test" ,
2008-09-29 06:12:44 +04:00
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , PROGRAM == "/bin/echo symlink test this" NAME = "ttyACM%n" , SYMLINK += "%c{2}"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %c{N+} substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2004-04-16 10:14:49 +04:00
exp_name = > "this" ,
2008-09-29 06:12:44 +04:00
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , PROGRAM == "/bin/echo symlink test this" NAME = "ttyACM%n" , SYMLINK += "%c{2+}"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink only rule with %c{N+}" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-04-16 10:14:49 +04:00
exp_name = > "test" ,
exp_target = > "link" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , PROGRAM == "/bin/echo link test this" SYMLINK += "%c{2+}"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "link" , SYMLINK += "symlink0"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "symlink %s{filename} substitution" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "166:0" ,
exp_target = > "ttyACM0" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "ttyACM%n" , SYMLINK += "%s{dev}"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "program result substitution (numbered part of)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-04-16 10:14:49 +04:00
exp_name = > "link1" ,
exp_target = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n node link1 link2" , RESULT == "node *" , NAME = "%c{1}" , SYMLINK += "%c{2} %c{3}"
2004-04-16 10:14:49 +04:00
EOF
} ,
{
desc = > "program result substitution (numbered part of+)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5" ,
2004-04-16 10:14:49 +04:00
exp_name = > "link4" ,
exp_target = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , PROGRAM == "/bin/echo -n node link1 link2 link3 link4" , RESULT == "node *" , NAME = "%c{1}" , SYMLINK += "%c{2+}"
2005-02-14 08:03:06 +03:00
EOF
} ,
{
desc = > "ignore rule test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-07-08 00:40:09 +04:00
exp_name = > "nothing" ,
not_exp_name = > "node" ,
2005-02-18 05:30:03 +03:00
exp_add_error = > "yes" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2009-01-30 05:53:09 +03:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OPTIONS = "ignore_device"
2005-02-14 08:03:06 +03:00
EOF
} ,
{
desc = > "all_partitions, option-only rule" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-02-14 08:03:06 +03:00
exp_name = > "node6" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
SUBSYSTEM == "block" , OPTIONS = "all_partitions"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node"
2005-02-14 08:03:06 +03:00
EOF
} ,
{
desc = > "all_partitions, option-only rule (fail on partition)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-02-14 08:03:06 +03:00
exp_name = > "node6" ,
2005-02-18 05:30:03 +03:00
exp_add_error = > "yes" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2005-03-13 07:46:31 +03:00
SUBSYSTEM == "block" , OPTIONS = "all_partitions"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node"
2004-11-12 08:52:55 +03:00
EOF
} ,
{
2004-11-13 16:43:24 +03:00
desc = > "ignore remove event test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-11-13 16:43:24 +03:00
exp_name = > "node" ,
2005-02-18 05:30:03 +03:00
exp_rem_error = > "yes" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OPTIONS = "ignore_remove"
2004-11-13 16:43:24 +03:00
EOF
} ,
{
desc = > "ignore remove event test (with all partitions)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-11-13 16:43:24 +03:00
exp_name = > "node14" ,
2005-02-18 05:30:03 +03:00
exp_rem_error = > "yes" ,
2005-03-28 14:20:05 +04:00
option = > "clean" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , OPTIONS = "ignore_remove, all_partitions"
2004-11-13 16:43:24 +03:00
EOF
} ,
{
desc = > "SUBSYSTEM match test" ,
2004-11-12 08:52:55 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-11-12 08:52:55 +03:00
exp_name = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "should_not_match" , SUBSYSTEM == "vc"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , SUBSYSTEM == "block"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "should_not_match2" , SUBSYSTEM == "vc"
2004-11-13 07:21:12 +03:00
EOF
} ,
{
2006-08-19 18:06:25 +04:00
desc = > "DRIVERS match test" ,
2004-11-13 07:21:12 +03:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2004-11-13 07:21:12 +03:00
exp_name = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "should_not_match" , DRIVERS == "sd-wrong"
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "node" , DRIVERS == "sd"
2005-02-09 06:37:32 +03:00
EOF
} ,
{
desc = > "temporary node creation test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-02-11 05:28:17 +03:00
exp_name = > "node" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , PROGRAM == "/usr/bin/test -b %N" NAME = "node"
2005-02-09 06:37:32 +03:00
EOF
} ,
{
desc = > "devpath substitution test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-02-09 06:37:32 +03:00
exp_name = > "sda" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-09-29 06:12:44 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , PROGRAM == "/bin/echo %p" , RESULT == "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" NAME = "%k"
2005-02-10 11:03:55 +03:00
EOF
} ,
{
desc = > "parent node name substitution test sequence 1/2 (keep)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-02-10 11:03:55 +03:00
exp_name = > "main_device" ,
option = > "keep" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda" , NAME = "main_device"
2005-02-10 11:03:55 +03:00
EOF
} ,
{
desc = > "parent node name substitution test sequence 2/2 (clean)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-02-10 11:03:55 +03:00
exp_name = > "main_device-part-1" ,
option = > "clean" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "%P-part-1"
2005-02-10 11:03:55 +03:00
EOF
} ,
{
desc = > "udev_root substitution" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-02-10 11:03:55 +03:00
exp_name = > "start-udev-root-end" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "start-%r-end"
2005-03-13 00:55:08 +03:00
EOF
} ,
{
desc = > "last_rule option" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 00:55:08 +03:00
exp_name = > "last" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , SYMLINK += "last" , OPTIONS = "last_rule"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "very-last"
2005-03-13 07:46:31 +03:00
EOF
} ,
{
desc = > "negation KERNEL!=" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 07:46:31 +03:00
exp_name = > "match" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL != "sda1" , NAME = "matches-but-is-negated"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL != "xsda1" , NAME = "match"
2005-03-13 07:46:31 +03:00
EOF
} ,
{
desc = > "negation SUBSYSTEM!=" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 07:46:31 +03:00
exp_name = > "not-anything" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , SUBSYSTEM == "block" , KERNEL != "sda1" , NAME = "matches-but-is-negated"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , SUBSYSTEM != "anything" , NAME = "not-anything"
2005-03-13 07:46:31 +03:00
EOF
} ,
{
desc = > "negation PROGRAM!= exit code" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 07:46:31 +03:00
exp_name = > "nonzero-program" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2005-03-13 07:46:31 +03:00
KERNEL == "sda1" , PROGRAM != "/bin/false" , NAME = "nonzero-program"
2005-03-13 09:14:49 +03:00
EOF
} ,
{
desc = > "test for whitespace between the operator" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 09:14:49 +03:00
exp_name = > "true" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2005-03-13 09:14:49 +03:00
KERNEL == "sda1" , NAME = "true"
2005-03-13 13:40:32 +03:00
EOF
} ,
{
desc = > "ENV{} test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 13:40:32 +03:00
exp_name = > "true" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-14 21:55:57 +04:00
ENV { ENV_KEY_TEST } = "test"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "go" , NAME = "wrong"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "test" , NAME = "true"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "bad" , NAME = "bad"
2005-03-13 13:40:32 +03:00
EOF
} ,
{
desc = > "ENV{} test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-13 13:40:32 +03:00
exp_name = > "true" ,
2005-03-27 03:10:03 +04:00
rules = > << EOF
2008-10-14 21:55:57 +04:00
ENV { ENV_KEY_TEST } = "test"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "go" , NAME = "wrong"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "yes" , ENV { ACTION } == "add" , ENV { DEVPATH } == "*/block/sda/sdax1" , NAME = "no"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "test" , ENV { ACTION } == "add" , ENV { DEVPATH } == "*/block/sda/sda1" , NAME = "true"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ENV_KEY_TEST } == "bad" , NAME = "bad"
2005-08-16 06:25:20 +04:00
EOF
} ,
{
desc = > "ENV{} test (assign)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-08-16 06:25:20 +04:00
exp_name = > "true" ,
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } = "true"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } == "yes" , NAME = "no"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } == "true" , NAME = "true"
2006-09-05 02:50:25 +04:00
EOF
} ,
{
desc = > "ENV{} test (assign 2 times)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2006-09-05 02:50:25 +04:00
exp_name = > "true" ,
rules = > << EOF
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } = "true"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } = "absolutely-\$env{ASSIGN}"
2008-10-23 02:13:59 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , NAME = "before"
2006-09-05 02:50:25 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } == "yes" , NAME = "no"
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , ENV { ASSIGN } == "absolutely-true" , NAME = "true"
2005-08-16 06:25:20 +04:00
EOF
} ,
{
desc = > "ENV{} test (assign2)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-08-16 06:25:20 +04:00
exp_name = > "part" ,
rules = > << EOF
2006-04-24 21:25:55 +04:00
SUBSYSTEM == "block" , KERNEL == "*[0-9]" , ENV { PARTITION } = "true" , ENV { MAINDEVICE } = "false"
SUBSYSTEM == "block" , KERNEL == "*[!0-9]" , ENV { PARTITION } = "false" , ENV { MAINDEVICE } = "true"
2005-08-16 06:25:20 +04:00
ENV { MAINDEVICE } == "true" , NAME = "disk"
2008-10-23 02:13:59 +04:00
SUBSYSTEM == "block" , NAME = "before"
2005-08-16 06:25:20 +04:00
ENV { PARTITION } == "true" , NAME = "part"
2005-03-27 03:15:07 +04:00
EOF
} ,
{
desc = > "untrusted string sanitize" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-03-27 03:15:07 +04:00
exp_name = > "sane" ,
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , PROGRAM == "/bin/echo -e name; (/sbin/badprogram)" , RESULT == "name_ _/sbin/badprogram_" , NAME = "sane"
2005-08-28 17:55:58 +04:00
EOF
} ,
{
desc = > "untrusted string sanitize (don't replace utf8)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-08-28 17:55:58 +04:00
exp_name = > "uber" ,
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , PROGRAM == "/bin/echo -e \\xc3\\xbcber" RESULT == "\xc3\xbcber" , NAME = "uber"
2005-08-28 17:55:58 +04:00
EOF
} ,
{
desc = > "untrusted string sanitize (replace invalid utf8)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-08-28 17:55:58 +04:00
exp_name = > "replaced" ,
rules = > << EOF
2006-08-20 21:11:32 +04:00
SUBSYSTEMS == "scsi" , KERNEL == "sda1" , PROGRAM == "/bin/echo -e \\xef\\xe8garbage" , RESULT == "__garbage" , NAME = "replaced"
2005-03-28 13:22:17 +04:00
EOF
} ,
{
2008-10-23 02:13:59 +04:00
desc = > "read sysfs value from parent device" ,
2005-03-28 13:22:17 +04:00
subsys = > "block" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-09-29 06:12:44 +04:00
exp_name = > "serial-354172020305000" ,
2005-03-28 13:22:17 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
KERNEL == "ttyACM*" , ATTRS { serial } == "?*" , NAME = "serial-%s{serial}"
2005-03-28 14:20:05 +04:00
EOF
} ,
{
desc = > "match against empty key string" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-03-28 14:20:05 +04:00
exp_name = > "ok" ,
rules = > << EOF
2006-08-20 21:11:32 +04:00
KERNEL == "sda" , ATTRS { nothing } != "" , NAME = "not-1-ok"
KERNEL == "sda" , ATTRS { nothing } == "" , NAME = "not-2-ok"
KERNEL == "sda" , ATTRS { vendor } != "" , NAME = "ok"
KERNEL == "sda" , ATTRS { vendor } == "" , NAME = "not-3-ok"
2005-04-02 19:45:35 +04:00
EOF
} ,
{
desc = > "check ACTION value" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-04-02 19:45:35 +04:00
exp_name = > "ok" ,
rules = > << EOF
ACTION == "unknown" , KERNEL == "sda" , NAME = "unknown-not-ok"
ACTION == "add" , KERNEL == "sda" , NAME = "ok"
EOF
} ,
{
2008-10-23 02:13:59 +04:00
desc = > "apply NAME final" ,
2005-04-02 19:45:35 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-04-02 19:45:35 +04:00
exp_name = > "link" ,
exp_target = > "ok" ,
rules = > << EOF
2008-10-23 02:13:59 +04:00
KERNEL == "sda" , NAME: = "ok"
2005-04-02 19:45:35 +04:00
KERNEL == "sda" , NAME = "not-ok"
KERNEL == "sda" , SYMLINK += "link"
EOF
} ,
{
desc = > "test RUN key" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-04-02 19:45:35 +04:00
exp_name = > "testsymlink" ,
exp_target = > "ok" ,
exp_rem_error = > "yes" ,
option = > "clean" ,
rules = > << EOF
KERNEL == "sda" , NAME = "ok" , RUN += "/bin/ln -s ok %r/testsymlink"
KERNEL == "sda" , NAME = "not-ok"
2005-04-04 17:20:48 +04:00
EOF
} ,
{
desc = > "test RUN key and DEVNAME" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-04-04 17:20:48 +04:00
exp_name = > "testsymlink" ,
exp_target = > "ok" ,
exp_rem_error = > "yes" ,
option = > "clean" ,
rules = > << EOF
KERNEL == "sda" , NAME = "not-ok"
2008-10-23 02:13:59 +04:00
KERNEL == "sda" , NAME = "ok" , RUN += "/bin/sh -c 'ln -s `basename \$\$DEVNAME` %r/testsymlink'"
2005-04-02 19:45:35 +04:00
EOF
} ,
{
desc = > "test RUN key remove" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-04-02 19:45:35 +04:00
exp_name = > "testsymlink2" ,
exp_target = > "ok2" ,
rules = > << EOF
KERNEL == "sda" , NAME = "ok2" , RUN += "/bin/ln -s ok2 %r/testsymlink2"
KERNEL == "sda" , ACTION == "remove" , RUN += "/bin/rm -f %r/testsymlink2"
KERNEL == "sda" , NAME = "not-ok2"
2005-06-05 06:57:03 +04:00
EOF
} ,
{
desc = > "final assignment" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-06-05 06:57:03 +04:00
exp_name = > "ok" ,
2008-10-17 15:54:50 +04:00
exp_perms = > "root:tty:0640" ,
2005-06-05 06:57:03 +04:00
rules = > << EOF
2008-10-17 15:54:50 +04:00
KERNEL == "sda" , GROUP: = "tty"
2005-06-05 06:57:03 +04:00
KERNEL == "sda" , GROUP = "not-ok" , MODE = "0640" , NAME = "ok"
EOF
} ,
{
2008-10-17 15:54:50 +04:00
desc = > "final assignment 2" ,
2005-06-05 06:57:03 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-06-05 06:57:03 +04:00
exp_name = > "ok" ,
2008-10-17 15:54:50 +04:00
exp_perms = > "root:tty:0640" ,
2005-06-05 06:57:03 +04:00
rules = > << EOF
2008-10-17 15:54:50 +04:00
KERNEL == "sda" , GROUP: = "tty"
2005-06-05 06:57:03 +04:00
SUBSYSTEM == "block" , MODE: = "640"
KERNEL == "sda" , GROUP = "not-ok" , MODE = "0666" , NAME = "ok"
2005-06-25 15:10:16 +04:00
EOF
} ,
{
desc = > "env substitution" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-06-25 15:10:16 +04:00
exp_name = > "node-add-me" ,
rules = > << EOF
KERNEL == "sda" , MODE = "0666" , NAME = "node-\$env{ACTION}-me"
2005-06-05 07:13:33 +04:00
EOF
} ,
{
desc = > "reset list to current value" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-06-05 07:13:33 +04:00
exp_name = > "three" ,
not_exp_name = > "two" ,
exp_target = > "node" ,
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , SYMLINK += "one"
KERNEL == "ttyACM[0-9]*" , SYMLINK += "two"
KERNEL == "ttyACM[0-9]*" , SYMLINK = "three"
KERNEL == "ttyACM[0-9]*" , NAME = "node"
2005-07-08 00:40:09 +04:00
EOF
} ,
{
desc = > "test empty NAME" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2008-10-23 02:13:59 +04:00
exp_name = > "<none>" ,
2009-01-30 05:53:09 +03:00
not_exp_name = > "ttyACM0" ,
exp_add_error = > "yes" ,
rules = > << EOF
KERNEL == "ttyACM[0-9]*" , NAME = ""
EOF
} ,
{
desc = > "test empty NAME (empty override)" ,
subsys = > "tty" ,
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
exp_name = > "<none>" ,
2005-07-08 00:40:09 +04:00
not_exp_name = > "wrong" ,
exp_add_error = > "yes" ,
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "wrong"
2008-10-23 02:13:59 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = ""
2005-07-08 00:40:09 +04:00
EOF
} ,
{
2009-01-30 05:53:09 +03:00
desc = > "test empty NAME (non-empty override)" ,
2005-07-08 00:40:09 +04:00
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-07-08 00:40:09 +04:00
exp_name = > "right" ,
rules = > << EOF
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = ""
KERNEL == "ttyACM[0-9]*" , NAME = "wrong"
2008-10-23 02:13:59 +04:00
KERNEL == "ttyACM[0-9]*" , NAME = "right"
2005-07-12 14:52:56 +04:00
EOF
} ,
{
desc = > "test multi matches" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-07-12 14:52:56 +04:00
exp_name = > "right" ,
rules = > << EOF
2008-10-23 02:13:59 +04:00
KERNEL == "ttyACM*" , NAME = "before"
2008-09-29 06:12:44 +04:00
KERNEL == "ttyACM*|nothing" , NAME = "right"
2005-07-12 14:52:56 +04:00
EOF
} ,
{
desc = > "test multi matches 2" ,
subsys = > "tty" ,
2008-09-29 07:01:12 +04:00
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
2005-07-12 14:52:56 +04:00
exp_name = > "right" ,
rules = > << EOF
KERNEL == "dontknow*|*nothing" , NAME = "nomatch"
2008-10-23 02:13:59 +04:00
KERNEL == "ttyACM*" , NAME = "before"
2008-09-29 06:12:44 +04:00
KERNEL == "dontknow*|ttyACM*|nothing*" , NAME = "right"
2008-10-25 05:00:03 +04:00
EOF
} ,
{
desc = > "test multi matches 3" ,
subsys = > "tty" ,
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
exp_name = > "right" ,
rules = > << EOF
KERNEL == "dontknow|nothing" , NAME = "nomatch"
KERNEL == "dontknow|ttyACM0a|nothing|attyACM0" , NAME = "wrong1"
KERNEL == "X|attyACM0|dontknow|ttyACM0a|nothing|attyACM0" , NAME = "wrong2"
KERNEL == "dontknow|ttyACM0|nothing" , NAME = "right"
EOF
} ,
{
desc = > "test multi matches 4" ,
subsys = > "tty" ,
devpath = > "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0" ,
exp_name = > "right" ,
rules = > << EOF
KERNEL == "dontknow|nothing" , NAME = "nomatch"
KERNEL == "dontknow|ttyACM0a|nothing|attyACM0" , NAME = "wrong1"
KERNEL == "X|attyACM0|dontknow|ttyACM0a|nothing|attyACM0" , NAME = "wrong2"
KERNEL == "all|dontknow|ttyACM0" , NAME = "right"
KERNEL == "ttyACM0a|nothing" , NAME = "wrong3"
2005-07-12 16:46:36 +04:00
EOF
} ,
{
desc = > "IMPORT parent test sequence 1/2 (keep)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2005-07-12 16:46:36 +04:00
exp_name = > "parent" ,
option = > "keep" ,
rules = > << EOF
KERNEL == "sda" , IMPORT = "/bin/echo -e \'PARENT_KEY=parent_right\\nWRONG_PARENT_KEY=parent_wrong'"
KERNEL == "sda" , NAME = "parent"
EOF
} ,
{
desc = > "IMPORT parent test sequence 2/2 (keep)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-07-12 16:46:36 +04:00
exp_name = > "parentenv-parent_right" ,
option = > "clean" ,
rules = > << EOF
KERNEL == "sda1" , IMPORT { parent } = "PARENT*" , NAME = "parentenv-\$env{PARENT_KEY}\$env{WRONG_PARENT_KEY}"
2005-07-16 09:46:31 +04:00
EOF
} ,
{
desc = > "GOTO test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2005-07-16 09:46:31 +04:00
exp_name = > "right" ,
rules = > << EOF
KERNEL == "sda1" , GOTO = "TEST"
KERNEL == "sda1" , NAME = "wrong"
2008-10-23 02:13:59 +04:00
KERNEL == "sda1" , GOTO = "BAD"
2005-07-16 09:46:31 +04:00
KERNEL == "sda1" , NAME = "" , LABEL = "NO"
KERNEL == "sda1" , NAME = "right" , LABEL = "TEST"
2008-10-23 02:13:59 +04:00
KERNEL == "sda1" , LABEL = "BAD"
2009-05-13 20:01:32 +04:00
EOF
} ,
{
desc = > "GOTO label does not exist" ,
subsys = > "block" ,
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
exp_name = > "right" ,
rules = > << EOF
KERNEL == "sda1" , GOTO = "does-not-exist"
KERNEL == "sda1" , NAME = "right" ,
LABEL = "exists"
2006-04-24 21:25:55 +04:00
EOF
} ,
{
desc = > "NAME compare test" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2006-04-24 21:25:55 +04:00
exp_name = > "link" ,
exp_target = > "node" ,
not_exp_name = > "wronglink" ,
rules = > << EOF
KERNEL == "sda1" , NAME = "node"
KERNEL == "sda2" , NAME = "wrong"
KERNEL == "sda1" , NAME == "wrong*" , SYMLINK += "wronglink"
KERNEL == "sda1" , NAME == "?*" , SYMLINK += "link"
KERNEL == "sda1" , NAME == "node*" , SYMLINK += "link2"
2007-07-25 17:29:14 +04:00
EOF
} ,
{
desc = > "NAME compare test 2" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2007-07-25 17:29:14 +04:00
exp_name = > "link2" ,
exp_target = > "sda1" ,
not_exp_name = > "link" ,
rules = > << EOF
KERNEL == "sda1" , NAME == "?*" , SYMLINK += "link"
KERNEL == "sda1" , NAME != "?*" , SYMLINK += "link2"
2006-04-24 21:25:55 +04:00
EOF
} ,
{
desc = > "invalid key operation" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2006-04-24 21:25:55 +04:00
exp_name = > "yes" ,
rules = > << EOF
2007-02-25 03:06:20 +03:00
KERNEL = "sda1" , NAME = "no"
2006-04-24 21:25:55 +04:00
KERNEL == "sda1" , NAME = "yes"
2007-02-25 03:06:20 +03:00
EOF
} ,
{
desc = > "operator chars in attribute" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2007-02-25 03:06:20 +03:00
exp_name = > "yes" ,
rules = > << EOF
KERNEL == "sda" , ATTR { test:colon + plus } == "?*" , NAME = "yes"
2006-08-13 06:23:16 +04:00
EOF
} ,
{
desc = > "overlong comment line" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1" ,
2006-08-13 06:23:16 +04:00
exp_name = > "yes" ,
rules = > << EOF
# 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
2008-10-17 15:54:50 +04:00
# 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
KERNEL == "sda1" , NAME == "no"
2006-08-13 06:23:16 +04:00
KERNEL == "sda1" , NAME = "yes"
2007-06-03 14:29:46 +04:00
EOF
} ,
{
desc = > "magic subsys/kernel lookup" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "00:16:41:e2:8d:ff" ,
2007-06-03 14:29:46 +04:00
rules = > << EOF
KERNEL == "sda" , NAME = "\$attr{[net/eth0]address}"
2007-08-16 14:45:31 +04:00
EOF
} ,
{
desc = > "TEST absolute path" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2007-08-16 14:45:31 +04:00
exp_name = > "there" ,
rules = > << EOF
TEST == "/etc/hosts" , NAME = "there"
2008-10-17 15:54:50 +04:00
TEST != "/etc/hosts" , NAME = "notthere"
2007-08-16 14:45:31 +04:00
EOF
} ,
{
desc = > "TEST subsys/kernel lookup" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2007-08-16 14:45:31 +04:00
exp_name = > "yes" ,
rules = > << EOF
KERNEL == "sda" , TEST == "[net/eth0]" , NAME = "yes"
EOF
} ,
{
desc = > "TEST relative path" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2007-08-16 14:45:31 +04:00
exp_name = > "relative" ,
rules = > << EOF
KERNEL == "sda" , TEST == "size" , NAME = "relative"
2008-03-15 01:40:06 +03:00
EOF
} ,
{
desc = > "TEST wildcard substitution (find queue/nr_requests)" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2008-03-15 01:40:06 +03:00
exp_name = > "found-subdir" ,
rules = > << EOF
KERNEL == "sda" , TEST == "*/nr_requests" , NAME = "found-subdir"
2008-04-18 23:07:29 +04:00
EOF
} ,
{
desc = > "TEST MODE=0000" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2008-04-18 23:07:29 +04:00
exp_name = > "sda" ,
exp_perms = > "0:0:0000" ,
rules = > << EOF
KERNEL == "sda" , MODE = "0000"
2003-11-23 16:47:28 +03:00
EOF
} ,
2008-05-19 11:05:20 +04:00
{
2009-05-22 22:54:46 +04:00
desc = > "TEST PROGRAM feeds OWNER, GROUP, MODE" ,
2008-05-19 11:05:20 +04:00
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2008-05-19 11:05:20 +04:00
exp_name = > "sda" ,
2009-05-22 22:54:46 +04:00
exp_perms = > "5000:100:0400" ,
2008-05-19 11:05:20 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
KERNEL == "sda" , MODE = "666"
2009-05-22 22:54:46 +04:00
KERNEL == "sda" , PROGRAM == "/bin/echo 5000 100 0400" , OWNER = "%c{1}" , GROUP = "%c{2}" , MODE = "%c{3}"
2008-05-19 11:05:20 +04:00
EOF
} ,
{
desc = > "TEST PROGRAM feeds MODE with overflow" ,
subsys = > "block" ,
2008-09-29 06:12:44 +04:00
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
2008-05-19 11:05:20 +04:00
exp_name = > "sda" ,
2008-10-23 02:13:59 +04:00
exp_perms = > "0:0:0660" ,
2008-05-19 11:05:20 +04:00
rules = > << EOF
2008-10-23 02:13:59 +04:00
KERNEL == "sda" , MODE = "440"
2008-05-19 11:05:20 +04:00
KERNEL == "sda" , PROGRAM == "/bin/echo 0 0 0400letsdoabuffferoverflow0123456789012345789012345678901234567890" , OWNER = "%c{1}" , GROUP = "%c{2}" , MODE = "%c{3}"
2008-10-26 04:48:14 +03:00
EOF
} ,
{
desc = > "magic [subsys/sysname] attribute substitution" ,
subsys = > "block" ,
devpath = > "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda" ,
exp_name = > "sda-8741C4G-end" ,
exp_perms = > "0:0:0660" ,
rules = > << EOF
2008-10-26 16:31:46 +03:00
KERNEL == "sda" , PROGRAM = "/bin/true create-envp"
KERNEL == "sda" , ENV { TESTENV } = "change-envp"
2008-10-26 06:35:32 +03:00
KERNEL == "sda" , NAME = "%k-%s{[dmi/id]product_name}-end" , RUN += "socket:@/org/kernel/udev/monitor"
2008-05-19 11:05:20 +04:00
EOF
} ,
2003-11-23 16:47:28 +03:00
) ;
# set env
$ ENV { SYSFS_PATH } = $ sysfs ;
2005-03-27 03:10:03 +04:00
$ ENV { UDEV_CONFIG_FILE } = $ udev_conf ;
2003-11-23 16:47:28 +03:00
sub udev {
2005-03-27 03:10:03 +04:00
my ( $ action , $ subsys , $ devpath , $ rules ) = @ _ ;
2003-11-23 16:47:28 +03:00
$ ENV { DEVPATH } = $ devpath ;
2005-03-27 03:10:03 +04:00
# create temporary rules
open CONF , ">$udev_rules" || die "unable to create rules file: $udev_rules" ;
print CONF $$ rules ;
2003-11-23 16:47:28 +03:00
close CONF ;
$ ENV { ACTION } = $ action ;
2008-10-14 21:55:57 +04:00
$ ENV { SUBSYSTEM } = $ subsys ;
2008-09-01 18:20:06 +04:00
if ( $ valgrind > 0 ) {
2008-10-14 21:55:57 +04:00
system ( "$udev_bin_valgrind" ) ;
2008-09-01 18:20:06 +04:00
} else {
2008-10-14 21:55:57 +04:00
system ( "$udev_bin" ) ;
2008-09-01 18:20:06 +04:00
}
2003-11-23 16:47:28 +03:00
}
2003-11-24 08:17:34 +03:00
my $ error = 0 ;
2003-12-03 19:13:53 +03:00
2004-04-16 10:14:49 +04:00
sub permissions_test {
2005-03-27 03:10:03 +04:00
my ( $ rules , $ uid , $ gid , $ mode ) = @ _ ;
2004-04-16 10:14:49 +04:00
my $ wrong = 0 ;
2005-03-19 01:52:41 +03:00
my $ userid ;
my $ groupid ;
2005-03-27 03:10:03 +04:00
$ rules - > { exp_perms } =~ m/^(.*):(.*):(.*)$/ ;
2004-04-16 10:14:49 +04:00
if ( $ 1 ne "" ) {
2005-03-19 01:52:41 +03:00
if ( defined ( getpwnam ( $ 1 ) ) ) {
$ userid = int ( getpwnam ( $ 1 ) ) ;
} else {
$ userid = $ 1 ;
}
if ( $ uid != $ userid ) { $ wrong = 1 ; }
2004-04-16 10:14:49 +04:00
}
if ( $ 2 ne "" ) {
2005-03-19 01:52:41 +03:00
if ( defined ( getgrnam ( $ 2 ) ) ) {
$ groupid = int ( getgrnam ( $ 2 ) ) ;
} else {
$ groupid = $ 2 ;
}
if ( $ gid != $ groupid ) { $ wrong = 1 ; }
2004-04-16 10:14:49 +04:00
}
if ( $ 3 ne "" ) {
if ( ( $ mode & 07777 ) != oct ( $ 3 ) ) { $ wrong = 1 ; } ;
}
if ( $ wrong == 0 ) {
2005-03-19 01:52:41 +03:00
print "permissions: ok\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
printf " expected permissions are: %s:%s:%#o\n" , $ 1 , $ 2 , oct ( $ 3 ) ;
printf " created permissions are : %i:%i:%#o\n" , $ uid , $ gid , $ mode & 07777 ;
print "permissions: error\n" ;
2004-04-16 10:14:49 +04:00
$ error + + ;
}
}
sub major_minor_test {
2005-03-27 03:10:03 +04:00
my ( $ rules , $ rdev ) = @ _ ;
2004-04-16 10:14:49 +04:00
my $ major = ( $ rdev >> 8 ) & 0xfff ;
my $ minor = ( $ rdev & 0xff ) | ( ( $ rdev >> 12 ) & 0xfff00 ) ;
my $ wrong = 0 ;
2005-03-27 03:10:03 +04:00
$ rules - > { exp_majorminor } =~ m/^(.*):(.*)$/ ;
2004-04-16 10:14:49 +04:00
if ( $ 1 ne "" ) {
if ( $ major != $ 1 ) { $ wrong = 1 ; } ;
}
if ( $ 2 ne "" ) {
if ( $ minor != $ 2 ) { $ wrong = 1 ; } ;
}
if ( $ wrong == 0 ) {
2005-03-19 01:52:41 +03:00
print "major:minor: ok\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
printf " expected major:minor is: %i:%i\n" , $ 1 , $ 2 ;
printf " created major:minor is : %i:%i\n" , $ major , $ minor ;
print "major:minor: error\n" ;
2004-04-16 10:14:49 +04:00
$ error + + ;
}
}
sub symlink_test {
2005-03-27 03:10:03 +04:00
my ( $ rules ) = @ _ ;
2004-04-16 10:14:49 +04:00
2005-03-27 03:10:03 +04:00
my $ output = `ls -l $PWD/$udev_root$rules->{exp_name}` ;
2004-04-16 10:14:49 +04:00
if ( $ output =~ m/(.*)-> (.*)/ ) {
2005-03-27 03:10:03 +04:00
if ( $ 2 eq $ rules - > { exp_target } ) {
2005-03-19 01:52:41 +03:00
print "symlink: ok\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-27 03:10:03 +04:00
print " expected symlink from: \'$rules->{exp_name}\' to \'$rules->{exp_target}\'\n" ;
print " created symlink from: \'$rules->{exp_name}\' to \'$2\'\n" ;
2005-03-19 01:52:41 +03:00
print "symlink: error" ;
2005-03-27 03:10:03 +04:00
if ( $ rules - > { exp_add_error } ) {
2005-03-19 01:52:41 +03:00
print " as expected\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
print "\n" ;
2004-04-16 10:14:49 +04:00
$ error + + ;
}
}
} else {
2005-03-27 03:10:03 +04:00
print " expected symlink from: \'$rules->{exp_name}\' to \'$rules->{exp_target}\'\n" ;
2005-03-19 01:52:41 +03:00
print "symlink: not created" ;
2005-03-27 03:10:03 +04:00
if ( $ rules - > { exp_add_error } ) {
2005-03-19 01:52:41 +03:00
print " as expected\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
print "\n" ;
2004-04-16 10:14:49 +04:00
$ error + + ;
}
}
}
2008-05-19 11:05:20 +04:00
sub make_udev_root {
system ( "rm -rf $udev_root" ) ;
mkdir ( $ udev_root ) || die "unable to create udev_root: $udev_root\n" ;
# setting group and mode of udev_root ensures the tests work
# even if the parent directory has setgid bit enabled.
chown ( 0 , 0 , $ udev_root ) || die "unable to chown $udev_root\n" ;
chmod ( 0755 , $ udev_root ) || die "unable to chmod $udev_root\n" ;
}
2004-02-12 11:49:52 +03:00
sub run_test {
2005-03-27 03:10:03 +04:00
my ( $ rules , $ number ) = @ _ ;
2004-03-13 04:13:59 +03:00
2005-03-27 03:10:03 +04:00
print "TEST $number: $rules->{desc}\n" ;
2004-04-16 10:14:49 +04:00
2005-03-27 03:10:03 +04:00
if ( $ rules - > { exp_target } ) {
print "device \'$rules->{devpath}\' expecting symlink '$rules->{exp_name}' to node \'$rules->{exp_target}\'\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-27 03:10:03 +04:00
print "device \'$rules->{devpath}\' expecting node \'$rules->{exp_name}\'\n" ;
2004-04-16 10:14:49 +04:00
}
2003-11-23 16:47:28 +03:00
2005-03-27 03:10:03 +04:00
udev ( "add" , $ rules - > { subsys } , $ rules - > { devpath } , \ $ rules - > { rules } ) ;
2009-01-30 05:53:09 +03:00
if ( defined ( $ rules - > { not_exp_name } ) ) {
if ( ( - e "$PWD/$udev_root$rules->{not_exp_name}" ) ||
( - l "$PWD/$udev_root$rules->{not_exp_name}" ) ) {
print "nonexistent: error \'$rules->{not_exp_name}\' not expected to be there\n" ;
$ error + +
}
}
2005-03-27 03:10:03 +04:00
if ( ( - e "$PWD/$udev_root$rules->{exp_name}" ) ||
( - l "$PWD/$udev_root$rules->{exp_name}" ) ) {
2004-03-13 04:13:59 +03:00
my ( $ dev , $ ino , $ mode , $ nlink , $ uid , $ gid , $ rdev , $ size ,
2005-03-27 03:10:03 +04:00
$ atime , $ mtime , $ ctime , $ blksize , $ blocks ) = stat ( "$PWD/$udev_root$rules->{exp_name}" ) ;
2004-03-13 04:13:59 +03:00
2005-03-27 03:10:03 +04:00
if ( defined ( $ rules - > { exp_perms } ) ) {
permissions_test ( $ rules , $ uid , $ gid , $ mode ) ;
2004-03-12 11:58:33 +03:00
}
2005-03-27 03:10:03 +04:00
if ( defined ( $ rules - > { exp_majorminor } ) ) {
major_minor_test ( $ rules , $ rdev ) ;
2004-04-16 10:14:49 +04:00
}
2005-03-27 03:10:03 +04:00
if ( defined ( $ rules - > { exp_target } ) ) {
symlink_test ( $ rules ) ;
2004-03-13 04:13:59 +03:00
}
2005-03-19 01:52:41 +03:00
print "add: ok\n" ;
2003-11-23 16:47:28 +03:00
} else {
2005-03-19 01:52:41 +03:00
print "add: error" ;
2005-03-27 03:10:03 +04:00
if ( $ rules - > { exp_add_error } ) {
2005-03-19 01:52:41 +03:00
print " as expected\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
print "\n" ;
2004-04-16 10:14:49 +04:00
system ( "tree $udev_root" ) ;
print "\n" ;
$ error + + ;
}
2003-11-23 16:47:28 +03:00
}
2005-03-27 03:10:03 +04:00
if ( defined ( $ rules - > { option } ) && $ rules - > { option } eq "keep" ) {
[PATCH] add enum tests
On Fri, Sep 10, 2004 at 01:09:07PM -0700, Greg KH wrote:
> On Tue, Sep 07, 2004 at 01:19:34PM +0200, David Zeuthen wrote:
> >
> > KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="\%k", SYMLINK="cdrom%e"
> > KERNEL="fd[0-9]", NAME="%k", SYMLINK="floppy%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy", NAME=\"%k", SYMLINK="floppy%e"
> >
> > New patch is attached.
>
> Nice, I've applied this.
>
> How about sending a patch for the test/udev-test.pl script that adds a
> test for this new paramater, so we make sure to not break it in the
> future.
Here are the tests for the enumeration character %e. I've added a option
string to be able to do a whole sequence of tests without node removal,
so we can skip the "remove" event and get an increasing number to append
to the name. After the sequence test the whole directory is cleaned for
the next tests.
2004-09-15 08:44:55 +04:00
print "\n\n" ;
return ;
}
2005-03-27 03:10:03 +04:00
udev ( "remove" , $ rules - > { subsys } , $ rules - > { devpath } , \ $ rules - > { rules } ) ;
if ( ( - e "$PWD/$udev_root$rules->{exp_name}" ) ||
( - l "$PWD/$udev_root$rules->{exp_name}" ) ) {
2005-03-19 01:52:41 +03:00
print "remove: error" ;
2005-03-27 03:10:03 +04:00
if ( $ rules - > { exp_rem_error } ) {
2005-03-19 01:52:41 +03:00
print " as expected\n" ;
2004-04-16 10:14:49 +04:00
} else {
2005-03-19 01:52:41 +03:00
print "\n" ;
2004-04-16 10:14:49 +04:00
system ( "tree $udev_root" ) ;
print "\n" ;
$ error + + ;
}
2003-11-23 16:47:28 +03:00
} else {
2005-03-19 01:52:41 +03:00
print "remove: ok\n" ;
2003-11-23 16:47:28 +03:00
}
[PATCH] add enum tests
On Fri, Sep 10, 2004 at 01:09:07PM -0700, Greg KH wrote:
> On Tue, Sep 07, 2004 at 01:19:34PM +0200, David Zeuthen wrote:
> >
> > KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="\%k", SYMLINK="cdrom%e"
> > KERNEL="fd[0-9]", NAME="%k", SYMLINK="floppy%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy", NAME=\"%k", SYMLINK="floppy%e"
> >
> > New patch is attached.
>
> Nice, I've applied this.
>
> How about sending a patch for the test/udev-test.pl script that adds a
> test for this new paramater, so we make sure to not break it in the
> future.
Here are the tests for the enumeration character %e. I've added a option
string to be able to do a whole sequence of tests without node removal,
so we can skip the "remove" event and get an increasing number to append
to the name. After the sequence test the whole directory is cleaned for
the next tests.
2004-09-15 08:44:55 +04:00
2005-03-19 01:52:41 +03:00
print "\n" ;
2005-03-28 14:20:05 +04:00
if ( defined ( $ rules - > { option } ) && $ rules - > { option } eq "clean" ) {
2008-05-19 11:05:20 +04:00
make_udev_root ( ) ;
[PATCH] add enum tests
On Fri, Sep 10, 2004 at 01:09:07PM -0700, Greg KH wrote:
> On Tue, Sep 07, 2004 at 01:19:34PM +0200, David Zeuthen wrote:
> >
> > KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="\%k", SYMLINK="cdrom%e"
> > KERNEL="fd[0-9]", NAME="%k", SYMLINK="floppy%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy", NAME=\"%k", SYMLINK="floppy%e"
> >
> > New patch is attached.
>
> Nice, I've applied this.
>
> How about sending a patch for the test/udev-test.pl script that adds a
> test for this new paramater, so we make sure to not break it in the
> future.
Here are the tests for the enumeration character %e. I've added a option
string to be able to do a whole sequence of tests without node removal,
so we can skip the "remove" event and get an increasing number to append
to the name. After the sequence test the whole directory is cleaned for
the next tests.
2004-09-15 08:44:55 +04:00
}
2003-11-23 16:47:28 +03:00
}
2004-11-11 05:11:00 +03:00
# only run if we have root permissions
# due to mknod restrictions
if ( ! ( $< == 0 ) ) {
print "Must have root permissions to run properly.\n" ;
exit ;
}
2004-02-12 11:49:52 +03:00
# prepare
2008-07-18 17:56:03 +04:00
make_udev_root ( ) ;
2004-02-12 11:49:52 +03:00
2005-03-27 03:10:03 +04:00
# create config file
open CONF , ">$udev_conf" || die "unable to create config file: $udev_conf" ;
2004-02-12 11:49:52 +03:00
print CONF "udev_root=\"$udev_root\"\n" ;
2008-07-18 17:56:03 +04:00
print CONF "udev_rules=\"$PWD\"\n" ;
2008-09-08 23:50:17 +04:00
print CONF "udev_log=\"err\"\n" ;
2004-02-12 11:49:52 +03:00
close CONF ;
my $ test_num = 1 ;
2008-09-01 18:20:06 +04:00
my @ list ;
2004-02-12 11:49:52 +03:00
2008-09-01 18:20:06 +04:00
foreach my $ arg ( @ ARGV ) {
if ( $ arg =~ m/--valgrind/ ) {
$ valgrind = 1 ;
printf ( "using valgrind\n" ) ;
[PATCH] add enum tests
On Fri, Sep 10, 2004 at 01:09:07PM -0700, Greg KH wrote:
> On Tue, Sep 07, 2004 at 01:19:34PM +0200, David Zeuthen wrote:
> >
> > KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="\%k", SYMLINK="cdrom%e"
> > KERNEL="fd[0-9]", NAME="%k", SYMLINK="floppy%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy", NAME=\"%k", SYMLINK="floppy%e"
> >
> > New patch is attached.
>
> Nice, I've applied this.
>
> How about sending a patch for the test/udev-test.pl script that adds a
> test for this new paramater, so we make sure to not break it in the
> future.
Here are the tests for the enumeration character %e. I've added a option
string to be able to do a whole sequence of tests without node removal,
so we can skip the "remove" event and get an increasing number to append
to the name. After the sequence test the whole directory is cleaned for
the next tests.
2004-09-15 08:44:55 +04:00
} else {
2008-09-01 18:20:06 +04:00
push ( @ list , $ arg ) ;
}
}
if ( $ list [ 0 ] ) {
foreach my $ arg ( @ list ) {
if ( defined ( $ tests [ $ arg - 1 ] - > { desc } ) ) {
print "udev-test will run test number $arg:\n\n" ;
run_test ( $ tests [ $ arg - 1 ] , $ arg ) ;
} else {
print "test does not exist.\n" ;
}
[PATCH] add enum tests
On Fri, Sep 10, 2004 at 01:09:07PM -0700, Greg KH wrote:
> On Tue, Sep 07, 2004 at 01:19:34PM +0200, David Zeuthen wrote:
> >
> > KERNEL="sr*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="scd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="pcd*", NAME="%k", SYMLINK="cdrom%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom", NAME="\%k", SYMLINK="cdrom%e"
> > KERNEL="fd[0-9]", NAME="%k", SYMLINK="floppy%e"
> > KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="floppy", NAME=\"%k", SYMLINK="floppy%e"
> >
> > New patch is attached.
>
> Nice, I've applied this.
>
> How about sending a patch for the test/udev-test.pl script that adds a
> test for this new paramater, so we make sure to not break it in the
> future.
Here are the tests for the enumeration character %e. I've added a option
string to be able to do a whole sequence of tests without node removal,
so we can skip the "remove" event and get an increasing number to append
to the name. After the sequence test the whole directory is cleaned for
the next tests.
2004-09-15 08:44:55 +04:00
}
2004-02-12 11:49:52 +03:00
} else {
# test all
print "\nudev-test will run " . ( $# tests + 1 ) . " tests:\n\n" ;
2005-03-27 03:10:03 +04:00
foreach my $ rules ( @ tests ) {
run_test ( $ rules , $ test_num ) ;
2004-02-12 11:49:52 +03:00
$ test_num + + ;
}
}
2003-11-23 16:47:28 +03:00
print "$error errors occured\n\n" ;
# cleanup
system ( "rm -rf $udev_root" ) ;
2005-03-27 03:10:03 +04:00
unlink ( $ udev_rules ) ;
unlink ( $ udev_conf ) ;
2003-11-23 16:47:28 +03:00
2008-09-16 21:03:42 +04:00
if ( $ error > 0 ) {
exit ( 1 ) ;
}
exit ( 0 ) ;