udev - fix "ignore method"
PATCH 1/1 udev - fix "ignore method"
We don't handle NAME="" the right way. Thanks to Emil None <[email protected]> for pointing this out. Here is a fix for it and a trivial style cleanup.
thanks,
Kay
===== namedev.c 1.98 vs edited =====
namedev.c +15 -17
@@ -589,12 +589,12 @@if (dev->bus[0 ] !='\0' ) {if (sysfs_device ==NULL ) {dbg ("device has no bus" ); - goto no_good; + goto try_parent; }dbg ("check for " FIELD_BUS " dev->bus='%s' sysfs_device->bus='%s'" , dev->bus, sysfs_device->bus);if (strcmp_pattern (dev->bus, sysfs_device->bus) !=0 ) {dbg (FIELD_BUS " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_BUS " matches" ); }
@@ -605,7 +605,7 @@dbg ("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'" , dev->kernel, class_dev->name);if (strcmp_pattern (dev->kernel, class_dev->name) !=0 ) {dbg (FIELD_KERNEL " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_KERNEL " matches" ); }
@@ -616,7 +616,7 @@dbg ("check " FIELD_ID );if (match_id (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_ID " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_ID " matches" ); }
@@ -627,7 +627,7 @@dbg ("check " FIELD_PLACE );if (match_place (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_PLACE " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_PLACE " matches" ); }
@@ -638,7 +638,7 @@dbg ("check " FIELD_SYSFS " pairs" );if (match_sysfs_pairs (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_SYSFS " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_SYSFS " matches" ); }
@@ -650,7 +650,7 @@apply_format (udev, dev->program);if (execute_program (dev->program, udev->program_result,NAME_SIZE ) !=0 ) {dbg (FIELD_PROGRAM " returned nozero" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_PROGRAM " returned successful" ); }
@@ -663,22 +663,17 @@ dev->result, udev->program_result);if (strcmp_pattern (dev->result, udev->program_result) !=0 ) {dbg (FIELD_RESULT " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_RESULT " matches" ); } } -/* check if we are instructed to ignore this device */ -if (dev->name[0 ] =='\0' ) { -dbg ("instructed to ignore this device" ); -return -1 ; - } -/* Yeah, we matched! */ return 0 ; -no_good: +try_parent: +dbg ("try parent sysfs device" ); sysfs_device =sysfs_get_device_parent (sysfs_device);if (sysfs_device ==NULL )return -ENODEV ;
@@ -722,9 +717,12 @@/* look for a matching rule to apply */ list_for_each_entry (dev, &config_device_list, node) {dbg ("process rule" ); -if (match_rule (dev, class_dev, udev, sysfs_device) ==0 ) { -/* Yup, this rule belongs to us! */ +if (dev->name[0 ] =='\0' ) { +dbg ("instructed to ignore this device" ); +return -1 ; + } +info ("configured rule in '%s' at line %i applied, '%s' becomes '%s'" , udev_rules_filename, dev->config_line, udev->kernel_name, dev->name);strfieldcpy (udev->name, dev->name);
===== udev-add.c 1.42 vs edited =====
udev-add.c +15 -15
@@ -87,7 +87,7 @@ *pos =0x00 ;if (stat (p, &stats)) { retval =mkdir (p,0755 ); -if (retval) { +if (retval !=0 ) {dbg ("mkdir(%s) failed with error '%s'" , p,strerror (errno));return retval;
@@ -145,17 +145,17 @@info ("creating device node '%s'" , filename);dbg ("mknod(%s, %#o, %u, %u)" , filename, dev->mode, dev->major, dev->minor); retval =mknod (filename, dev->mode, res); -if (retval) +if (retval !=0 )dbg ("mknod(%s, %#o, %u, %u) failed with error '%s'" , filename, dev->mode, dev->major, dev->minor,strerror (errno));dbg ("chmod(%s, %#o)" , filename, dev->mode); retval =chmod (filename, dev->mode); -if (retval) +if (retval !=0 )dbg ("chmod(%s, %#o) failed with error '%s'" , filename, dev->mode,strerror (errno)); -if (dev->owner[0 ]) { +if (dev->owner[0 ] !='\0' ) {char *endptr;unsigned long id =strtoul (dev->owner, &endptr,10 );if (endptr[0 ] =='\0' )
@@ -169,7 +169,7 @@ } } -if (dev->group[0 ]) { +if (dev->group[0 ] !='\0' ) {char *endptr;unsigned long id =strtoul (dev->group, &endptr,10 );if (endptr[0 ] =='\0' )
@@ -183,16 +183,16 @@ } } -if (uid || gid) { +if (uid !=0 || gid !=0 ) {dbg ("chown(%s, %u, %u)" , filename, uid, gid); retval =chown (filename, uid, gid); -if (retval) +if (retval !=0 )dbg ("chown(%s, %u, %u) failed with error '%s'" , filename, uid, gid,strerror (errno)); }/* create symlink if requested */ -if (dev->symlink[0 ]) { +if (dev->symlink[0 ] !='\0' ) { symlinks = dev->symlink;while (1 ) { linkname =strsep (&symlinks," " );
@@ -214,13 +214,13 @@ tail = i+1 ; i++; } -while (linkname[i]) { +while (linkname[i] !='\0' ) {if (linkname[i] =='/' )strcat (linktarget,"../" ); i++; } -if (*linktarget =='\0' ) +if (linktarget[0 ] =='\0' )strcpy (linktarget,"./" );strcat (linktarget, &dev->name[tail]);
@@ -236,7 +236,7 @@dbg ("symlink(%s, %s)" , linktarget, filename); retval =symlink (linktarget, filename); -if (retval) +if (retval !=0 )dbg ("symlink(%s, %s) failed with error '%s'" , linktarget, filename,strerror (errno)); }
@@ -285,7 +285,7 @@dbg ("looking for '%s'" , filename); retval =stat (filename, &buf); -if (!retval) +if (retval ==0 ) goto exit;/* sleep to give the kernel a chance to create the dev file */
@@ -311,7 +311,7 @@ dev.type ='c' ; retval =sleep_for_dev (path); -if (retval) +if (retval !=0 ) goto exit; class_dev =get_class_dev (path);
@@ -319,13 +319,13 @@ goto exit; retval =get_major_minor (class_dev, &dev); -if (retval) { +if (retval !=0 ) {dbg ("get_major_minor failed" ); goto exit; } retval =namedev_name_device (class_dev, &dev); -if (retval) +if (retval !=0 ) goto exit; retval =udevdb_add_dev (path, &dev);
Quoted 2 lines · Kay Sievers
We don't handle NAME="" the right way. Thanks to Emil None <[email protected]> for pointing this out. Here is a fix for it and a trivial style cleanup.
Changed the ignore dbg() to info().
thanks,
Kay
namedev.c +17 -18
@@ -589,12 +589,12 @@if (dev->bus[0 ] !='\0' ) {if (sysfs_device ==NULL ) {dbg ("device has no bus" ); - goto no_good; + goto try_parent; }dbg ("check for " FIELD_BUS " dev->bus='%s' sysfs_device->bus='%s'" , dev->bus, sysfs_device->bus);if (strcmp_pattern (dev->bus, sysfs_device->bus) !=0 ) {dbg (FIELD_BUS " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_BUS " matches" ); }
@@ -605,7 +605,7 @@dbg ("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'" , dev->kernel, class_dev->name);if (strcmp_pattern (dev->kernel, class_dev->name) !=0 ) {dbg (FIELD_KERNEL " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_KERNEL " matches" ); }
@@ -616,7 +616,7 @@dbg ("check " FIELD_ID );if (match_id (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_ID " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_ID " matches" ); }
@@ -627,7 +627,7 @@dbg ("check " FIELD_PLACE );if (match_place (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_PLACE " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_PLACE " matches" ); }
@@ -638,7 +638,7 @@dbg ("check " FIELD_SYSFS " pairs" );if (match_sysfs_pairs (dev, class_dev, sysfs_device) !=0 ) {dbg (FIELD_SYSFS " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_SYSFS " matches" ); }
@@ -650,7 +650,7 @@apply_format (udev, dev->program);if (execute_program (dev->program, udev->program_result,NAME_SIZE ) !=0 ) {dbg (FIELD_PROGRAM " returned nozero" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_PROGRAM " returned successful" ); }
@@ -663,22 +663,17 @@ dev->result, udev->program_result);if (strcmp_pattern (dev->result, udev->program_result) !=0 ) {dbg (FIELD_RESULT " is not matching" ); - goto no_good; + goto try_parent; }else {dbg (FIELD_RESULT " matches" ); } } -/* check if we are instructed to ignore this device */ -if (dev->name[0 ] =='\0' ) { -dbg ("instructed to ignore this device" ); -return -1 ; - } -/* Yeah, we matched! */ return 0 ; -no_good: +try_parent: +dbg ("try parent sysfs device" ); sysfs_device =sysfs_get_device_parent (sysfs_device);if (sysfs_device ==NULL )return -ENODEV ;
@@ -722,11 +717,15 @@/* look for a matching rule to apply */ list_for_each_entry (dev, &config_device_list, node) {dbg ("process rule" ); -if (match_rule (dev, class_dev, udev, sysfs_device) ==0 ) { -/* Yup, this rule belongs to us! */ +if (dev->name[0 ] =='\0' ) { +info ("configured rule in '%s' at line %i applied, '%s' is ignored" , + udev_rules_filename, dev->config_line, udev->kernel_name); +return -1 ; + } +info ("configured rule in '%s' at line %i applied, '%s' becomes '%s'" , - udev_rules_filename, dev->config_line, udev->kernel_name, dev->name); + udev_rules_filename, dev->config_line, udev->kernel_name, dev->name);strfieldcpy (udev->name, dev->name);strfieldcpy (udev->symlink, dev->symlink); goto found;
udev-add.c +15 -15
@@ -87,7 +87,7 @@ *pos =0x00 ;if (stat (p, &stats)) { retval =mkdir (p,0755 ); -if (retval) { +if (retval !=0 ) {dbg ("mkdir(%s) failed with error '%s'" , p,strerror (errno));return retval;
@@ -145,17 +145,17 @@info ("creating device node '%s'" , filename);dbg ("mknod(%s, %#o, %u, %u)" , filename, dev->mode, dev->major, dev->minor); retval =mknod (filename, dev->mode, res); -if (retval) +if (retval !=0 )dbg ("mknod(%s, %#o, %u, %u) failed with error '%s'" , filename, dev->mode, dev->major, dev->minor,strerror (errno));dbg ("chmod(%s, %#o)" , filename, dev->mode); retval =chmod (filename, dev->mode); -if (retval) +if (retval !=0 )dbg ("chmod(%s, %#o) failed with error '%s'" , filename, dev->mode,strerror (errno)); -if (dev->owner[0 ]) { +if (dev->owner[0 ] !='\0' ) {char *endptr;unsigned long id =strtoul (dev->owner, &endptr,10 );if (endptr[0 ] =='\0' )
@@ -169,7 +169,7 @@ } } -if (dev->group[0 ]) { +if (dev->group[0 ] !='\0' ) {char *endptr;unsigned long id =strtoul (dev->group, &endptr,10 );if (endptr[0 ] =='\0' )
@@ -183,16 +183,16 @@ } } -if (uid || gid) { +if (uid !=0 || gid !=0 ) {dbg ("chown(%s, %u, %u)" , filename, uid, gid); retval =chown (filename, uid, gid); -if (retval) +if (retval !=0 )dbg ("chown(%s, %u, %u) failed with error '%s'" , filename, uid, gid,strerror (errno)); }/* create symlink if requested */ -if (dev->symlink[0 ]) { +if (dev->symlink[0 ] !='\0' ) { symlinks = dev->symlink;while (1 ) { linkname =strsep (&symlinks," " );
@@ -214,13 +214,13 @@ tail = i+1 ; i++; } -while (linkname[i]) { +while (linkname[i] !='\0' ) {if (linkname[i] =='/' )strcat (linktarget,"../" ); i++; } -if (*linktarget =='\0' ) +if (linktarget[0 ] =='\0' )strcpy (linktarget,"./" );strcat (linktarget, &dev->name[tail]);
@@ -236,7 +236,7 @@dbg ("symlink(%s, %s)" , linktarget, filename); retval =symlink (linktarget, filename); -if (retval) +if (retval !=0 )dbg ("symlink(%s, %s) failed with error '%s'" , linktarget, filename,strerror (errno)); }
@@ -285,7 +285,7 @@dbg ("looking for '%s'" , filename); retval =stat (filename, &buf); -if (!retval) +if (retval ==0 ) goto exit;/* sleep to give the kernel a chance to create the dev file */
@@ -311,7 +311,7 @@ dev.type ='c' ; retval =sleep_for_dev (path); -if (retval) +if (retval !=0 ) goto exit; class_dev =get_class_dev (path);
@@ -319,13 +319,13 @@ goto exit; retval =get_major_minor (class_dev, &dev); -if (retval) { +if (retval !=0 ) {dbg ("get_major_minor failed" ); goto exit; } retval =namedev_name_device (class_dev, &dev); -if (retval) +if (retval !=0 ) goto exit; retval =udevdb_add_dev (path, &dev);
Greg KH
AppliedQuoted 5 lines · Kay Sievers
Quoted 2 lines · Kay Sievers
We don't handle NAME="" the right way. Thanks to Emil None <[email protected]> for pointing this out. Here is a fix for it and a trivial style cleanup.
Changed the ignore
dbg()toinfo().
Applied, thanks.
greg k-h
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel