]> git.proxmox.com Git - ceph.git/blob - patches/0005-use-sockaddr_storage-for-IPv6-compat.patch
update sources to v12.0.2
[ceph.git] / patches / 0005-use-sockaddr_storage-for-IPv6-compat.patch
1 From 4858648bf48d110c960cd4a0261056805827b527 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
3 Date: Wed, 22 Mar 2017 16:13:50 +0100
4 Subject: [PATCH 5/6] use sockaddr_storage for IPv6 compat
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
10 ---
11 src/include/ipaddr.h | 2 +-
12 src/common/ipaddr.cc | 6 ++---
13 src/common/pick_address.cc | 4 ++--
14 src/test/test_ipaddr.cc | 60 +++++++++++++++++++++++++++++-----------------
15 4 files changed, 44 insertions(+), 28 deletions(-)
16
17 diff --git a/src/include/ipaddr.h b/src/include/ipaddr.h
18 index cac13d6..bf1a083 100644
19 --- a/src/include/ipaddr.h
20 +++ b/src/include/ipaddr.h
21 @@ -16,6 +16,6 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
22 unsigned int prefix_len);
23
24
25 -bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len);
26 +bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len);
27
28 #endif
29 diff --git a/src/common/ipaddr.cc b/src/common/ipaddr.cc
30 index 72fe7de..a7dedf2 100644
31 --- a/src/common/ipaddr.cc
32 +++ b/src/common/ipaddr.cc
33 @@ -110,7 +110,7 @@ const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
34 }
35
36
37 -bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix_len) {
38 +bool parse_network(const char *s, struct sockaddr_storage *network, unsigned int *prefix_len) {
39 char *slash = strchr((char*)s, '/');
40 if (!slash) {
41 // no slash
42 @@ -144,14 +144,14 @@ bool parse_network(const char *s, struct sockaddr *network, unsigned int *prefix
43 int ok;
44 ok = inet_pton(AF_INET, addr, &((struct sockaddr_in*)network)->sin_addr);
45 if (ok) {
46 - network->sa_family = AF_INET;
47 + network->ss_family = AF_INET;
48 return true;
49 }
50
51 // try parsing as ipv6
52 ok = inet_pton(AF_INET6, addr, &((struct sockaddr_in6*)network)->sin6_addr);
53 if (ok) {
54 - network->sa_family = AF_INET6;
55 + network->ss_family = AF_INET6;
56 return true;
57 }
58
59 diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
60 index 06d58e4..5f910d5 100644
61 --- a/src/common/pick_address.cc
62 +++ b/src/common/pick_address.cc
63 @@ -32,7 +32,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
64 get_str_list(networks, nets);
65
66 for(std::list<string>::iterator s = nets.begin(); s != nets.end(); ++s) {
67 - struct sockaddr net;
68 + struct sockaddr_storage net;
69 unsigned int prefix_len;
70
71 if (!parse_network(s->c_str(), &net, &prefix_len)) {
72 @@ -40,7 +40,7 @@ static const struct sockaddr *find_ip_in_subnet_list(CephContext *cct,
73 exit(1);
74 }
75
76 - const struct sockaddr *found = find_ip_in_subnet(ifa, &net, prefix_len);
77 + const struct sockaddr *found = find_ip_in_subnet(ifa, (struct sockaddr *) &net, prefix_len);
78 if (found)
79 return found;
80 }
81 diff --git a/src/test/test_ipaddr.cc b/src/test/test_ipaddr.cc
82 index 9a3d43e..716094d 100644
83 --- a/src/test/test_ipaddr.cc
84 +++ b/src/test/test_ipaddr.cc
85 @@ -256,7 +256,7 @@ TEST(CommonIPAddr, TestV6_PrefixZero)
86
87 TEST(CommonIPAddr, ParseNetwork_Empty)
88 {
89 - struct sockaddr network;
90 + struct sockaddr_storage network;
91 unsigned int prefix_len;
92 bool ok;
93
94 @@ -266,7 +266,7 @@ TEST(CommonIPAddr, ParseNetwork_Empty)
95
96 TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
97 {
98 - struct sockaddr network;
99 + struct sockaddr_storage network;
100 unsigned int prefix_len;
101 bool ok;
102
103 @@ -276,27 +276,27 @@ TEST(CommonIPAddr, ParseNetwork_Bad_Junk)
104
105 TEST(CommonIPAddr, ParseNetwork_Bad_SlashNum)
106 {
107 - struct sockaddr network;
108 + struct sockaddr_storage network;
109 unsigned int prefix_len;
110 bool ok;
111
112 - ok = parse_network("/24", (struct sockaddr*)&network, &prefix_len);
113 + ok = parse_network("/24", &network, &prefix_len);
114 ASSERT_EQ(ok, false);
115 }
116
117 TEST(CommonIPAddr, ParseNetwork_Bad_Slash)
118 {
119 - struct sockaddr network;
120 + struct sockaddr_storage network;
121 unsigned int prefix_len;
122 bool ok;
123
124 - ok = parse_network("/", (struct sockaddr*)&network, &prefix_len);
125 + ok = parse_network("/", &network, &prefix_len);
126 ASSERT_EQ(ok, false);
127 }
128
129 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
130 {
131 - struct sockaddr network;
132 + struct sockaddr_storage network;
133 unsigned int prefix_len;
134 bool ok;
135
136 @@ -306,7 +306,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4)
137
138 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
139 {
140 - struct sockaddr network;
141 + struct sockaddr_storage network;
142 unsigned int prefix_len;
143 bool ok;
144
145 @@ -316,7 +316,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4Slash)
146
147 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
148 {
149 - struct sockaddr network;
150 + struct sockaddr_storage network;
151 unsigned int prefix_len;
152 bool ok;
153
154 @@ -326,7 +326,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashNegative)
155
156 TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
157 {
158 - struct sockaddr network;
159 + struct sockaddr_storage network;
160 unsigned int prefix_len;
161 bool ok;
162
163 @@ -336,7 +336,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv4SlashJunk)
164
165 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
166 {
167 - struct sockaddr network;
168 + struct sockaddr_storage network;
169 unsigned int prefix_len;
170 bool ok;
171
172 @@ -346,7 +346,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6)
173
174 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
175 {
176 - struct sockaddr network;
177 + struct sockaddr_storage network;
178 unsigned int prefix_len;
179 bool ok;
180
181 @@ -356,7 +356,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6Slash)
182
183 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
184 {
185 - struct sockaddr network;
186 + struct sockaddr_storage network;
187 unsigned int prefix_len;
188 bool ok;
189
190 @@ -366,7 +366,7 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashNegative)
191
192 TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk)
193 {
194 - struct sockaddr network;
195 + struct sockaddr_storage network;
196 unsigned int prefix_len;
197 bool ok;
198
199 @@ -377,10 +377,12 @@ TEST(CommonIPAddr, ParseNetwork_Bad_IPv6SlashJunk)
200 TEST(CommonIPAddr, ParseNetwork_IPv4_0)
201 {
202 struct sockaddr_in network;
203 + struct sockaddr_storage net_storage;
204 unsigned int prefix_len;
205 bool ok;
206
207 - ok = parse_network("123.123.123.123/0", (struct sockaddr*)&network, &prefix_len);
208 + ok = parse_network("123.123.123.123/0", &net_storage, &prefix_len);
209 + network = *(struct sockaddr_in *) &net_storage;
210 ASSERT_EQ(ok, true);
211 ASSERT_EQ(0U, prefix_len);
212 ASSERT_EQ(AF_INET, network.sin_family);
213 @@ -393,10 +395,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_0)
214 TEST(CommonIPAddr, ParseNetwork_IPv4_13)
215 {
216 struct sockaddr_in network;
217 + struct sockaddr_storage net_storage;
218 unsigned int prefix_len;
219 bool ok;
220
221 - ok = parse_network("123.123.123.123/13", (struct sockaddr*)&network, &prefix_len);
222 + ok = parse_network("123.123.123.123/13", &net_storage, &prefix_len);
223 + network = *(struct sockaddr_in *) &net_storage;
224 ASSERT_EQ(ok, true);
225 ASSERT_EQ(13U, prefix_len);
226 ASSERT_EQ(AF_INET, network.sin_family);
227 @@ -409,10 +413,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_13)
228 TEST(CommonIPAddr, ParseNetwork_IPv4_32)
229 {
230 struct sockaddr_in network;
231 + struct sockaddr_storage net_storage;
232 unsigned int prefix_len;
233 bool ok;
234
235 - ok = parse_network("123.123.123.123/32", (struct sockaddr*)&network, &prefix_len);
236 + ok = parse_network("123.123.123.123/32", &net_storage, &prefix_len);
237 + network = *(struct sockaddr_in *) &net_storage;
238 ASSERT_EQ(ok, true);
239 ASSERT_EQ(32U, prefix_len);
240 ASSERT_EQ(AF_INET, network.sin_family);
241 @@ -425,10 +431,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_32)
242 TEST(CommonIPAddr, ParseNetwork_IPv4_42)
243 {
244 struct sockaddr_in network;
245 + struct sockaddr_storage net_storage;
246 unsigned int prefix_len;
247 bool ok;
248
249 - ok = parse_network("123.123.123.123/42", (struct sockaddr*)&network, &prefix_len);
250 + ok = parse_network("123.123.123.123/42", &net_storage, &prefix_len);
251 + network = *(struct sockaddr_in *) &net_storage;
252 ASSERT_EQ(ok, true);
253 ASSERT_EQ(42U, prefix_len);
254 ASSERT_EQ(AF_INET, network.sin_family);
255 @@ -441,10 +449,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv4_42)
256 TEST(CommonIPAddr, ParseNetwork_IPv6_0)
257 {
258 struct sockaddr_in6 network;
259 + struct sockaddr_storage net_storage;
260 unsigned int prefix_len;
261 bool ok;
262
263 - ok = parse_network("2001:1234:5678:90ab::dead:beef/0", (struct sockaddr*)&network, &prefix_len);
264 + ok = parse_network("2001:1234:5678:90ab::dead:beef/0", &net_storage, &prefix_len);
265 + network = *(struct sockaddr_in6 *) &net_storage;
266 ASSERT_EQ(ok, true);
267 ASSERT_EQ(0U, prefix_len);
268 ASSERT_EQ(AF_INET6, network.sin6_family);
269 @@ -457,10 +467,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_0)
270 TEST(CommonIPAddr, ParseNetwork_IPv6_67)
271 {
272 struct sockaddr_in6 network;
273 + struct sockaddr_storage net_storage;
274 unsigned int prefix_len;
275 bool ok;
276
277 - ok = parse_network("2001:1234:5678:90ab::dead:beef/67", (struct sockaddr*)&network, &prefix_len);
278 + ok = parse_network("2001:1234:5678:90ab::dead:beef/67", &net_storage, &prefix_len);
279 + network = *(struct sockaddr_in6 *) &net_storage;
280 ASSERT_EQ(ok, true);
281 ASSERT_EQ(67U, prefix_len);
282 ASSERT_EQ(AF_INET6, network.sin6_family);
283 @@ -473,10 +485,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_67)
284 TEST(CommonIPAddr, ParseNetwork_IPv6_128)
285 {
286 struct sockaddr_in6 network;
287 + struct sockaddr_storage net_storage;
288 unsigned int prefix_len;
289 bool ok;
290
291 - ok = parse_network("2001:1234:5678:90ab::dead:beef/128", (struct sockaddr*)&network, &prefix_len);
292 + ok = parse_network("2001:1234:5678:90ab::dead:beef/128", &net_storage, &prefix_len);
293 + network = *(struct sockaddr_in6 *) &net_storage;
294 ASSERT_EQ(ok, true);
295 ASSERT_EQ(128U, prefix_len);
296 ASSERT_EQ(AF_INET6, network.sin6_family);
297 @@ -489,10 +503,12 @@ TEST(CommonIPAddr, ParseNetwork_IPv6_128)
298 TEST(CommonIPAddr, ParseNetwork_IPv6_9000)
299 {
300 struct sockaddr_in6 network;
301 + struct sockaddr_storage net_storage;
302 unsigned int prefix_len;
303 bool ok;
304
305 - ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", (struct sockaddr*)&network, &prefix_len);
306 + ok = parse_network("2001:1234:5678:90ab::dead:beef/9000", &net_storage, &prefix_len);
307 + network = *(struct sockaddr_in6 *) &net_storage;
308 ASSERT_EQ(ok, true);
309 ASSERT_EQ(9000U, prefix_len);
310 ASSERT_EQ(AF_INET6, network.sin6_family);
311 --
312 2.1.4
313