You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.7 KiB
75 lines
2.7 KiB
8 months ago
|
From 32188058ad3b9a8bfc555215982145a128adfc44 Mon Sep 17 00:00:00 2001
|
||
|
From: Nick Rosbrook <nick.rosbrook@canonical.com>
|
||
|
Date: Tue, 22 Nov 2022 17:01:47 -0500
|
||
|
Subject: [PATCH] sd-netlink: add a test for rtnl_set_link_name()
|
||
|
|
||
|
Add a test that verifies a deleted alternative name is restored on error
|
||
|
in rtnl_set_link_name().
|
||
|
|
||
|
(cherry picked from commit b338a8bb402a3ab241a617e096b21ae6a7b7badf)
|
||
|
|
||
|
Related: RHEL-5988
|
||
|
---
|
||
|
src/libsystemd/sd-netlink/test-netlink.c | 27 ++++++++++++++++++++++++
|
||
|
1 file changed, 27 insertions(+)
|
||
|
|
||
|
diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c
|
||
|
index 3f74ecc068..2d93f9eba0 100644
|
||
|
--- a/src/libsystemd/sd-netlink/test-netlink.c
|
||
|
+++ b/src/libsystemd/sd-netlink/test-netlink.c
|
||
|
@@ -8,6 +8,7 @@
|
||
|
#include <linux/if_macsec.h>
|
||
|
#include <linux/l2tp.h>
|
||
|
#include <linux/nl80211.h>
|
||
|
+#include <unistd.h>
|
||
|
|
||
|
#include "sd-netlink.h"
|
||
|
|
||
|
@@ -16,6 +17,7 @@
|
||
|
#include "macro.h"
|
||
|
#include "netlink-genl.h"
|
||
|
#include "netlink-internal.h"
|
||
|
+#include "netlink-util.h"
|
||
|
#include "socket-util.h"
|
||
|
#include "stdio-util.h"
|
||
|
#include "string-util.h"
|
||
|
@@ -667,6 +669,30 @@ static void test_genl(void) {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+static void test_rtnl_set_link_name(sd_netlink *rtnl, int ifindex) {
|
||
|
+ _cleanup_strv_free_ char **alternative_names = NULL;
|
||
|
+ int r;
|
||
|
+
|
||
|
+ log_debug("/* %s */", __func__);
|
||
|
+
|
||
|
+ if (geteuid() != 0)
|
||
|
+ return (void) log_tests_skipped("not root");
|
||
|
+
|
||
|
+ /* Test that the new name (which is currently an alternative name) is
|
||
|
+ * restored as an alternative name on error. Create an error by using
|
||
|
+ * an invalid device name, namely one that exceeds IFNAMSIZ
|
||
|
+ * (alternative names can exceed IFNAMSIZ, but not regular names). */
|
||
|
+ r = rtnl_set_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename"));
|
||
|
+ if (r == -EPERM)
|
||
|
+ return (void) log_tests_skipped("missing required capabilities");
|
||
|
+
|
||
|
+ assert_se(r >= 0);
|
||
|
+ assert_se(rtnl_set_link_name(&rtnl, ifindex, "testlongalternativename") == -EINVAL);
|
||
|
+ assert_se(rtnl_get_link_alternative_names(&rtnl, ifindex, &alternative_names) >= 0);
|
||
|
+ assert_se(strv_contains(alternative_names, "testlongalternativename"));
|
||
|
+ assert_se(rtnl_delete_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename")) >= 0);
|
||
|
+}
|
||
|
+
|
||
|
int main(void) {
|
||
|
sd_netlink *rtnl;
|
||
|
sd_netlink_message *m;
|
||
|
@@ -698,6 +724,7 @@ int main(void) {
|
||
|
test_pipe(if_loopback);
|
||
|
test_event_loop(if_loopback);
|
||
|
test_link_configure(rtnl, if_loopback);
|
||
|
+ test_rtnl_set_link_name(rtnl, if_loopback);
|
||
|
|
||
|
test_get_addresses(rtnl);
|
||
|
test_message_link_bridge(rtnl);
|