* Ignore services in nsswitch.conf that cannot be found (like
"mdns4_mininal" on Ubuntu). This is a fix for NIXPKGS-79. It doesn't *quite* fix the problem in all cases (there might be people actually using mDNS; they should just run the "nscd" daemon) but at least it should keep curl from failing in Nixpkgs downloads. svn path=/nixpkgs/branches/stdenv-updates/; revision=11487
This commit is contained in:
parent
4195c1522f
commit
7d96471775
@ -16,6 +16,31 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
inherit (stdenv) is64bit;
|
inherit (stdenv) is64bit;
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
/* Fix for NIXPKGS-79: when doing host name lookups, when
|
||||||
|
nsswitch.conf contains a line like
|
||||||
|
|
||||||
|
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
|
||||||
|
|
||||||
|
don't return an error when mdns4_minimal can't be found. This
|
||||||
|
is a bug in Glibc: when a service can't be found, NSS should
|
||||||
|
continue to the next service unless "UNAVAIL=return" is set.
|
||||||
|
("NOTFOUND=return" refers to the service returning a NOTFOUND
|
||||||
|
error, not the service itself not being found.) The reason is
|
||||||
|
that the "status" variable (while initialised to UNAVAIL) is
|
||||||
|
outside of the loop that iterates over the services, the
|
||||||
|
"files" service sets status to NOTFOUND. So when the call to
|
||||||
|
find "mdns4_minimal" fails, "status" will still be NOTFOUND,
|
||||||
|
and it will return instead of continuing to "dns". Thus, the
|
||||||
|
line
|
||||||
|
|
||||||
|
hosts: mdns4_minimal [NOTFOUND=return] dns mdns4
|
||||||
|
|
||||||
|
does work because "status" will contain UNAVAIL after the
|
||||||
|
failure to find mdns4_minimal. */
|
||||||
|
./nss-skip-unavail.patch
|
||||||
|
];
|
||||||
|
|
||||||
# `--with-tls --without-__thread' enables support for TLS but causes
|
# `--with-tls --without-__thread' enables support for TLS but causes
|
||||||
# it not to be used. Required if we don't want to barf on 2.4
|
# it not to be used. Required if we don't want to barf on 2.4
|
||||||
# kernels. Or something.
|
# kernels. Or something.
|
||||||
|
25
pkgs/development/libraries/glibc-2.7/nss-skip-unavail.patch
Normal file
25
pkgs/development/libraries/glibc-2.7/nss-skip-unavail.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
diff -rc glibc-2.7-orig/sysdeps/posix/getaddrinfo.c glibc-2.7/sysdeps/posix/getaddrinfo.c
|
||||||
|
*** glibc-2.7-orig/sysdeps/posix/getaddrinfo.c 2007-10-17 18:05:12.000000000 +0200
|
||||||
|
--- glibc-2.7/sysdeps/posix/getaddrinfo.c 2008-04-08 12:17:09.000000000 +0200
|
||||||
|
***************
|
||||||
|
*** 498,505 ****
|
||||||
|
int no_data = 0;
|
||||||
|
int no_inet6_data = 0;
|
||||||
|
service_user *nip = NULL;
|
||||||
|
- enum nss_status inet6_status = NSS_STATUS_UNAVAIL;
|
||||||
|
- enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
|
int no_more;
|
||||||
|
int old_res_options;
|
||||||
|
|
||||||
|
--- 498,503 ----
|
||||||
|
***************
|
||||||
|
*** 689,694 ****
|
||||||
|
--- 687,694 ----
|
||||||
|
|
||||||
|
while (!no_more)
|
||||||
|
{
|
||||||
|
+ enum nss_status inet6_status = NSS_STATUS_UNAVAIL;
|
||||||
|
+ enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
|
nss_gethostbyname3_r fct = NULL;
|
||||||
|
if (req->ai_flags & AI_CANONNAME)
|
||||||
|
/* No need to use this function if we do not look for
|
Loading…
Reference in New Issue
Block a user