Package: nslcd
Version: 0.7.6
Severity: wishlist
Tags: patch
I provide a patch to start k5start when nslcd is configured for SASL
GSSAPI kerberos authentication.
Here is my changelog:
Handle kerberos ticket cache creation with k5start.
* debian/nslcd.init (NSLCD_DEFAULT): Default configuration file.
Add kerberos specific options: K5START_DESC, K5START_BIN,
K5START_PIDFILE, KRB5_PRINCIPAL, KRB5_KEYTAB, KRB5_CCREFRESH, KRB5_MODE.
Take care of badly configured nslcd.conf: use_sasl requires
sasl_mech=GSSAPI wich requires k5start binary.
Restrict tiket cache type to file based.
Start k5start before starting nslcd.
Stop k5start after stopping nslcd.
* debian/nslcd.default: Kerberos configuration used by init script.
* debian/nslcd.conffile: Put nslcd.default in /etc/default/.
* debian/control (Recommends): Add k5start.
Regards.
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable'), (90, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.33.2+hati.1 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages nslcd depends on:
ii adduser 3.112 add and remove users and groups
ii debconf [debconf-2.0] 1.5.32 Debian configuration management sy
ii libc6 2.11.1-3 Embedded GNU C Library: Shared lib
ii libgssapi-krb5-2 1.8.1+dfsg-5 MIT Kerberos runtime libraries - k
ii libldap-2.4-2 2.4.21-1 OpenLDAP libraries
Versions of packages nslcd recommends:
pn libnss-ldapd <none> (no description available)
pn libpam-ldapd <none> (no description available)
pn nscd <none> (no description available)
nslcd suggests no packages.
-- debconf information:
nslcd/ldap-starttls: false
nslcd/ldap-reqcert:
* nslcd/ldap-uris: ldap://127.0.0.1/
nslcd/ldap-binddn:
* nslcd/ldap-base: dc=baby-gnu,dc=org
--
Daniel Dehennin
Récupérer ma clef GPG:
gpg --keyserver pgp.mit.edu --recv-keys 0x6A2540D1
=== modified file 'debian/control'
--- debian/control 2010-05-26 20:07:49 +0000
+++ debian/control 2010-06-12 16:26:45 +0000
@@ -12,7 +12,7 @@
Package: nslcd
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, adduser
-Recommends: nscd, libnss-ldapd, libpam-ldapd
+Recommends: nscd, libnss-ldapd, libpam-ldapd, k5start
Conflicts: libnss-ldapd (<< 0.7.0)
Description: Daemon for NSS and PAM lookups using LDAP
This package provides a daemon for retrieving user account, and other
=== added file 'debian/nslcd.conffile'
--- debian/nslcd.conffile 1970-01-01 00:00:00 +0000
+++ debian/nslcd.conffile 2010-06-12 16:19:55 +0000
@@ -0,0 +1,1 @@
+nslcd.default /etc/default/nslcd
=== added file 'debian/nslcd.default'
--- debian/nslcd.default 1970-01-01 00:00:00 +0000
+++ debian/nslcd.default 2010-06-12 16:19:44 +0000
@@ -0,0 +1,5 @@
+# Kerberos configuration
+# KRB5_PRINCIPAL="host/$(hostname -f)"
+# KRB5_KEYTAB=/etc/krb5.keytab
+# KRB5_CCREFRESH=60
+# KRB5_MODE=600
=== modified file 'debian/nslcd.init'
--- debian/nslcd.init 2010-05-23 18:33:56 +0000
+++ debian/nslcd.init 2010-06-12 16:24:26 +0000
@@ -36,6 +36,7 @@
NSLCD_BIN=/usr/sbin/nslcd
NSLCD_DESC="LDAP connection daemon"
NSLCD_CFG=/etc/nslcd.conf
+NSLCD_DEFAULT=/etc/default/nslcd
[ -x "$NSLCD_BIN" ] || exit 0
[ -f "$NSLCD_CFG" ] || exit 0
@@ -45,10 +46,107 @@
NSLCD_STATEDIR=/var/run/nslcd
NSLCD_PIDFILE=$NSLCD_STATEDIR/nslcd.pid
+# Kerberos default
+K5START_DESC="Keep alive Kerberos ticket"
+K5START_BIN=/usr/bin/k5start
+K5START_PIDFILE=$NSLCD_STATEDIR/k5start_nslcd.pid
+KRB5_PRINCIPAL="host/$(hostname -f)"
+KRB5_KEYTAB=/etc/krb5.keytab
+KRB5_CCREFRESH=60
+KRB5_MODE=600
+KRB5_CACHEOPT=""
+
+# Get info from config file
+NSLCD_USER=$(grep '^uid' "$NSLCD_CFG" | cut -d' ' -f 2)
+NSLCD_GROUP=$(grep '^gid' "$NSLCD_CFG" | cut -d' ' -f 2)
+USE_SASL=$(grep '^use_sasl' "$NSLCD_CFG" | cut -d' ' -f 2)
+SASL_MECH=$(grep '^sasl_mech' "$NSLCD_CFG" | cut -d' ' -f 2)
+KRB5_CCNAME=$(grep '^krb5_ccname' "$NSLCD_CFG" | cut -d' ' -f 2)
+# cache TYPE:
+KRB5_CCTYPE=${KRB5_CCNAME%:*}
+# Remove TYPE: to delete it after stop
+KRB5_CCNAME=${KRB5_CCNAME#*:}
+
+# no TYPE: is defaulted to file based
+[ -n "$KRB5_CCNAME" ] && [ "$KRB5_CCNAME" = "$KRB5_CCTYPE" ] && KRB5_CCTYPE=""
+
+[ -f "$NSLCD_DEFAULT" ] && . "$NSLCD_DEFAULT"
+
+# Check SASL usage
+if [ -n "$USE_SASL" ]
+then
+ if [ "$SASL_MECH" = "GSSAPI" ]
+ then
+ if [ ! -x "$K5START_BIN" ]
+ then
+ log_failure_msg "SASL GSSAPI Kerberos is configure but k5start is missing"
+ exit 1
+ fi
+ if [ -n "$KRB5_CCTYPE" ] && [ "$KRB5_CCTYPE" != "FILE" ]
+ then
+ # k5start need an environnement variable for non file base cache
+ # when nslcd will support other types
+ # export KRB5CCNAME="${KRB5_CCTYPE}:${KRB5_CCNAME}"
+ log_failure_msg "nslcd supports only file base kerberos ticket cache"
+ exit 1
+ else
+ # Specify -k option for file based cache
+ KRB5_CACHEOPT="-k $KRB5_CCNAME -o $NSLCD_USER -g $NSLCD_GROUP -m $KRB5_MODE"
+ fi
+ else
+ log_failure_msg "SASL is configured with unsupported mech: $SASL_MECH"
+ exit 1
+ fi
+fi
+
+k5start_start()
+{
+
+ # Kerberos authentication works only if the 3 options are sets
+ if [ -n "$USE_SASL" ] && [ "$SASL_MECH" = "GSSAPI" ] && [ -n "$KRB5_CCNAME" ]
+ then
+ log_daemon_msg "Starting $K5START_DESC" "k5start"
+ start-stop-daemon --start \
+ --pidfile $K5START_PIDFILE \
+ --exec $K5START_BIN -- -b -p $K5START_PIDFILE \
+ -K $KRB5_CCREFRESH \
+ -u $KRB5_PRINCIPAL \
+ -f $KRB5_KEYTAB \
+ $KRB5_CACHEOPT
+ log_end_msg $?
+ fi
+}
+
+k5start_stop()
+{
+ if [ -f "$K5START_PIDFILE" ]
+ then
+ log_daemon_msg "Stopping $K5START_DESC" "k5start"
+ start-stop-daemon --stop --oknodo --pidfile $K5START_PIDFILE
+ log_end_msg $?
+ [ -n "$K5START_PIDFILE" ] && rm -f $K5START_PIDFILE
+ [ -f "$KRB5_CCNAME" ] && rm -f $KRB5_CCNAME
+ fi
+}
+
+k5start_status()
+{
+ if [ -n "$USE_SASL" ] && [ "$SASL_MECH" = "GSSAPI" ] && [ -n "$KRB5_CCNAME" ]
+ then
+ if [ -f "$K5START_PIDFILE" ]
+ then
+ status_of_proc -p "$K5START_PIDFILE" "$K5START_BIN" "k5start"
+ else
+ log_failure_msg "SASL GSSAPI Kerberos configured but no pid file for k5start"
+ fi
+ fi
+}
+
case "$1" in
start)
[ -d "$NSLCD_STATEDIR" ] || ( mkdir -m 755 "$NSLCD_STATEDIR" ; \
chown nslcd:nslcd "$NSLCD_STATEDIR" )
+ k5start_start
log_daemon_msg "Starting $NSLCD_DESC" "nslcd"
start-stop-daemon --start --oknodo \
--pidfile $NSLCD_PIDFILE \
@@ -62,6 +160,7 @@
--name nslcd
log_end_msg $?
[ -n "$NSLCD_PIDFILE" ] && rm -f $NSLCD_PIDFILE
+ k5start_stop
;;
restart|force-reload)
[ -d "$NSLCD_STATEDIR" ] || ( mkdir -m 755 "$NSLCD_STATEDIR" ; \
@@ -71,12 +170,15 @@
--pidfile $NSLCD_PIDFILE \
--name nslcd
[ -n "$NSLCD_PIDFILE" ] && rm -f $NSLCD_PIDFILE
+ k5start_stop
+ k5start_start
start-stop-daemon --start \
--pidfile $NSLCD_PIDFILE \
--startas $NSLCD_BIN
log_end_msg $?
;;
status)
+ k5start_status
if [ -f "$NSLCD_PIDFILE" ]
then
if $NSLCD_BIN --check