Commit Graph

94 Commits

Author SHA1 Message Date
Nicolas Williams a114690bde Fix HDB two-phase commit for LDAP backend
We can't replay log entries when recovering if the backend is shared by
writers with separate logs (or no logs at all), i.e., on other hosts.
2016-02-29 22:12:51 -06:00
Nicolas Williams 20df2c8706 Two-phase HDB commit via iprop log, + GC for log
We used to update the iprop log and HDB in different orders depending on
the kadm5 operation, which then led to various race conditions.

The iprop log now functions as a two-phase commit (with roll forward)
log for HDB changes.  The log is auto-truncated, keeping the latest
entries that fit in a configurable maximum number of bytes (defaults to
50MB).  See the log-max-size parameter description in krb5.conf(5).

The iprop log format and the protocol remain backwards-compatible with
earlier versions of Heimdal.  This is NOT a flag-day; there is NO need
to update all the slaves at once with the master, though it is advisable
in general.  Rolling upgrades and downgrades should work.

The sequence of updates is now (with HDB and log open and locked):

a) check that the HDB operation will succeed if attempted,
b) append to iprop log and fsync() it,
c) write to HDB (which should fsync()),
d) mark last log record committed (no fsync in this case).

Every kadm5 write operation recover transactions not yet confirmed as
committed, thus there can be at most one unconfirmed commit on a master
KDC.

Reads via kadm5_get_principal() also attempt to lock the log, and if
successful, recover unconfirmed transactions; readers must have write
access and must win any race to lock the iprop log.

The ipropd-master daemon also attempts to recover unconfirmed
transactions when idle.

The log now starts with a nop record whose payload records the offset of
the logical end of the log: the end of the last confirmed committed
transaction.  This is kown as the "uber record".  Its purpose is
two-fold: act as the confirmation of committed transactions, and provide
an O(1) method of finding the end of the log (i.e., without having to
traverse the entire log front to back).

Two-phase commit makes all kadm5 writes single-operation atomic
transactions (though some kadm5 operations, such as renames of
principals, and changes to principals' aliases, use multiple low-level
HDB write operations, but still all in one transaction).  One can still
hold a lock on the HDB across many operations (e.g., by using the lock
command in a kadmin -l or calling kadm5_lock()) in order to push
multiple transactions in sequence, but this sequence will not be atomic
if the process or host crashes in the middle.

As before, HDB writes which do not go through the kadm5 API are excluded
from all of this, but there should be no such writes.

Lastly, the iprop-log(1) command is enhanced as follows:

 - The dump, last-version, truncate, and replay sub-commands now have an
   option to not lock the log.  This is useful for inspecting a running
   system's log file, especially on slave KDCs.

 - The dump, last-version, truncate, and replay sub-commands now take an
   optional iprop log file positional argument, so that they may be used
   to inspect log files other than the running system's
   configured/default log file.

Extensive code review and some re-writing for clarity by Viktor Dukhovni.
2016-02-26 00:55:33 -06:00
Timothy Pearson f5f76ee72c Add ability to store extended principal attributes in LDAP
A careful code review was undertaken, and it was determined
that the best way to store the extended attributes was in a
native ASN1 encoded field.  LDAP does not understand the
SEQUENCE of SEQUENCE structures used extensively throughout
the extended attributes structure, and there was already a
precedent set for storing the krb5Key data in a native ASN1
encoded field.
2015-09-27 16:36:24 -05:00
Ken Dreyer 10519ce50d remove hdb ldap create declarations
The hdb_ldap_create and hdb_ldapi_create prototypes use the "static"
keyword, but the functions themselves are not implemented as static.

Heimdal's buildsystem dynamically adds function declarations to
hdb-protos.h based on the actual function implementations. Those
declarations in hdb-protos.h are not declared as static.

Since the build system generates the declarations dynamically, just
remove them from hdb-ldap.c.
2014-03-27 12:11:29 -06:00
Jeffrey Clark c1c7da7f79 Fix compiling hdb ldap as a module
Signed-off-by: Love Hörnquist Åstrand <lha@h5l.org>
2014-01-31 08:49:51 +01:00
Landon Fuller 6fb9bc86b7 Add a configuration option to enable LDAP Start TLS.
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2013-04-24 16:21:15 -07:00
Landon Fuller 96e9025675 Add support for specifying bind DN and password.
This uses a seperate hdb-ldap-secret-file configuration value, which
specifies an external file that may be used to supply the LDAP bind dn
and password. This allows that specific file to be configured with more
restrictive permissions than the global krb5.conf.

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2013-04-24 16:21:15 -07:00
Landon Fuller 8cb8a8932e Remove unnecessary strdup() (and resulting leak)
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2013-04-24 16:21:15 -07:00
Landon Fuller e58308e2a6 Add support for specifying an LDAP URL.
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2013-04-24 16:21:14 -07:00
Love Hornquist Astrand 3cba540a5f fix prototypes 2013-03-04 10:24:35 -08:00
Love Hornquist Astrand 1eb4e2516e unify hdb_so_method and hdb_method 2013-03-04 10:18:16 -08:00
Arvid Requate 3cf3708950 honour krb5PasswordEnd also if sambaPwdLastSet
Commit 9f696b11c2 changed the
behaviour of key expiry for principals that have an sambaPwdLastSet
attribute in LDAP. The change was twofold:

* if "password_lifetime" is not set in kdc.conf a default lifetime
  of 1 year is enforced

* krb5PasswordEnd is not honoured.

This patch causes pw_end to be modified only if sambaPwdLastSet
*and* "password_lifetime" is defined in kdc.conf.

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2013-03-04 09:47:46 -08:00
Love Hornquist Astrand 0879b9831a remove trailing whitespace 2011-05-21 11:57:31 -07:00
Love Hornquist Astrand 6c6726d76c drop hdb_fetch 2010-11-28 11:46:46 -08:00
Love Hornquist Astrand 917920e8cd implement fetch_kvno 2010-11-28 11:34:33 -08:00
Cédric Schieli 901d655ba7 Make sure existing entries can be found by userid
A typo in LDAP__lookup_princ makes using existing LDAP entries broken,
a new entry is always created even if an entry with proper uid and
structural objectclass can be found.

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2010-08-08 08:23:12 -07:00
Love Hornquist Astrand d36402a671 Don't assume ldap_bv2escaped_filter_value() is exported 2009-10-11 11:17:56 -07:00
Love Hornquist Astrand ff87429593 Make LDAP code fetch less attributes from LDAP server when KDC is asking
Johan Gadsjö did a awesome analysis of the LDAP access pattens
and sent us a patch that reduced the calls the ldap server by 4
times as many. The patch was adopted and change to avoid compile
time depencies and make the determination runtime instead. Thanks!
2009-10-03 13:20:41 -07:00
Love Hörnquist Åstrand 5a9dd54e95 drop RCSID
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25319 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-07-05 05:09:16 +00:00
Love Hörnquist Åstrand 4ff6ed4652 set hdb_capability_flags = 0
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25312 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-07-05 05:07:52 +00:00
Love Hörnquist Åstrand 597f9dbdfa make module private functions static
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24976 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-03-28 17:08:46 +00:00
Love Hörnquist Åstrand 883bf6e6d8 quote userid too
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23956 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-10-26 18:20:37 +00:00
Love Hörnquist Åstrand 18e483856b Use ldap_bv2escaped_filter_value to filter the search query. Idea from Michael Ströder.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23955 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-10-26 18:20:23 +00:00
Love Hörnquist Åstrand 21fdd30824 Filter out searches for *@REALM, which takes very long time, and other
ldap special characters, this should really be quoting instead.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23941 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-10-19 01:32:04 +00:00
Love Hörnquist Åstrand 9f696b11c2 Patch to handle sambaPwdLastSet, sambaPwdMustChange was drop some Samba versions ago.
From David Markey

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23929 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-10-18 21:16:35 +00:00
Love Hörnquist Åstrand 6937d41a02 remove trailing whitespace
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23815 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-09-13 09:21:03 +00:00
Love Hörnquist Åstrand e172367898 switch to utf8 encoding of all files
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23814 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-09-13 08:53:55 +00:00
Love Hörnquist Åstrand 0c425c680b Malloc enough memory, from Brian Scott.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23726 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-09-02 09:11:48 +00:00
Love Hörnquist Åstrand 7fcd266fdd use krb5_set_error_message
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23316 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-06-23 04:32:32 +00:00
Love Hörnquist Åstrand 746ad99b8c Use the _ext api for OpenLDAP, from Honza Machacek (gentoo).
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23153 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-04-30 11:25:57 +00:00
Love Hörnquist Åstrand 1c9234c4f7 Use malloc() instead of static buffer.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22588 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-02-11 21:46:45 +00:00
Love Hörnquist Åstrand 9215d6ea7b Use ldap_get_values_len, from LaMont Jones via Brian May and Debian.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22587 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-02-11 21:43:27 +00:00
Love Hörnquist Åstrand 5fed824f37 its vs it\'s etc. From Bjorn Sandell
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22071 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-11-14 20:04:50 +00:00
Love Hörnquist Åstrand ca152336fa When using sambaNTPassword, avoid adding more then one enctype 23 to
krb5EncryptionType.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21500 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-07-11 15:20:18 +00:00
Love Hörnquist Åstrand 393f98a743 Make work again.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20219 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-02-15 00:03:42 +00:00
Love Hörnquist Åstrand 0c91a6f74e update (c)
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20113 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-02-01 14:34:15 +00:00
Love Hörnquist Åstrand 7d5e25b4ba Set hdb->hdb_db for ldap.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20110 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-02-01 13:18:22 +00:00
Love Hörnquist Åstrand 238e717568 Clear errno before calling the strtol functions. From Paul Stoeber to
OpenBSD by Ray Lai and Björn Sandell.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19215 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-12-04 23:41:18 +00:00
Love Hörnquist Åstrand 5518871b9c Make build again from the hdb_entry wrapping. Patch from Andreas Hasenack.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19173 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-11-28 14:23:13 +00:00
Love Hörnquist Åstrand 2f0c4b1f20 Make compile.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@18714 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-10-20 21:05:10 +00:00
Love Hörnquist Åstrand 3e112be2cc don't use the sambaNTPassword if there is ARCFOUR key already.
Idea from Andreas Hasenack.
While here, set pw change time using sambaPwdLastSet


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17654 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-06-14 21:02:46 +00:00
Love Hörnquist Åstrand f9160af5a1 (LDAP_message2entry): in declaration set variable_name as "hdb_entry_ex"
(hdb_ldap_common): change "arg" in condition (if) to "search_base"
(hdb_ldapi_create): change "serach_base" to "search_base"
From Alex V. Labuta.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16862 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-03-30 09:03:27 +00:00
Love Hörnquist Åstrand b81ea8dcbc Log the filter string to the error message.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16690 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-02-03 12:17:10 +00:00
Love Hörnquist Åstrand eb128f4928 Wrap hdb_entry with hdb_entry_ex, add url support, add ldapi support.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16377 ec53bebd-3082-4978-b11e-865c3cabbd6b
2005-12-12 12:34:23 +00:00
Love Hörnquist Åstrand 8822335041 only add krb5EncryptionType for already existing entries or heidmal entries
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15938 ec53bebd-3082-4978-b11e-865c3cabbd6b
2005-08-19 13:07:04 +00:00
Love Hörnquist Åstrand e621738b3a drop <ctype.h>, no longer use any of the is* macros in this file
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14820 ec53bebd-3082-4978-b11e-865c3cabbd6b
2005-04-18 08:03:54 +00:00
Love Hörnquist Åstrand 6058abac27 use the newly written hex function from roken and remove the old implementation
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14616 ec53bebd-3082-4978-b11e-865c3cabbd6b
2005-03-04 15:13:01 +00:00
Love Hörnquist Åstrand 5e2d8fe7ba Add account expiration for samba from James F. Hranicky <jfh@cise.ufl.edu>.
Add LDAP_addmod_integer and use it.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14414 ec53bebd-3082-4978-b11e-865c3cabbd6b
2004-12-28 12:59:11 +00:00
Love Hörnquist Åstrand c932cd471a add (c) kth
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14393 ec53bebd-3082-4978-b11e-865c3cabbd6b
2004-12-13 16:29:53 +00:00
Love Hörnquist Åstrand 09647068e1 (pos): uppercase in character
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14392 ec53bebd-3082-4978-b11e-865c3cabbd6b
2004-12-13 08:46:07 +00:00