summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/tools/networking/nss-myhostname/default.nix19
-rw-r--r--pkgs/tools/networking/nss-myhostname/ignore-ipv6-link-local.patch13
-rw-r--r--pkgs/tools/networking/nss-myhostname/nscd-segfault.patch15
-rw-r--r--pkgs/top-level/all-packages.nix2
4 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/tools/networking/nss-myhostname/default.nix b/pkgs/tools/networking/nss-myhostname/default.nix
new file mode 100644
index 00000000000..80296b0d992
--- /dev/null
+++ b/pkgs/tools/networking/nss-myhostname/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "nss-myhostname-0.3";
+
+  src = fetchurl {
+    url = "http://0pointer.de/lennart/projects/nss-myhostname/${name}.tar.gz";
+    sha256 = "1wnawxklsv3z796l752j7a21gvj2615fk12qr1bir3apipm499rb";
+  };
+
+  patches = [ ./nscd-segfault.patch ./ignore-ipv6-link-local.patch ];
+
+  meta = {
+    description = "Name Service Switch module ensuring that the hostname always resolves to a valid address";
+    homepage = http://0pointer.de/lennart/projects/nss-myhostname/;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/nss-myhostname/ignore-ipv6-link-local.patch b/pkgs/tools/networking/nss-myhostname/ignore-ipv6-link-local.patch
new file mode 100644
index 00000000000..396bb2e10cc
--- /dev/null
+++ b/pkgs/tools/networking/nss-myhostname/ignore-ipv6-link-local.patch
@@ -0,0 +1,13 @@
+--- nss-myhostname-0.3/netlink.c	2011-05-09 08:56:34.344579140 -0400
++++ nss-myhostname-0.3-new/netlink.c	2012-10-06 23:52:10.577755588 -0400
+@@ -179,6 +179,10 @@
+                             ifaddrmsg->ifa_scope == RT_SCOPE_NOWHERE)
+                                 continue;
+ 
++                        if (ifaddrmsg->ifa_family == AF_INET6 &&
++                            ifaddrmsg->ifa_scope == RT_SCOPE_LINK)
++                                continue;
++
+                         if (ifaddrmsg->ifa_flags & IFA_F_DEPRECATED)
+                                 continue;
+ 
diff --git a/pkgs/tools/networking/nss-myhostname/nscd-segfault.patch b/pkgs/tools/networking/nss-myhostname/nscd-segfault.patch
new file mode 100644
index 00000000000..a2947461c87
--- /dev/null
+++ b/pkgs/tools/networking/nss-myhostname/nscd-segfault.patch
@@ -0,0 +1,15 @@
+--- nss-myhostname-0.3/nss-myhostname.c	2011-05-09 09:01:27.421581560 -0400
++++ nss-myhostname-0.3-new/nss-myhostname.c	2012-10-06 23:40:09.836894004 -0400
+@@ -177,7 +177,11 @@
+         /* Verify the size matches */
+         assert(idx == ms);
+ 
+-        *pat = r_tuple_prev;
++        /* Nscd expects us to store the first record in **pat. */
++        if (*pat)
++                **pat = *r_tuple_prev;
++        else
++                *pat = r_tuple_prev;
+ 
+         if (ttlp)
+                 *ttlp = 0;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 28848c19168..5a5fc5e2fb8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1165,6 +1165,8 @@ let
     inherit (pythonPackages) pysqlite;
   };
 
+  nss_myhostname = callPackage ../tools/networking/nss-myhostname {};
+
   nss_pam_ldapd = callPackage ../tools/networking/nss-pam-ldapd {};
 
   ntfs3g = callPackage ../tools/filesystems/ntfs-3g { };