Gentoo Archives: gentoo-commits

From: Amy Winston <amynka@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-auth/nss-mdns/, sys-auth/nss-mdns/files/
Date: Sun, 29 May 2016 18:58:56
Message-Id: 1464548249.75e23df8c331b7498d1f27a82bf0d048f627bb3d.amynka@gentoo
1 commit: 75e23df8c331b7498d1f27a82bf0d048f627bb3d
2 Author: Amy Winston <amynka <AT> gentoo <DOT> org>
3 AuthorDate: Sun May 29 18:50:25 2016 +0000
4 Commit: Amy Winston <amynka <AT> gentoo <DOT> org>
5 CommitDate: Sun May 29 18:57:29 2016 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=75e23df8
7
8 sys-auth/nss-mdns: revbump, add ipv6 patch bug #584286
9
10 Package-Manager: portage-2.2.28
11 RepoMan-Options: --force
12
13 sys-auth/nss-mdns/files/nss-mdns-0.10-ipv6.patch | 528 +++++++++++++++++++++
14 ...mdns-0.10-r2.ebuild => nss-mdns-0.10-r3.ebuild} | 5 +-
15 2 files changed, 531 insertions(+), 2 deletions(-)
16
17 diff --git a/sys-auth/nss-mdns/files/nss-mdns-0.10-ipv6.patch b/sys-auth/nss-mdns/files/nss-mdns-0.10-ipv6.patch
18 new file mode 100644
19 index 0000000..6d6dbc9
20 --- /dev/null
21 +++ b/sys-auth/nss-mdns/files/nss-mdns-0.10-ipv6.patch
22 @@ -0,0 +1,528 @@
23 +diff -u src/avahi.c src/avahi.c
24 +--- src/avahi.c 2006-04-29 05:14:09.000000000 +0800
25 ++++ src/avahi.c 2013-01-04 10:00:05.025558790 +0800
26 +@@ -26,6 +26,7 @@
27 + #include <sys/socket.h>
28 + #include <string.h>
29 + #include <stdio.h>
30 ++#include <stdlib.h>
31 + #include <sys/types.h>
32 + #include <arpa/inet.h>
33 + #include <sys/un.h>
34 +@@ -34,6 +35,7 @@
35 +
36 + #include "avahi.h"
37 + #include "util.h"
38 ++#include "query.h"
39 +
40 + #define WHITESPACE " \t"
41 +
42 +@@ -93,7 +95,8 @@
43 + p = ln+1;
44 + p += strspn(p, WHITESPACE);
45 +
46 +- /* Skip interface */
47 ++ /* Parse interface */
48 ++ if (af == AF_INET6) ((ipv6_address_t*)data)->if_idx = strtoul(p, 0, 10);
49 + p += strcspn(p, WHITESPACE);
50 + p += strspn(p, WHITESPACE);
51 +
52 +diff -u src/avahi-test.c src/avahi-test.c
53 +--- src/avahi-test.c 2007-02-09 00:42:23.000000000 +0800
54 ++++ src/avahi-test.c 2013-01-04 09:59:06.174017729 +0800
55 +@@ -24,6 +24,7 @@
56 + #include <stdio.h>
57 +
58 + #include "avahi.h"
59 ++#include "query.h"
60 +
61 + int main(int argc, char *argv[]) {
62 + uint8_t data[64];
63 +@@ -35,15 +36,20 @@
64 + else
65 + printf("AF_INET: failed (%i).\n", r);
66 +
67 +-/* if ((r = avahi_resolve_name(AF_INET6, argc >= 2 ? argv[1] : "cocaine.local", data)) == 0) */
68 +-/* printf("AF_INET6: %s\n", inet_ntop(AF_INET6, data, t, sizeof(t))); */
69 +-/* else */
70 +-/* printf("AF_INET6: failed (%i).\n", r); */
71 +-
72 + if ((r = avahi_resolve_address(AF_INET, data, t, sizeof(t))) == 0)
73 + printf("REVERSE: %s\n", t);
74 + else
75 + printf("REVERSE: failed (%i).\n", r);
76 ++
77 ++ if ((r = avahi_resolve_name(AF_INET6, argc >= 2 ? argv[1] : "cocaine.local", data)) == 0)
78 ++ printf("AF_INET6: %s, %u\n", inet_ntop(AF_INET6, data, t, sizeof(t)), ((ipv6_address_t*)data)->if_idx);
79 ++ else
80 ++ printf("AF_INET6: failed (%i).\n", r);
81 ++
82 ++ if ((r = avahi_resolve_address(AF_INET6, data, t, sizeof(t))) == 0)
83 ++ printf("REVERSE: %s\n", t);
84 ++ else
85 ++ printf("REVERSE: failed (%i).\n", r);
86 +
87 + return 0;
88 + }
89 +diff -u src/bsdnss.c src/bsdnss.c
90 +--- src/bsdnss.c 2007-02-09 00:42:23.000000000 +0800
91 ++++ src/bsdnss.c 2013-01-04 09:49:45.566389491 +0800
92 +@@ -258,6 +258,8 @@
93 + ai->ai_addrlen = sizeof(struct sockaddr_in6);
94 + memcpy(&((struct sockaddr_in6 *)psa)->sin6_addr, hap,
95 + ai->ai_addrlen);
96 ++ if (((struct sockaddr_in6 *)psa)->sin6_addr[0] == 0xfe && ((struct sockaddr_in6 *)psa)->sin6_addr[0] == 0x80)
97 ++ ((struct sockaddr_in6 *)psa)->sin6_scope_id = ((struct ipv6_address_t*) hap)->if_idx;
98 + break;
99 + default:
100 + ai->ai_addrlen = sizeof(struct sockaddr_storage);
101 +diff -u src/map-file src/map-file
102 +--- src/map-file 2007-01-02 02:36:21.000000000 +0800
103 ++++ src/map-file 2013-01-07 08:56:56.406478774 +0800
104 +@@ -18,6 +18,12 @@
105 + _nss_mdns_minimal_gethostbyname2_r;
106 + _nss_mdns4_minimal_gethostbyname2_r;
107 + _nss_mdns6_minimal_gethostbyname2_r;
108 ++_nss_mdns_gethostbyname4_r;
109 ++_nss_mdns4_gethostbyname4_r;
110 ++_nss_mdns6_gethostbyname4_r;
111 ++_nss_mdns_minimal_gethostbyname4_r;
112 ++_nss_mdns4_minimal_gethostbyname4_r;
113 ++_nss_mdns6_minimal_gethostbyname4_r;
114 + local:
115 + *;
116 + };
117 +diff -u src/nss.c src/nss.c
118 +--- src/nss.c 2013-01-07 15:14:23.000000000 +0800
119 ++++ src/nss.c 2013-01-07 16:52:38.399842517 +0800
120 +@@ -41,22 +41,27 @@
121 +
122 + #if defined(NSS_IPV4_ONLY) && ! defined(MDNS_MINIMAL)
123 + #define _nss_mdns_gethostbyname2_r _nss_mdns4_gethostbyname2_r
124 ++#define _nss_mdns_gethostbyname4_r _nss_mdns4_gethostbyname4_r
125 + #define _nss_mdns_gethostbyname_r _nss_mdns4_gethostbyname_r
126 + #define _nss_mdns_gethostbyaddr_r _nss_mdns4_gethostbyaddr_r
127 + #elif defined(NSS_IPV4_ONLY) && defined(MDNS_MINIMAL)
128 + #define _nss_mdns_gethostbyname2_r _nss_mdns4_minimal_gethostbyname2_r
129 ++#define _nss_mdns_gethostbyname4_r _nss_mdns4_minimal_gethostbyname4_r
130 + #define _nss_mdns_gethostbyname_r _nss_mdns4_minimal_gethostbyname_r
131 + #define _nss_mdns_gethostbyaddr_r _nss_mdns4_minimal_gethostbyaddr_r
132 + #elif defined(NSS_IPV6_ONLY) && ! defined(MDNS_MINIMAL)
133 + #define _nss_mdns_gethostbyname2_r _nss_mdns6_gethostbyname2_r
134 ++#define _nss_mdns_gethostbyname4_r _nss_mdns6_gethostbyname4_r
135 + #define _nss_mdns_gethostbyname_r _nss_mdns6_gethostbyname_r
136 + #define _nss_mdns_gethostbyaddr_r _nss_mdns6_gethostbyaddr_r
137 + #elif defined(NSS_IPV6_ONLY) && defined(MDNS_MINIMAL)
138 + #define _nss_mdns_gethostbyname2_r _nss_mdns6_minimal_gethostbyname2_r
139 ++#define _nss_mdns_gethostbyname4_r _nss_mdns6_minimal_gethostbyname4_r
140 + #define _nss_mdns_gethostbyname_r _nss_mdns6_minimal_gethostbyname_r
141 + #define _nss_mdns_gethostbyaddr_r _nss_mdns6_minimal_gethostbyaddr_r
142 + #elif defined(MDNS_MINIMAL)
143 + #define _nss_mdns_gethostbyname2_r _nss_mdns_minimal_gethostbyname2_r
144 ++#define _nss_mdns_gethostbyname4_r _nss_mdns_minimal_gethostbyname4_r
145 + #define _nss_mdns_gethostbyname_r _nss_mdns_minimal_gethostbyname_r
146 + #define _nss_mdns_gethostbyaddr_r _nss_mdns_minimal_gethostbyaddr_r
147 + #endif
148 +@@ -81,6 +86,12 @@
149 + char *name[MAX_ENTRIES];
150 + } data;
151 + };
152 ++struct user_gai_buf {
153 ++ struct gaih_addrtuple *list_base;
154 ++ int list_size;
155 ++ int list_idx;
156 ++ int wrote_name;
157 ++};
158 +
159 + #ifndef NSS_IPV6_ONLY
160 + static void ipv4_callback(const ipv4_address_t *ipv4, void *userdata) {
161 +@@ -93,6 +104,21 @@
162 + u->data.ipv4[u->count++] = *ipv4;
163 + u->data_len += sizeof(ipv4_address_t);
164 + }
165 ++static void ipv4_gai_callback(const ipv4_address_t *ipv4, void *userdata) {
166 ++ struct user_gai_buf *u = userdata;
167 ++ assert(ipv4 && userdata);
168 ++
169 ++ if (u->list_idx+1 >= u->list_size)
170 ++ return;
171 ++
172 ++ u->list_base[u->list_idx].name = 0;
173 ++ u->list_base[u->list_idx].family = AF_INET;
174 ++ u->list_base[u->list_idx].addr[0] = ipv4->address;
175 ++ u->list_base[u->list_idx].scopeid = 0;
176 ++ if (u->list_idx > 0) u->list_base[u->list_idx-1].next = &u->list_base[u->list_idx];
177 ++ u->list_base[u->list_idx].next = 0;
178 ++ u->list_idx += 1;
179 ++}
180 + #endif
181 +
182 + #ifndef NSS_IPV4_ONLY
183 +@@ -106,6 +132,21 @@
184 + u->data.ipv6[u->count++] = *ipv6;
185 + u->data_len += sizeof(ipv6_address_t);
186 + }
187 ++static void ipv6_gai_callback(const ipv6_address_t *ipv6, void *userdata) {
188 ++ struct user_gai_buf *u = userdata;
189 ++ assert(ipv6 && userdata);
190 ++
191 ++ if (u->list_idx+1 >= u->list_size)
192 ++ return;
193 ++
194 ++ u->list_base[u->list_idx].name = 0;
195 ++ u->list_base[u->list_idx].family = AF_INET6;
196 ++ memcpy(u->list_base[u->list_idx].addr, ipv6->address, sizeof(u->list_base[u->list_idx].addr));
197 ++ u->list_base[u->list_idx].scopeid = ipv6->if_idx;
198 ++ if (u->list_idx > 0) u->list_base[u->list_idx-1].next = &u->list_base[u->list_idx];
199 ++ u->list_base[u->list_idx].next = 0;
200 ++ u->list_idx += 1;
201 ++}
202 + #endif
203 +
204 + static void name_callback(const char*name, void *userdata) {
205 +@@ -538,6 +579,265 @@
206 +
207 + status = NSS_STATUS_SUCCESS;
208 +
209 ++finish:
210 ++#ifdef ENABLE_LEGACY
211 ++ if (fd >= 0)
212 ++ close(fd);
213 ++#endif
214 ++
215 ++ return status;
216 ++}
217 ++
218 ++enum nss_status _nss_mdns_gethostbyname4_r(
219 ++ const char *name,
220 ++ struct gaih_addrtuple **pat,
221 ++ char *buffer,
222 ++ size_t buflen,
223 ++ int *errnop,
224 ++ int *h_errnop,
225 ++ int32_t *ttlp) {
226 ++
227 ++ struct user_gai_buf u;
228 ++ enum nss_status status = NSS_STATUS_UNAVAIL;
229 ++ int i;
230 ++ size_t l, idx;
231 ++ void (*ipv4_func)(const ipv4_address_t *ipv4, void *userdata);
232 ++ void (*ipv6_func)(const ipv6_address_t *ipv6, void *userdata);
233 ++ int name_allowed;
234 ++ int af = AF_UNSPEC;
235 ++
236 ++#ifdef ENABLE_AVAHI
237 ++ int avahi_works = 1;
238 ++ void * data[32];
239 ++#endif
240 ++
241 ++#ifdef ENABLE_LEGACY
242 ++ int fd = -1;
243 ++#endif
244 ++
245 ++ if (pat) {
246 ++ af = (*pat)->family;
247 ++ }
248 ++
249 ++/* DEBUG_TRAP; */
250 ++
251 ++#ifdef NSS_IPV6_ONLY
252 ++ if (af == AF_UNSPEC)
253 ++ af = AF_INET6;
254 ++#endif
255 ++
256 ++#ifdef NSS_IPV4_ONLY
257 ++ if (af == AF_UNSPEC)
258 ++ af = AF_INET;
259 ++#endif
260 ++
261 ++#ifdef NSS_IPV4_ONLY
262 ++ if (af != AF_INET)
263 ++#elif NSS_IPV6_ONLY
264 ++ if (af != AF_INET6)
265 ++#else
266 ++ if (af != AF_INET && af != AF_INET6 && af != AF_UNSPEC)
267 ++#endif
268 ++ {
269 ++ *errnop = EINVAL;
270 ++ *h_errnop = NO_RECOVERY;
271 ++
272 ++ goto finish;
273 ++ }
274 ++
275 ++ if (buflen <
276 ++ sizeof(struct gaih_addrtuple)) {
277 ++
278 ++ *errnop = ERANGE;
279 ++ *h_errnop = NO_RECOVERY;
280 ++ status = NSS_STATUS_TRYAGAIN;
281 ++
282 ++ goto finish;
283 ++ }
284 ++
285 ++ u.list_base = (struct user_gai_buf*) buffer;
286 ++ u.list_size = buflen / sizeof( struct user_gai_buf );
287 ++ u.list_idx = 0;
288 ++ u.wrote_name = 0;
289 ++
290 ++#ifdef NSS_IPV6_ONLY
291 ++ ipv4_func = NULL;
292 ++#else
293 ++ ipv4_func = (af == AF_INET || af == AF_UNSPEC) ? ipv4_gai_callback : NULL;
294 ++#endif
295 ++
296 ++#ifdef NSS_IPV4_ONLY
297 ++ ipv6_func = NULL;
298 ++#else
299 ++ ipv6_func = (af == AF_INET6 || af == AF_UNSPEC) ? ipv6_gai_callback : NULL;
300 ++#endif
301 ++
302 ++ name_allowed = verify_name_allowed(name);
303 ++
304 ++#ifdef ENABLE_AVAHI
305 ++
306 ++ if (avahi_works && name_allowed) {
307 ++ int r;
308 ++
309 ++ if (af == AF_INET || af == AF_UNSPEC) {
310 ++ if ((r = avahi_resolve_name(AF_INET, name, data)) < 0)
311 ++ avahi_works = 0;
312 ++ else if (r == 0) {
313 ++ if (ipv4_func) {
314 ++ ipv4_func((ipv4_address_t*) data, &u);
315 ++ }
316 ++ }
317 ++ else
318 ++ status = NSS_STATUS_NOTFOUND;
319 ++ }
320 ++ if (af == AF_INET6 || af == AF_UNSPEC) {
321 ++ if ((r = avahi_resolve_name(AF_INET6, name, data)) < 0)
322 ++ avahi_works = 0;
323 ++ else if (r == 0) {
324 ++ if (ipv6_func)
325 ++ ipv6_func((ipv6_address_t*)data, &u);
326 ++ }
327 ++ else
328 ++ status = NSS_STATUS_NOTFOUND;
329 ++ }
330 ++ }
331 ++
332 ++#ifdef HONOUR_SEARCH_DOMAINS
333 ++ if (u.list_idx == 0 && avahi_works && !ends_with(name, ".")) {
334 ++ char **domains;
335 ++
336 ++ if ((domains = get_search_domains())) {
337 ++ char **p;
338 ++
339 ++ /* Try to concatenate host names */
340 ++ for (p = domains; *p; p++) {
341 ++ int fullnamesize;
342 ++ char *fullname;
343 ++
344 ++ fullnamesize = strlen(name) + strlen(*p) + 2;
345 ++
346 ++ if (!(fullname = malloc(fullnamesize)))
347 ++ break;
348 ++
349 ++ snprintf(fullname, fullnamesize, "%s.%s", name, *p);
350 ++
351 ++ if (verify_name_allowed(fullname)) {
352 ++ int r;
353 ++
354 ++ if (af == AF_INET || af == AF_UNSPEC) {
355 ++ r = avahi_resolve_name(AF_INET, fullname, data);
356 ++
357 ++ if (r < 0) {
358 ++ /* Lookup failed */
359 ++ avahi_works = 0;
360 ++ free(fullname);
361 ++ break;
362 ++ } else if (r == 0) {
363 ++ /* Lookup succeeded */
364 ++ if (ipv4_func)
365 ++ ipv4_func((ipv4_address_t*) data, &u);
366 ++ }
367 ++ }
368 ++ if (af == AF_INET6 || af == AF_UNSPEC) {
369 ++ r = avahi_resolve_name(AF_INET6, fullname, data);
370 ++
371 ++ if (r < 0) {
372 ++ /* Lookup failed */
373 ++ avahi_works = 0;
374 ++ free(fullname);
375 ++ break;
376 ++ } else if (r == 0) {
377 ++ /* Lookup succeeded */
378 ++ if (ipv6_func)
379 ++ ipv6_func((ipv6_address_t*)data, &u);
380 ++ }
381 ++ }
382 ++ free(fullname);
383 ++ if (u.list_idx > 0) break;
384 ++
385 ++ } else
386 ++ free(fullname);
387 ++ }
388 ++
389 ++ free_domains(domains);
390 ++ }
391 ++ }
392 ++#endif /* HONOUR_SEARCH_DOMAINS */
393 ++#endif /* ENABLE_AVAHI */
394 ++
395 ++#if defined(ENABLE_LEGACY) && defined(ENABLE_AVAHI)
396 ++ if (u.list_idx == 0 && !avahi_works)
397 ++#endif
398 ++
399 ++#if defined(ENABLE_LEGACY)
400 ++ {
401 ++ if ((fd = mdns_open_socket()) < 0) {
402 ++ *errnop = errno;
403 ++ *h_errnop = NO_RECOVERY;
404 ++ goto finish;
405 ++ }
406 ++
407 ++ if (name_allowed) {
408 ++ /* Ignore return value */
409 ++ mdns_query_name(fd, name, ipv4_func, ipv6_func, &u);
410 ++
411 ++ if (!u.list_idx)
412 ++ status = NSS_STATUS_NOTFOUND;
413 ++ }
414 ++
415 ++#ifdef HONOUR_SEARCH_DOMAINS
416 ++ if (u.list_idx == 0 && !ends_with(name, ".")) {
417 ++ char **domains;
418 ++
419 ++ /* Try the search domains if the user did not use a traling '.' */
420 ++
421 ++ if ((domains = get_search_domains())) {
422 ++ char **p;
423 ++
424 ++ for (p = domains; *p; p++) {
425 ++ int fullnamesize = 0;
426 ++ char *fullname = NULL;
427 ++
428 ++ fullnamesize = strlen(name) + strlen(*p) + 2;
429 ++ if (!(fullname = malloc(fullnamesize)))
430 ++ break;
431 ++
432 ++ snprintf(fullname, fullnamesize, "%s.%s", name, *p);
433 ++
434 ++ if (verify_name_allowed(fullname)) {
435 ++
436 ++ /* Ignore return value */
437 ++ mdns_query_name(fd, fullname, ipv4_func, ipv6_func, &u);
438 ++
439 ++ if (u.list_idx > 0) {
440 ++ /* We found something, so let's quit */
441 ++ free(fullname);
442 ++ break;
443 ++ } else
444 ++ status = NSS_STATUS_NOTFOUND;
445 ++
446 ++ }
447 ++
448 ++ free(fullname);
449 ++ }
450 ++
451 ++ free_domains(domains);
452 ++ }
453 ++ }
454 ++#endif /* HONOUR_SEARCH_DOMAINS */
455 ++ }
456 ++#endif /* ENABLE_LEGACY */
457 ++
458 ++ if (u.list_idx == 0) {
459 ++ *errnop = ETIMEDOUT;
460 ++ *h_errnop = HOST_NOT_FOUND;
461 ++ goto finish;
462 ++ }
463 ++
464 ++ *pat = (struct gaih_addrtuple*) buffer;
465 ++
466 ++ status = NSS_STATUS_SUCCESS;
467 ++
468 + finish:
469 + #ifdef ENABLE_LEGACY
470 + if (fd >= 0)
471 +diff -u src/query.c src/query.c
472 +--- src/query.c 2007-02-09 00:42:23.000000000 +0800
473 ++++ src/query.c 2013-01-04 09:57:03.778972196 +0800
474 +@@ -263,7 +263,7 @@
475 + return n_sent;
476 + }
477 +
478 +-static int recv_dns_packet(int fd, struct dns_packet **ret_packet, uint8_t *ret_ttl, struct timeval *end) {
479 ++static int recv_dns_packet(int fd, struct dns_packet **ret_packet, uint8_t *ret_ttl, uint32_t *if_idx, struct timeval *end) {
480 + struct dns_packet *p= NULL;
481 + struct msghdr msg;
482 + struct iovec io;
483 +@@ -286,6 +286,10 @@
484 + msg.msg_controllen = sizeof(aux);
485 + msg.msg_flags = 0;
486 +
487 ++#ifndef IP_PKTINFO
488 ++ *if_idx = 0;
489 ++#endif
490 ++
491 + for (;;) {
492 + ssize_t l;
493 + int r;
494 +@@ -304,6 +308,14 @@
495 + *ret_ttl = (uint8_t) (*(uint32_t*) CMSG_DATA(cmsg));
496 + break;
497 + }
498 ++#ifdef IP_PKTINFO
499 ++ if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_PKTINFO)
500 ++ {
501 ++ *if_idx = ((struct in_pktinfo*) CMSG_DATA(cmsg))->ipi_ifindex;
502 ++ break;
503 ++ }
504 ++#endif
505 ++
506 + }
507 +
508 + if (!cmsg)
509 +@@ -427,9 +439,10 @@
510 +
511 + while (!done) {
512 + uint8_t ttl;
513 ++ uint32_t if_idx;
514 + int r;
515 +
516 +- if ((r = recv_dns_packet(fd, &p, &ttl, &end)) < 0)
517 ++ if ((r = recv_dns_packet(fd, &p, &ttl, &if_idx, &end)) < 0)
518 + return -1;
519 + else if (r > 0) /* timeout */
520 + return 1;
521 +@@ -488,6 +501,7 @@
522 + rdlength == sizeof(ipv6_address_t)) {
523 +
524 + ipv6_address_t ipv6;
525 ++ ipv6.if_idx = if_idx;
526 +
527 + if (dns_packet_consume_bytes(p, &ipv6, sizeof(ipv6_address_t)) < 0)
528 + break;
529 +@@ -584,9 +598,10 @@
530 +
531 + while (!done) {
532 + uint8_t ttl;
533 ++ uint32_t if_idx;
534 + int r;
535 +
536 +- if ((r = recv_dns_packet(fd, &p, &ttl, &end)) < 0)
537 ++ if ((r = recv_dns_packet(fd, &p, &ttl, &if_idx, &end)) < 0)
538 + return -1;
539 + else if (r > 0) /* timeout */
540 + return 1;
541 +diff -u src/query.h src/query.h
542 +--- src/query.h 2005-06-21 22:43:23.000000000 +0800
543 ++++ src/query.h 2013-01-03 14:09:22.138018327 +0800
544 +@@ -30,6 +30,7 @@
545 +
546 + typedef struct {
547 + uint8_t address[16];
548 ++ uint32_t if_idx;
549 + } ipv6_address_t;
550 +
551
552 diff --git a/sys-auth/nss-mdns/nss-mdns-0.10-r2.ebuild b/sys-auth/nss-mdns/nss-mdns-0.10-r3.ebuild
553 similarity index 92%
554 rename from sys-auth/nss-mdns/nss-mdns-0.10-r2.ebuild
555 rename to sys-auth/nss-mdns/nss-mdns-0.10-r3.ebuild
556 index 5255cd1..3be4d71 100644
557 --- a/sys-auth/nss-mdns/nss-mdns-0.10-r2.ebuild
558 +++ b/sys-auth/nss-mdns/nss-mdns-0.10-r3.ebuild
559 @@ -1,4 +1,4 @@
560 -# Copyright 1999-2015 Gentoo Foundation
561 +# Copyright 1999-2016 Gentoo Foundation
562 # Distributed under the terms of the GNU General Public License v2
563 # $Id$
564
565 @@ -23,7 +23,8 @@ RDEPEND="${RDEPEND}
566 )"
567
568 src_prepare() {
569 - epatch "${FILESDIR}"/${PN}-0.10-avahi-socket.patch
570 + epatch "${FILESDIR}"/${PN}-0.10-avahi-socket.patch \
571 + "${FILESDIR}"/${PN}-0.10-ipv6.patch
572 epatch_user
573 eautoreconf
574 }