d738b9
From f8404b502015b4a9806894d212462c63c3307fa8 Mon Sep 17 00:00:00 2001
d738b9
From: Robbie Harwood <rharwood@redhat.com>
d738b9
Date: Fri, 22 Apr 2016 10:01:15 -0400
d738b9
Subject: [PATCH] krb5-1.13-dirsrv-accountlock.patch
d738b9
d738b9
---
d738b9
 src/aclocal.m4                                  |  9 +++++++++
d738b9
 src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c    | 17 +++++++++++++++++
d738b9
 .../kdb/ldap/libkdb_ldap/ldap_principal.c       |  3 +++
d738b9
 3 files changed, 29 insertions(+)
d738b9
d738b9
diff --git a/src/aclocal.m4 b/src/aclocal.m4
d738b9
index f5667c35f..2bfb99496 100644
d738b9
--- a/src/aclocal.m4
d738b9
+++ b/src/aclocal.m4
d738b9
@@ -1656,6 +1656,15 @@ if test "$with_ldap" = yes; then
d738b9
   AC_MSG_NOTICE(enabling OpenLDAP database backend module support)
d738b9
   OPENLDAP_PLUGIN=yes
d738b9
 fi
d738b9
+AC_ARG_WITH([dirsrv-account-locking],
d738b9
+[  --with-dirsrv-account-locking       compile 389/Red Hat/Fedora/Netscape Directory Server database backend module],
d738b9
+[case "$withval" in
d738b9
+    yes | no) ;;
d738b9
+    *)  AC_MSG_ERROR(Invalid option value --with-dirsrv-account-locking="$withval") ;;
d738b9
+esac], with_dirsrv_account_locking=no)
d738b9
+if test $with_dirsrv_account_locking = yes; then
d738b9
+    AC_DEFINE(HAVE_DIRSRV_ACCOUNT_LOCKING,1,[Define if LDAP KDB interface should heed 389 DS's nsAccountLock attribute.])
d738b9
+fi
d738b9
 ])dnl
d738b9
 dnl
d738b9
 dnl If libkeyutils exists (on Linux) include it and use keyring ccache
d738b9
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
d738b9
index 32efc4f54..af8b2db7b 100644
d738b9
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
d738b9
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
d738b9
@@ -1674,6 +1674,23 @@ populate_krb5_db_entry(krb5_context context, krb5_ldap_context *ldap_context,
d738b9
     ret = krb5_dbe_update_tl_data(context, entry, &userinfo_tl_data);
d738b9
     if (ret)
d738b9
         goto cleanup;
d738b9
+#ifdef HAVE_DIRSRV_ACCOUNT_LOCKING
d738b9
+    {
d738b9
+        krb5_timestamp              expiretime=0;
d738b9
+        char                        *is_login_disabled=NULL;
d738b9
+
d738b9
+        /* LOGIN DISABLED */
d738b9
+        ret = krb5_ldap_get_string(ld, ent, "nsAccountLock", &is_login_disabled,
d738b9
+                                   &attr_present);
d738b9
+        if (ret)
d738b9
+            goto cleanup;
d738b9
+        if (attr_present == TRUE) {
d738b9
+            if (strcasecmp(is_login_disabled, "TRUE")== 0)
d738b9
+                entry->attributes |= KRB5_KDB_DISALLOW_ALL_TIX;
d738b9
+            free (is_login_disabled);
d738b9
+        }
d738b9
+    }
d738b9
+#endif
d738b9
 
d738b9
     ret = krb5_read_tkt_policy(context, ldap_context, entry, tktpolname);
d738b9
     if (ret)
d738b9
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
d738b9
index d722dbfa6..5e8e9a897 100644
d738b9
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
d738b9
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
d738b9
@@ -54,6 +54,9 @@ char     *principal_attributes[] = { "krbprincipalname",
d738b9
                                      "krbLastFailedAuth",
d738b9
                                      "krbLoginFailedCount",
d738b9
                                      "krbLastSuccessfulAuth",
d738b9
+#ifdef HAVE_DIRSRV_ACCOUNT_LOCKING
d738b9
+                                     "nsAccountLock",
d738b9
+#endif
d738b9
                                      "krbLastPwdChange",
d738b9
                                      "krbLastAdminUnlock",
d738b9
                                      "krbPrincipalAuthInd",