mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-08 20:58:20 +03:00
[PATCH] remove the device node only if the major/minor number matches
This commit is contained in:
parent
3f930093f9
commit
1cec1c2416
@ -755,17 +755,6 @@ EOF
|
||||
BUS="scsi", KERNEL="sda", SYMLINK="symlink-only1"
|
||||
BUS="scsi", KERNEL="sda", SYMLINK="symlink-only2"
|
||||
BUS="scsi", KERNEL="sda", NAME="link", SYMLINK="symlink0"
|
||||
EOF
|
||||
},
|
||||
{
|
||||
desc => "symlink name empty",
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "",
|
||||
exp_target => "link",
|
||||
exp_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="link", SYMLINK=""
|
||||
EOF
|
||||
},
|
||||
{
|
||||
@ -774,7 +763,8 @@ EOF
|
||||
devpath => "/block/sda",
|
||||
exp_name => ".",
|
||||
exp_target => "link",
|
||||
exp_error => "yes",
|
||||
exp_add_error => "yes",
|
||||
exp_rem_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="link", SYMLINK="."
|
||||
EOF
|
||||
@ -785,7 +775,7 @@ EOF
|
||||
devpath => "/block/sda",
|
||||
exp_name => "symlink",
|
||||
exp_target => "",
|
||||
exp_error => "yes",
|
||||
exp_add_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="", SYMLINK="symlink"
|
||||
EOF
|
||||
@ -796,7 +786,8 @@ EOF
|
||||
devpath => "/block/sda",
|
||||
exp_name => "",
|
||||
exp_target => "",
|
||||
exp_error => "yes",
|
||||
exp_add_error => "yes",
|
||||
exp_rem_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="", SYMLINK=""
|
||||
EOF
|
||||
@ -807,6 +798,8 @@ EOF
|
||||
devpath => "/class/tty/tty0",
|
||||
exp_name => "link",
|
||||
exp_target => "link",
|
||||
exp_rem_error => "yes",
|
||||
option => "clear",
|
||||
conf => <<EOF
|
||||
KERNEL="tty0", NAME="link", SYMLINK="link"
|
||||
EOF
|
||||
@ -1025,7 +1018,7 @@ EOF
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "node",
|
||||
exp_error => "yes",
|
||||
exp_add_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="node", OPTIONS="ignore"
|
||||
EOF
|
||||
@ -1045,7 +1038,7 @@ EOF
|
||||
subsys => "block",
|
||||
devpath => "/block/sda/sda1",
|
||||
exp_name => "node6",
|
||||
exp_error => "yes",
|
||||
exp_add_error => "yes",
|
||||
conf => <<EOF
|
||||
SUBSYSTEM="block", OPTIONS="all_partitions"
|
||||
BUS="scsi", KERNEL="sda", NAME="node"
|
||||
@ -1056,7 +1049,7 @@ EOF
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "node",
|
||||
exp_error => "yes",
|
||||
exp_rem_error => "yes",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="node", OPTIONS="ignore_remove"
|
||||
EOF
|
||||
@ -1066,7 +1059,7 @@ EOF
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "node14",
|
||||
exp_error => "yes",
|
||||
exp_rem_error => "yes",
|
||||
option => "clear",
|
||||
conf => <<EOF
|
||||
BUS="scsi", KERNEL="sda", NAME="node", OPTIONS="ignore_remove, all_partitions"
|
||||
@ -1225,7 +1218,7 @@ sub symlink_test {
|
||||
} else {
|
||||
print "expected symlink from: \'$config->{exp_name}\' to \'$config->{exp_target}\'\n";
|
||||
print "created symlink from: \'$config->{exp_name}\' to \'$2\'\n";
|
||||
if ($config->{exp_error}) {
|
||||
if ($config->{exp_add_error}) {
|
||||
print "as expected ";
|
||||
} else {
|
||||
$error++;
|
||||
@ -1234,7 +1227,7 @@ sub symlink_test {
|
||||
} else {
|
||||
print "expected symlink from: \'$config->{exp_name}\' to \'$config->{exp_target}\'\n";
|
||||
print "symlink: not created ";
|
||||
if ($config->{exp_error}) {
|
||||
if ($config->{exp_add_error}) {
|
||||
print "as expected ";
|
||||
} else {
|
||||
$error++;
|
||||
@ -1273,7 +1266,7 @@ sub run_test {
|
||||
print "add: ok ";
|
||||
} else {
|
||||
print "add: error ";
|
||||
if ($config->{exp_error}) {
|
||||
if ($config->{exp_add_error}) {
|
||||
print "as expected ";
|
||||
} else {
|
||||
print "\n\n";
|
||||
@ -1292,7 +1285,7 @@ sub run_test {
|
||||
if ((-e "$PWD/$udev_root$config->{exp_name}") ||
|
||||
(-l "$PWD/$udev_root$config->{exp_name}")) {
|
||||
print "remove: error ";
|
||||
if ($config->{exp_error}) {
|
||||
if ($config->{exp_rem_error}) {
|
||||
print "as expected\n\n";
|
||||
} else {
|
||||
print "\n\n";
|
||||
|
@ -79,6 +79,7 @@ int udev_db_add_device(struct udevice *udev)
|
||||
fprintf(f, "P:%s\n", udev->devpath);
|
||||
fprintf(f, "N:%s\n", udev->name);
|
||||
fprintf(f, "S:%s\n", udev->symlink);
|
||||
fprintf(f, "M:%u:%u\n", udev->major, udev->minor);
|
||||
fprintf(f, "A:%u\n", udev->partitions);
|
||||
fprintf(f, "R:%u\n", udev->ignore_remove);
|
||||
|
||||
@ -90,6 +91,7 @@ int udev_db_add_device(struct udevice *udev)
|
||||
static int parse_db_file(struct udevice *udev, const char *filename)
|
||||
{
|
||||
char line[NAME_SIZE];
|
||||
char temp[NAME_SIZE];
|
||||
char *bufline;
|
||||
char *buf;
|
||||
size_t bufsize;
|
||||
@ -120,6 +122,13 @@ static int parse_db_file(struct udevice *udev, const char *filename)
|
||||
strncpy(udev->name, &bufline[2], count-2);
|
||||
udev->name[count-2] = '\0';
|
||||
break;
|
||||
case 'M':
|
||||
if (count > NAME_SIZE)
|
||||
count = NAME_SIZE-1;
|
||||
strncpy(temp, &bufline[2], count-2);
|
||||
temp[count-2] = '\0';
|
||||
sscanf(temp, "%u:%u", &udev->major, &udev->minor);
|
||||
break;
|
||||
case 'S':
|
||||
if (count > NAME_SIZE)
|
||||
count = NAME_SIZE-1;
|
||||
|
@ -71,6 +71,7 @@ static int delete_node(struct udevice *udev)
|
||||
{
|
||||
char filename[NAME_SIZE];
|
||||
char partitionname[NAME_SIZE];
|
||||
struct stat stats;
|
||||
int retval;
|
||||
int i;
|
||||
char *pos;
|
||||
@ -80,6 +81,15 @@ static int delete_node(struct udevice *udev)
|
||||
snprintf(filename, NAME_SIZE, "%s/%s", udev_root, udev->name);
|
||||
filename[NAME_SIZE-1] = '\0';
|
||||
|
||||
dbg("checking major/minor of device node '%s'", filename);
|
||||
if (stat(filename, &stats) != 0)
|
||||
return -1;
|
||||
|
||||
if (udev->major && stats.st_rdev != makedev(udev->major, udev->minor)) {
|
||||
info("device node '%s' points to a different device, skip removal", filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
info("removing device node '%s'", filename);
|
||||
retval = unlink_secure(filename);
|
||||
if (retval)
|
||||
|
Loading…
x
Reference in New Issue
Block a user