--- /dev/null
+diff -u -p udev-106/udev_rules.j1.c udev-106/udev_rules.c
+--- udev-106/udev_rules.j1.c 2007-03-15 10:07:51.000000000 -0700
++++ udev-106/udev_rules.c 2007-03-15 10:09:50.000000000 -0700
+@@ -186,7 +186,16 @@ static int import_keys_into_env(struct u
+ linepos = line;
+ if (get_key(&linepos, &variable, &value) == 0) {
+ dbg("import '%s=%s'", variable, value);
+- name_list_key_add(&udev->env_list, variable, value);
++ /* handle device, renamed by external tool,
++ * returning new path */
++ if (strcmp(variable, "DEVPATH") == 0) {
++ info("updating devpath from '%s' to '%s'",
++ udev->dev->devpath, value);
++ sysfs_device_set_values(udev->dev, value,
++ NULL, NULL);
++ } else
++ name_list_key_add(&udev->env_list,
++ variable, value);
+ setenv(variable, value, 1);
+ }
+ }
+diff -u -p udev-106/udevtest.j1.c udev-106/udevtest.c
+--- udev-106/udevtest.j1.c 2007-03-15 10:39:16.000000000 -0700
++++ udev-106/udevtest.c 2007-03-15 10:42:09.000000000 -0700
+@@ -59,8 +59,13 @@ int main(int argc, char *argv[], char *e
+
+ info("version %s", UDEV_VERSION);
+ udev_config_init();
+- if (udev_log_priority < LOG_INFO)
++ if (udev_log_priority < LOG_INFO) {
++ char priority[32];
++
+ udev_log_priority = LOG_INFO;
++ sprintf(priority, "%i", udev_log_priority);
++ setenv("UDEV_LOG", priority, 1);
++ }
+
+ for (i = 1 ; i < argc; i++) {
+ char *arg = argv[i];