Subject: [PATCH] gnu: nss-pam-ldap: Look for nslcd.conf in global /etc/ directory.

From: Ricardo Wurmus <[email-masked]>
Date: Tue, 25 Apr 2017 14:25:31 +0200

* gnu/packages/openldap.scm (nss-pam-ldapd)[arguments]: Set
"--with-ldap-conf-file" to look for global configuration file; add build phase
to install example configuration file in the package output directory.
---
 gnu/packages/openldap.scm | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index b67510647..61f7a9469 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -94,8 +94,23 @@
      `(#:configure-flags
        (list (string-append "--with-pam-seclib-dir="
                             (assoc-ref %outputs "out") "/lib/security/")
-             (string-append "--with-ldap-conf-file="
-                            (assoc-ref %outputs "out") "/etc/nslcd.conf"))))
+             ;; nslcd cannot be convinced to look at run-time for its
+             ;; configuration file at a location that differs from the
+             ;; configured location.
+             "--with-ldap-conf-file=/etc/nslcd.conf")
+       #:phases
+       (modify-phases %standard-phases
+         ;; This is necessary because we tell nslcd with configure flags that
+         ;; it should look for its configuration file at /etc/nslcd.conf.  The
+         ;; build system tries to install a default configuration to that very
+         ;; location.
+         (add-after 'unpack 'override-nslcd.conf-install-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "Makefile.in"
+               (("\\$\\(DESTDIR\\)\\$\\(NSLCD_CONF_PATH\\)")
+                (string-append (assoc-ref outputs "out")
+                               "/etc/nslcd.conf.example")))
+             #t)))))
     (inputs
      `(("linux-pam" ,linux-pam)
        ("openldap" ,openldap)
-- 
2.11.1