From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: [udev] a bug / pattern match for label method
Date: Thu, 04 Dec 2003 01:58:42 +0000 [thread overview]
Message-ID: <marc-linux-hotplug-107050332126234@msgid-missing> (raw)
[-- Attachment #1: Type: text/plain, Size: 1757 bytes --]
While I was adding pattern match to the LABEL method i hit a bug.
We modify a string returned from libsysfs, so with every iteration is is
truncated by one char:
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESXS '
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ESX' with '?IBM-ESXS'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESX'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ES' with 'IBM-ESXS?'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ES'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-E' with 'IBM-ES??'
Dec 4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec 4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec 4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-E'
Dec 4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-' with 'IBM-ESXSS'
I changed the behavior to remove only the line feed.
thanks,
Kay
03-bug-in-linefeed-removal.diff
remove only the line feed from string not every last char
04-patternmatch-for-label.diff
switch LABEL search to pattern match
add a test for pattern match in LABEL
remove useless rule from udev.rules
[-- Attachment #2: 03-bug-in-linefeed-removal.diff --]
[-- Type: text/plain, Size: 1002 bytes --]
diff -Nru a/namedev.c b/namedev.c
--- a/namedev.c Thu Dec 4 02:37:43 2003
+++ b/namedev.c Thu Dec 4 02:37:43 2003
@@ -378,6 +378,7 @@
struct sysfs_attribute *tmpattr = NULL;
struct config_device *dev;
struct list_head *tmp;
+ char *c;
list_for_each(tmp, &config_device_list) {
dev = list_entry(tmp, struct config_device, node);
@@ -406,7 +407,9 @@
continue;
label_found:
- tmpattr->value[strlen(tmpattr->value)-1] = 0x00;
+ c = tmpattr->value + strlen(tmpattr->value)-1;
+ if (*c == '\n')
+ *c = 0x00;
dbg("compare attribute '%s' value '%s' with '%s'",
dev->sysfs_file, tmpattr->value, dev->sysfs_value);
if (strcmp(dev->sysfs_value, tmpattr->value) != 0)
@@ -578,7 +581,7 @@
}
}
}
-
+
if (sysfs_device) {
dbg("sysfs_device->path='%s'", sysfs_device->path);
dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id);
@@ -642,7 +645,7 @@
int namedev_init(void)
{
int retval;
-
+
retval = namedev_init_rules();
if (retval)
return retval;
[-- Attachment #3: 04-patternmatc~or-label.diff --]
[-- Type: text/plain, Size: 1463 bytes --]
diff -Nru a/namedev.c b/namedev.c
--- a/namedev.c Thu Dec 4 02:38:13 2003
+++ b/namedev.c Thu Dec 4 02:38:13 2003
@@ -412,7 +412,7 @@
*c = 0x00;
dbg("compare attribute '%s' value '%s' with '%s'",
dev->sysfs_file, tmpattr->value, dev->sysfs_value);
- if (strcmp(dev->sysfs_value, tmpattr->value) != 0)
+ if (strcmp_pattern(dev->sysfs_value, tmpattr->value) != 0)
continue;
strfieldcpy(udev->name, dev->name);
diff -Nru a/test/udev-test.pl b/test/udev-test.pl
--- a/test/udev-test.pl Thu Dec 4 02:38:13 2003
+++ b/test/udev-test.pl Thu Dec 4 02:38:13 2003
@@ -52,6 +52,18 @@
EOF
},
{
+ desc => "label test of pattern match",
+ subsys => "block",
+ devpath => "block/sda/sda1",
+ expected => "boot_disk1" ,
+ conf => <<EOF
+LABEL, BUS="scsi", vendor="?IBM-ESXS", NAME="boot_disk%n-1"
+LABEL, BUS="scsi", vendor="IBM-ESXS?", NAME="boot_disk%n-2"
+LABEL, BUS="scsi", vendor="IBM-ES??", NAME="boot_disk%n"
+LABEL, BUS="scsi", vendor="IBM-ESXSS", NAME="boot_disk%n-3"
+EOF
+ },
+ {
desc => "catch device by *",
subsys => "tty",
devpath => "class/tty/ttyUSB0",
diff -Nru a/udev.rules b/udev.rules
--- a/udev.rules Thu Dec 4 02:38:13 2003
+++ b/udev.rules Thu Dec 4 02:38:13 2003
@@ -42,7 +42,6 @@
REPLACE, KERNEL="ttyUSB0", NAME="pl2303"
# a devfs like way to name some tty devices
-#REPLACE, KERNEL="tty", NAME="tty"
#REPLACE, KERNEL="ttyS*", NAME="tts/%n"
#REPLACE, KERNEL="tty*", NAME="vc/%n"
next reply other threads:[~2003-12-04 1:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-04 1:58 Kay Sievers [this message]
-- strict thread matches above, loose matches on Subject: below --
2003-12-04 19:24 [udev] a bug / pattern match for label method Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-hotplug-107050332126234@msgid-missing \
--to=kay.sievers@vrfy.org \
--cc=linux-hotplug@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).