diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | NEWS | 7 | ||||
-rw-r--r-- | include/ifaddrs.h | 3 | ||||
-rw-r--r-- | nptl/ChangeLog | 6 | ||||
-rw-r--r-- | nptl/descr.h | 2 | ||||
-rw-r--r-- | sysdeps/posix/getaddrinfo.c | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/check_pf.c | 12 |
7 files changed, 42 insertions, 9 deletions
@@ -1,3 +1,12 @@ +2006-09-24 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (rfc3484_sort): Implement rule 4, + home addresses. + * sysdeps/unix/sysv/linux/check_pf.c (make_request): Recognize + IFA_F_HOMEADDRESS flag for interfaces. + * include/ifaddrs.h (struct in6addrinfo): Define + in6ai_homeaddress. + 2006-09-21 Jakub Jelinek <jakub@redhat.com> [BZ #3225] @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2006-08-14 +GNU C Library NEWS -- history of user-visible changes. 2006-09-24 Copyright (C) 1992-2002,2003,2004,2005,2006 Free Software Foundation, Inc. See the end for copying conditions. @@ -8,7 +8,8 @@ using `glibc' in the "product" field. Version 2.5 * For Linux, the sorting of addresses returned by getaddrinfo now also - handles rules 3 and 7 from RFC 3484. Implemented by Ulrich Drepper. + handles rules 3, 4, and 7 from RFC 3484. I.e., all rules are handled. + Implemented by Ulrich Drepper. * Allow system admin to configure getaddrinfo with the /etc/gai.conf file. Implemented by Ulrich Drepper. @@ -20,7 +21,7 @@ Version 2.5 * For sites with broken group and/or passwd database, the auto-propagate option of nscd can prevent creating ID lookup entries from the results of a name lookup and vice versa. This usually is no problem but some - site might have problems with default behavior. + site might have problems with the default behavior. Implemented by Ulrich Drepper. * Iterating over entire database in NIS can be slow. With the diff --git a/include/ifaddrs.h b/include/ifaddrs.h index d790fcb..71bdaeb 100644 --- a/include/ifaddrs.h +++ b/include/ifaddrs.h @@ -10,7 +10,8 @@ struct in6addrinfo { enum { in6ai_deprecated = 1, - in6ai_temporary = 2 + in6ai_temporary = 2, + in6ai_homeaddress = 4 } flags; uint32_t addr[4]; }; diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 94618d9..f96101a 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2006-09-24 Ulrich Drepper <drepper@redhat.com> + + [BZ #3251] + * descr.h (ENQUEUE_MUTEX_BOTH): Add cast to avoid warning. + Patch by Petr Baudis. + 2006-09-18 Jakub Jelinek <jakub@redhat.com> * tst-kill4.c (do_test): Explicitly set tf thread's stack size. diff --git a/nptl/descr.h b/nptl/descr.h index b9b9ed7..321ce85 100644 --- a/nptl/descr.h +++ b/nptl/descr.h @@ -201,7 +201,7 @@ struct pthread mutex->__data.__list.__next \ = THREAD_GETMEM (THREAD_SELF, robust_list.__next); \ THREAD_SETMEM (THREAD_SELF, robust_list.__next, \ - ((uintptr_t) &mutex->__data.__list) | val); \ + (void *) (((uintptr_t) &mutex->__data.__list) | val)); \ } while (0) # define DEQUEUE_MUTEX(mutex) \ do { \ diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 185957b..dd5a57d 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -1390,8 +1390,16 @@ rfc3484_sort (const void *p1, const void *p2) return 1; } - /* Rule 4: Prefer home addresses. - Another thing only the kernel can decide. */ + /* Rule 4: Prefer home addresses. */ + if (a1->got_source_addr) + { + if (!(a1->source_addr_flags & in6ai_homeaddress) + && (a2->source_addr_flags & in6ai_homeaddress)) + return -1; + if ((a1->source_addr_flags & in6ai_homeaddress) + && !(a2->source_addr_flags & in6ai_homeaddress)) + return 1; + } /* Rule 5: Prefer matching label. */ if (a1->got_source_addr) diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c index 7fbb754..13ccd7a 100644 --- a/sysdeps/unix/sysv/linux/check_pf.c +++ b/sysdeps/unix/sysv/linux/check_pf.c @@ -38,6 +38,9 @@ #ifndef IFA_F_TEMPORARY # define IFA_F_TEMPORARY IFA_F_SECONDARY #endif +#ifndef IFA_F_HOMEADDRESS +# define IFA_F_HOMEADDRESS 0 +#endif static int @@ -124,7 +127,9 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, case AF_INET6: *seen_ipv6 = true; - if (ifam->ifa_flags & (IFA_F_DEPRECATED | IFA_F_TEMPORARY)) + if (ifam->ifa_flags & (IFA_F_DEPRECATED + | IFA_F_TEMPORARY + | IFA_F_HOMEADDRESS)) { struct rtattr *rta = IFA_RTA (ifam); size_t len = (nlmh->nlmsg_len @@ -152,7 +157,10 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, ? in6ai_deprecated : 0) | ((ifam->ifa_flags & IFA_F_TEMPORARY) - ? in6ai_temporary : 0)); + ? in6ai_temporary : 0) + | ((ifam->ifa_flags + & IFA_F_HOMEADDRESS) + ? in6ai_homeaddress : 0)); memcpy (newp->info.addr, address ?: local, sizeof (newp->info.addr)); newp->next = in6ailist; |