From: Marc-André Lureau Date: Tue, 28 Apr 2020 15:58:24 +0000 (+0200) Subject: shared: move in_addr_ifindex_name_from_string_auto() there X-Git-Tag: v246-rc1~392^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2d95d81f7b1774697f94630053e5b8842b9e6bfb;p=thirdparty%2Fsystemd.git shared: move in_addr_ifindex_name_from_string_auto() there --- diff --git a/src/resolve/meson.build b/src/resolve/meson.build index c4d8d4e5d9a..92b67b6333d 100644 --- a/src/resolve/meson.build +++ b/src/resolve/meson.build @@ -64,8 +64,6 @@ systemd_resolved_sources = files(''' resolved-etc-hosts.h resolved-etc-hosts.c resolved-dnstls.h - resolved-util.c - resolved-util.h '''.split()) resolvectl_sources = files(''' @@ -230,10 +228,4 @@ tests += [ [], [], 'ENABLE_RESOLVE', 'manual'], - - [['src/resolve/test-resolved-util.c', - 'src/resolve/resolved-util.c', - 'src/resolve/resolved-util.h'], - [], - []], ] diff --git a/src/resolve/resolved-conf.c b/src/resolve/resolved-conf.c index cdca0afbea8..e915343c012 100644 --- a/src/resolve/resolved-conf.c +++ b/src/resolve/resolved-conf.c @@ -8,10 +8,10 @@ #include "parse-util.h" #include "resolved-conf.h" #include "resolved-dnssd.h" -#include "resolved-util.h" #include "resolved-manager.h" #include "resolved-dns-search-domain.h" #include "dns-domain.h" +#include "socket-netlink.h" #include "specifier.h" #include "string-table.h" #include "string-util.h" diff --git a/src/resolve/resolved-util.c b/src/resolve/resolved-util.c deleted file mode 100644 index ac8df635135..00000000000 --- a/src/resolve/resolved-util.c +++ /dev/null @@ -1,36 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1+ */ - -#include "alloc-util.h" -#include "macro.h" -#include "resolved-util.h" -#include "socket-netlink.h" - -int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name) { - _cleanup_free_ char *buf = NULL, *name = NULL; - const char *m; - int r; - - assert(s); - - m = strchr(s, '#'); - if (m) { - name = strdup(m+1); - if (!name) - return -ENOMEM; - - buf = strndup(s, m - s); - if (!buf) - return -ENOMEM; - - s = buf; - } - - r = in_addr_ifindex_from_string_auto(s, family, ret, ifindex); - if (r < 0) - return r; - - if (server_name) - *server_name = TAKE_PTR(name); - - return r; -} diff --git a/src/resolve/resolved-util.h b/src/resolve/resolved-util.h deleted file mode 100644 index 10ebbc08743..00000000000 --- a/src/resolve/resolved-util.h +++ /dev/null @@ -1,6 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1+ */ -#pragma once - -#include "in-addr-util.h" - -int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name); diff --git a/src/resolve/test-resolved-util.c b/src/resolve/test-resolved-util.c deleted file mode 100644 index 35bd73c4f69..00000000000 --- a/src/resolve/test-resolved-util.c +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1+ */ - -#include "log.h" -#include "resolved-util.h" -#include "string-util.h" -#include "tests.h" - - -static void test_in_addr_ifindex_name_from_string_auto_one(const char *a, const char *expected) { - int family, ifindex; - union in_addr_union ua; - _cleanup_free_ char *server_name = NULL; - - assert_se(in_addr_ifindex_name_from_string_auto(a, &family, &ua, &ifindex, &server_name) >= 0); - assert_se(streq_ptr(server_name, expected)); -} - -static void test_in_addr_ifindex_name_from_string_auto(void) { - log_info("/* %s */", __func__); - - test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1", NULL); - test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1#test.com", "test.com"); - test_in_addr_ifindex_name_from_string_auto_one("fe80::18%19", NULL); - test_in_addr_ifindex_name_from_string_auto_one("fe80::18%19#another.test.com", "another.test.com"); -} - -int main(int argc, char **argv) { - test_setup_logging(LOG_DEBUG); - - test_in_addr_ifindex_name_from_string_auto(); - return 0; -} diff --git a/src/shared/socket-netlink.c b/src/shared/socket-netlink.c index ba33825340b..16b0e6a5c3c 100644 --- a/src/shared/socket-netlink.c +++ b/src/shared/socket-netlink.c @@ -362,3 +362,33 @@ int in_addr_ifindex_from_string_auto(const char *s, int *family, union in_addr_u return r; } + +int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name) { + _cleanup_free_ char *buf = NULL, *name = NULL; + const char *m; + int r; + + assert(s); + + m = strchr(s, '#'); + if (m) { + name = strdup(m+1); + if (!name) + return -ENOMEM; + + buf = strndup(s, m - s); + if (!buf) + return -ENOMEM; + + s = buf; + } + + r = in_addr_ifindex_from_string_auto(s, family, ret, ifindex); + if (r < 0) + return r; + + if (server_name) + *server_name = TAKE_PTR(name); + + return r; +} diff --git a/src/shared/socket-netlink.h b/src/shared/socket-netlink.h index fa58409d618..35c35db52d1 100644 --- a/src/shared/socket-netlink.h +++ b/src/shared/socket-netlink.h @@ -21,3 +21,4 @@ bool socket_address_is(const SocketAddress *a, const char *s, int type); bool socket_address_is_netlink(const SocketAddress *a, const char *s); int in_addr_ifindex_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex); +int in_addr_ifindex_name_from_string_auto(const char *s, int *family, union in_addr_union *ret, int *ifindex, char **server_name); diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c index d36caaa71e7..05c375d79ba 100644 --- a/src/test/test-socket-util.c +++ b/src/test/test-socket-util.c @@ -245,6 +245,24 @@ static void test_in_addr_ifindex_from_string_auto(void) { assert_se(in_addr_ifindex_from_string_auto("fe80::19%thisinterfacecantexist", &family, &ua, &ifindex) == -ENODEV); } +static void test_in_addr_ifindex_name_from_string_auto_one(const char *a, const char *expected) { + int family, ifindex; + union in_addr_union ua; + _cleanup_free_ char *server_name = NULL; + + assert_se(in_addr_ifindex_name_from_string_auto(a, &family, &ua, &ifindex, &server_name) >= 0); + assert_se(streq_ptr(server_name, expected)); +} + +static void test_in_addr_ifindex_name_from_string_auto(void) { + log_info("/* %s */", __func__); + + test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1", NULL); + test_in_addr_ifindex_name_from_string_auto_one("192.168.0.1#test.com", "test.com"); + test_in_addr_ifindex_name_from_string_auto_one("fe80::18%19", NULL); + test_in_addr_ifindex_name_from_string_auto_one("fe80::18%19#another.test.com", "another.test.com"); +} + static void test_sockaddr_equal(void) { union sockaddr_union a = { .in.sin_family = AF_INET, @@ -676,6 +694,7 @@ int main(int argc, char *argv[]) { test_in_addr_to_string(); test_in_addr_ifindex_to_string(); test_in_addr_ifindex_from_string_auto(); + test_in_addr_ifindex_name_from_string_auto(); test_sockaddr_equal();