chiark / gitweb /
fix ENV{TEST}="Test: $env{TEST}"
authorKay Sievers <kay.sievers@suse.de>
Mon, 4 Sep 2006 22:50:25 +0000 (00:50 +0200)
committerKay Sievers <kay.sievers@suse.de>
Mon, 4 Sep 2006 22:50:25 +0000 (00:50 +0200)
test/udev-test.pl
udev_rules.c

index 1117ecb..464098f 100755 (executable)
@@ -1248,6 +1248,19 @@ SUBSYSTEMS=="scsi", KERNEL=="sda1", NAME="bad"
 EOF
        },
        {
+               desc            => "ENV{} test (assign 2 times)",
+               subsys          => "block",
+               devpath         => "/block/sda/sda1",
+               exp_name        => "true",
+               rules           => <<EOF
+SUBSYSTEMS=="scsi", KERNEL=="sda1", ENV{ASSIGN}="true"
+SUBSYSTEMS=="scsi", KERNEL=="sda1", ENV{ASSIGN}="absolutely-\$env{ASSIGN}"
+SUBSYSTEMS=="scsi", KERNEL=="sda1", ENV{ASSIGN}=="yes", NAME="no"
+SUBSYSTEMS=="scsi", KERNEL=="sda1", ENV{ASSIGN}=="absolutely-true", NAME="true"
+SUBSYSTEMS=="scsi", KERNEL=="sda1", NAME="bad"
+EOF
+       },
+       {
                desc            => "ENV{} test (assign2)",
                subsys          => "block",
                devpath         => "/block/sda/sda1",
index 8a2066d..1483f8f 100644 (file)
@@ -802,13 +802,19 @@ try_parent:
                struct key_pair *pair = &rule->env.keys[i];
 
                if (pair->key.operation == KEY_OP_ASSIGN) {
+                       char temp_value[NAME_SIZE];
                        const char *key_name = key_pair_name(rule, pair);
                        const char *value = key_val(rule, &pair->key);
-                       char *key_value = name_list_key_add(&udev->env_list, key_name, value);
+                       char *key_value;
+
+                       /* make sure we don't write to the same string we possibly read from */
+                       strlcpy(temp_value, value, sizeof(temp_value));
+                       udev_rules_apply_format(udev, temp_value, NAME_SIZE);
+
+                       key_value = name_list_key_add(&udev->env_list, key_name, temp_value);
                        if (key_value == NULL)
                                break;
 
-                       udev_rules_apply_format(udev, key_value, NAME_SIZE);
                        putenv(key_value);
                        dbg("export ENV '%s'", key_value);
                }