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