From de0f4f9e76f87f2e59a14728bc94936d9bcc34fc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Thu, 23 Mar 2017 09:51:22 +0100 Subject: [PATCH] fix IPv6 monitor creation bug --- patches/0001-update-changelog.patch | 4 +- patches/0002-build-with-system-boost.patch | 2 +- ...h-detect-init-support-Debian-Stretch.patch | 2 +- ...use-sockaddr_storage-for-IPv6-compat.patch | 273 ++++++++++++++++++ patches/series | 1 + 5 files changed, 278 insertions(+), 4 deletions(-) create mode 100644 patches/0005-use-sockaddr_storage-for-IPv6-compat.patch diff --git a/patches/0001-update-changelog.patch b/patches/0001-update-changelog.patch index c7d2ac09c..ce4b0ac9e 100644 --- a/patches/0001-update-changelog.patch +++ b/patches/0001-update-changelog.patch @@ -1,7 +1,7 @@ -From 41a07622e9a2cef8225cef36c04861d6de869e42 Mon Sep 17 00:00:00 2001 +From 2287b08bc8770ded5d63312b7bbf4104d2627b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 20 Mar 2017 09:12:50 +0100 -Subject: [PATCH 1/4] update changelog +Subject: [PATCH 1/5] update changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit diff --git a/patches/0002-build-with-system-boost.patch b/patches/0002-build-with-system-boost.patch index aab01cf6e..709d9fc52 100644 --- a/patches/0002-build-with-system-boost.patch +++ b/patches/0002-build-with-system-boost.patch @@ -1,7 +1,7 @@ From 97f2e218d7978619617563afe313d5db717b63fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 20 Mar 2017 09:16:06 +0100 -Subject: [PATCH 2/4] build with system boost +Subject: [PATCH 2/5] build with system boost MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit diff --git a/patches/0003-ceph-detect-init-support-Debian-Stretch.patch b/patches/0003-ceph-detect-init-support-Debian-Stretch.patch index 2b221ca08..d89a501a8 100644 --- a/patches/0003-ceph-detect-init-support-Debian-Stretch.patch +++ b/patches/0003-ceph-detect-init-support-Debian-Stretch.patch @@ -1,7 +1,7 @@ From 0b89f3a4f811281c7fbc76cdfc86c0e66cb65b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Tue, 21 Mar 2017 07:47:08 +0100 -Subject: [PATCH 3/4] ceph-detect-init: support Debian Stretch +Subject: [PATCH 3/5] ceph-detect-init: support Debian Stretch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit diff --git a/patches/0005-use-sockaddr_storage-for-IPv6-compat.patch b/patches/0005-use-sockaddr_storage-for-IPv6-compat.patch new file mode 100644 index 000000000..c6da52e50 --- /dev/null +++ b/patches/0005-use-sockaddr_storage-for-IPv6-compat.patch @@ -0,0 +1,273 @@ +From c0f3a65582497526bcbfba62d4c86c55b35c3559 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= +Date: Wed, 22 Mar 2017 16:13:50 +0100 +Subject: [PATCH 5/5] use sockaddr_storage for IPv6 compat +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Fabian Grünbichler +--- + src/include/ipaddr.h | 2 +- + src/common/ipaddr.cc | 6 +++--- + src/common/pick_address.cc | 4 ++-- + src/test/test_ipaddr.cc | 44 ++++++++++++++++++++++---------------------- + 4 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/src/include/ipaddr.h b/src/include/ipaddr.h +index cac13d6..bf1a083 100644 +--- a/src/include/ipaddr.h ++++ b/src/include/ipaddr.h +@@ -16,6 +16,6 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs, + unsigned int prefix_len); + + +-bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len); ++bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len); + + #endif +diff --git a/src/common/ipaddr.cc b/src/common/ipaddr.cc +index 72fe7de..a7dedf2 100644 +--- a/src/common/ipaddr.cc ++++ b/src/common/ipaddr.cc +@@ -110,7 +110,7 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs, + } + + +-bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len) { ++bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len) { + char *slash = strchr((char*)s, '/'); + if (!slash) { + // no slash +@@ -144,14 +144,14 @@ bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix + int ok; + ok = inet_pton(AF_INET, addr, &((struct sockaddr_in*)network)->sin_addr); + if (ok) { +- network->sa_family = AF_INET; ++ network->ss_family = AF_INET; + return true; + } + + // try parsing as ipv6 + ok = inet_pton(AF_INET6, addr, &((struct sockaddr_in6*)network)->sin6_addr); + if (ok) { +- network->sa_family = AF_INET6; ++ network->ss_family = AF_INET6; + return true; + } + +diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc +index ebce2d5..460168f 100644 +--- a/src/common/pick_address.cc ++++ b/src/common/pick_address.cc +@@ -32,7 +32,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct, + get_str_list(networks, nets); + + for(std::list::iterator s = nets.begin(); s != nets.end(); ++s) { +- struct sockaddr net; ++ struct sockaddr_storage net; + unsigned int prefix_len; + + if (!parse_network(s->c_str(), &net, &prefix_len)) { +@@ -40,7 +40,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct, + exit(1); + } + +- const struct sockaddr *found = find_ip_in_subnet(ifa, &net, prefix_len); ++ const struct sockaddr *found = find_ip_in_subnet(ifa, (struct sockaddr *) &net, prefix_len); + if (found) + return found; + } +diff --git a/src/test/test_ipaddr.cc b/src/test/test_ipaddr.cc +index 9a3d43e..5d3b76e 100644 +--- a/src/test/test_ipaddr.cc ++++ b/src/test/test_ipaddr.cc +@@ -256,7 +256,7 @@ TEST(CommonIPAddr, TestV6_PrefixZero) + + TEST(CommonIPAddr, ParseNetwork_Empty) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -266,7 +266,7 @@ TEST(CommonIPAddr, ParseNetwork_Empty) + + TEST(CommonIPAddr, ParseNetwork_Bad_Junk) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -276,27 +276,27 @@ TEST(CommonIPAddr, ParseNetwork_Bad_Junk) + + TEST(CommonIPAddr, ParseNetwork_Bad_SlashNum) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +- ok = parse_network("/24", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("/24", &network, &prefix_len); + ASSERT_EQ(ok, false); + } + + TEST(CommonIPAddr, ParseNetwork_Bad_Slash) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +- ok = parse_network("/", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("/", &network, &prefix_len); + ASSERT_EQ(ok, false); + } + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv4) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -306,7 +306,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -316,7 +316,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -326,7 +326,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -336,7 +336,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv6) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -346,7 +346,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -356,7 +356,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -366,7 +366,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative) + + TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk) + { +- struct sockaddr network; ++ struct sockaddr_storage network; + unsigned int prefix_len; + bool ok; + +@@ -380,7 +380,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_0) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("123.123.123.123/0", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("123.123.123.123/0", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(0U, prefix_len); + ASSERT_EQ(AF_INET, network.sin_family); +@@ -396,7 +396,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_13) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("123.123.123.123/13", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("123.123.123.123/13", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(13U, prefix_len); + ASSERT_EQ(AF_INET, network.sin_family); +@@ -412,7 +412,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_32) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("123.123.123.123/32", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("123.123.123.123/32", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(32U, prefix_len); + ASSERT_EQ(AF_INET, network.sin_family); +@@ -428,7 +428,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_42) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("123.123.123.123/42", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("123.123.123.123/42", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(42U, prefix_len); + ASSERT_EQ(AF_INET, network.sin_family); +@@ -444,7 +444,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_0) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(0U, prefix_len); + ASSERT_EQ(AF_INET6, network.sin6_family); +@@ -460,7 +460,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_67) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(67U, prefix_len); + ASSERT_EQ(AF_INET6, network.sin6_family); +@@ -476,7 +476,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_128) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(128U, prefix_len); + ASSERT_EQ(AF_INET6, network.sin6_family); +@@ -492,7 +492,7 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_9000) + unsigned int prefix_len; + bool ok; + +- ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr*)&network, &prefix_len); ++ ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr_storage*)&network, &prefix_len); + ASSERT_EQ(ok, true); + ASSERT_EQ(9000U, prefix_len); + ASSERT_EQ(AF_INET6, network.sin6_family); +-- +2.1.4 + diff --git a/patches/series b/patches/series index 3bd0619a1..2fd7705fd 100644 --- a/patches/series +++ b/patches/series @@ -2,3 +2,4 @@ 0002-build-with-system-boost.patch 0003-ceph-detect-init-support-Debian-Stretch.patch 0004-enable-systemd-targets-by-default.patch +0005-use-sockaddr_storage-for-IPv6-compat.patch -- 2.39.2