From 7f183125fbec97bd6e4c0b3ac792b0e0c23132e0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 9 Jan 2023 15:00:30 +0900 Subject: [PATCH] udev: move device_rename() from device-private.c The function is used only by udevd. (cherry picked from commit ff88b949531e70639c507f74da875a7de2adf543) Related: RHEL-5988 --- src/libsystemd/sd-device/device-private.c | 45 ---------------------- src/libsystemd/sd-device/device-private.h | 1 - src/udev/udev-event.c | 46 +++++++++++++++++++++++ 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 9cec037237..36b0da4f12 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -619,51 +619,6 @@ int device_get_devlink_priority(sd_device *device, int *ret) { return 0; } -int device_rename(sd_device *device, const char *name) { - _cleanup_free_ char *new_syspath = NULL; - const char *s; - int r; - - assert(device); - assert(name); - - if (!filename_is_valid(name)) - return -EINVAL; - - r = sd_device_get_syspath(device, &s); - if (r < 0) - return r; - - r = path_extract_directory(s, &new_syspath); - if (r < 0) - return r; - - if (!path_extend(&new_syspath, name)) - return -ENOMEM; - - if (!path_is_safe(new_syspath)) - return -EINVAL; - - /* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate - * the new syspath. */ - r = device_set_syspath(device, new_syspath, /* verify = */ false); - if (r < 0) - return r; - - r = sd_device_get_property_value(device, "INTERFACE", &s); - if (r == -ENOENT) - return 0; - if (r < 0) - return r; - - /* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */ - r = device_add_property_internal(device, "INTERFACE_OLD", s); - if (r < 0) - return r; - - return device_add_property_internal(device, "INTERFACE", name); -} - static int device_shallow_clone(sd_device *device, sd_device **ret) { _cleanup_(sd_device_unrefp) sd_device *dest = NULL; const char *val = NULL; diff --git a/src/libsystemd/sd-device/device-private.h b/src/libsystemd/sd-device/device-private.h index a59f130aff..e57b74ba24 100644 --- a/src/libsystemd/sd-device/device-private.h +++ b/src/libsystemd/sd-device/device-private.h @@ -53,7 +53,6 @@ int device_properties_prepare(sd_device *device); int device_get_properties_nulstr(sd_device *device, const char **ret_nulstr, size_t *ret_len); int device_get_properties_strv(sd_device *device, char ***ret); -int device_rename(sd_device *device, const char *name); int device_clone_with_db(sd_device *device, sd_device **ret); int device_tag_index(sd_device *dev, sd_device *dev_old, bool add); diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 3ac12d9b52..1dc05f863d 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -12,6 +12,7 @@ #include "sd-event.h" #include "alloc-util.h" +#include "device-internal.h" #include "device-private.h" #include "device-util.h" #include "fd-util.h" @@ -859,6 +860,51 @@ int udev_event_spawn( return r; /* 0 for success, and positive if the program failed */ } +static int device_rename(sd_device *device, const char *name) { + _cleanup_free_ char *new_syspath = NULL; + const char *s; + int r; + + assert(device); + assert(name); + + if (!filename_is_valid(name)) + return -EINVAL; + + r = sd_device_get_syspath(device, &s); + if (r < 0) + return r; + + r = path_extract_directory(s, &new_syspath); + if (r < 0) + return r; + + if (!path_extend(&new_syspath, name)) + return -ENOMEM; + + if (!path_is_safe(new_syspath)) + return -EINVAL; + + /* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate + * the new syspath. */ + r = device_set_syspath(device, new_syspath, /* verify = */ false); + if (r < 0) + return r; + + r = sd_device_get_property_value(device, "INTERFACE", &s); + if (r == -ENOENT) + return 0; + if (r < 0) + return r; + + /* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */ + r = device_add_property_internal(device, "INTERFACE_OLD", s); + if (r < 0) + return r; + + return device_add_property_internal(device, "INTERFACE", name); +} + static int rename_netif(UdevEvent *event) { const char *oldname; sd_device *dev;