39 Commits

Author SHA1 Message Date
2e729a9aa2 hdb: Fix coverity warnings 2022-01-17 17:32:24 -06:00
fc5f917a66 hdb: Fix SQLite3 backend EXISTS error 2022-01-17 00:45:37 -06:00
0e8c4ccc6e hdb: eliminate hdb_entry_ex
Remove hdb_entry_ex and revert to the original design of hdb_entry (except with
an additional context member in hdb_entry which is managed by the free_entry
method in HDB).
2022-01-15 18:54:57 +11:00
c5551775e2 hdb: decorate HDB_entry with context member
Decorate HDB_entry with context and move free_entry callback into HDB structure
itself. Requires updating hdb_free_entry() signature to include HDB parameter.
A follow-up commit will consolidate hdb_entry_ex (which has a single hdb_entry
member) into hdb_entry.
2022-01-15 18:54:57 +11:00
2730e12b6a hdb: SQLite HDB can handle enterprise principals
add HDB_CAP_F_HANDLE_ENTERPRISE_PRINCIPAL to the capability flags for the
SQLite backend, as it uses the common _hdb_fetch_kvno() helper which supports
enterprise principals.

Failure to set this flag resulted in hdb_fetch_kvno() incorrectly returning
HDB_ERR_WRONG_REALM when enterprise principals were being used, as the
enterprise name translation was instead done by _kdc_db_fetch(), thereby
squashing the enterprise name type (which otherwise would have set the
force_canonicalize option).
2021-12-19 21:05:57 +11:00
7686028718 Use UTF-8 in KTH copyright notice
Samba is starting to protect against bi-di attacks and the starting point
is to require that input files be fully UTF-8.  In 2021 this is a reasonable
starting point anyway.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2021-11-29 12:50:26 +11:00
ea8f3991fb hdb: Fix leak in SQLite3 backend 2020-10-27 13:30:57 -05:00
18e8ccf4c2 hdb: WAL mode setting was done incorrectly 2020-10-08 20:34:15 -05:00
da04b45c7f hdb: Fix SQLite3 backend bug 2020-10-08 20:30:21 -05:00
f87ba4f23b hdb: Test LMDB and SQLite3 HDB concurrency
Test that we can dump an HDB w/o blocking write transactions.

This currently works for different processes (both backends), but not
for threads (for either backend), and it's not yet clear why.
2020-10-06 14:16:35 -05:00
5447b81fb1 hdb: Move virtual principals into HDB layer
This is a large commit that adds several features:

 - Revamps and moves virtual host-based service principal functionality
   from kdc/ to lib/hdb/ so that it may be automatically visible to
   lib/kadm5/, as well as kadmin(1)/kadmind(8) and ktutil(1).

   The changes are backwards-incompatible.

 - Completes support for documenting a service principal's supported
   enctypes in its HDB entry independently of its long-term keys.  This
   will reduce HDB bloat by not requiring that service principals have
   more long-term keys than they need just to document the service's
   supported enctypes.

 - Adds support for storing krb5.conf content in principals' HDB
   entries.  This may eventually be used for causing Heimdal KDC
   services to reconfigure primary/secondary roles automatically by
   discovering the configured primary in an HDB entry for the realm.

   For now this will be used to help reduce the amount of configuration
   needed by clients of an upcoming HTTP binding of the kadmin service.
2020-09-08 00:25:36 -05:00
5bcbe2125b Add hdb_set_sync() method 2017-10-10 13:07:18 -05:00
e3cc7dfb94 Set def page size for HDB SQLite3 backend to 8KB 2017-10-10 13:07:06 -05:00
52a562a3a4 Misc fixes (coverity) 2016-11-18 22:21:45 -06:00
1c81ddf4e2 Round of scan-build warnings cleanup 2016-11-16 17:03:14 -06:00
2b5ddafab5 HDB sqlite backend: fix error NULL deref 2016-02-29 19:13:10 -06:00
50a45a946d Fix more HDB SQLite3 issues
Fix some issues reported by Jeffrey Hutzelman.
2016-02-26 01:04:32 -06:00
5867aa6873 hdb-sqlite: fix error code confusion 2016-02-26 01:04:32 -06:00
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
76c26281a7 Fix sqlite HDB backend SQLITE_BUSY bug 2016-02-26 00:55:32 -06:00
fbc87e46fd Fix sqlite HDB backend init bug 2016-02-26 00:55:31 -06:00
075a0d32ee Add UPN support to sqlite HDB backend 2013-08-06 20:54:23 -05:00
65987846fd make bind principal a common function 2012-02-28 00:03:20 -08:00
e8779d5d4a Add -Wshadow and deal with the warnings. 2012-02-21 11:17:55 +00:00
0879b9831a remove trailing whitespace 2011-05-21 11:57:31 -07:00
4244f13866 This makes hdb-sqlite work: moving the unseal of keys past the value2entry decoding.
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2011-04-16 10:19:40 -07:00
0a10f35897 drop unused functions 2010-11-28 11:50:42 -08:00
6c6726d76c drop hdb_fetch 2010-11-28 11:46:46 -08:00
38d0a72326 implement fetch_kvno 2010-11-28 11:33:24 -08:00
0690211131 use public version of krb5_enomem 2010-11-25 10:48:33 -08:00
3b1b7e41b0 use krb5_set_error_message and krb5_enomem 2010-11-24 14:36:35 -08:00
ab56333fd7 Variable initialization in hdb_sqlite_store()
If the call to krb5_unparse_name() fails, we might try to free an
uninitialized pointer.
2010-08-20 13:03:36 -04:00
caf8f87598 Make hdb build on windows
Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
2009-11-24 21:59:12 -08:00
c8175f83a3 drop __FUNCTION__ 2009-08-15 05:57:07 +02:00
311ce98d85 (hdb_sqlite_rename): make rename work when there is a prefix 2009-07-19 18:42:02 -07:00
bd073cfd72 Limit maxinum retries of BUSY/BLOCK/LOCKED operations to MAX_RETRIES (default 10) 2009-07-19 18:01:51 -07:00
48a0f6d995 reset iteration query before continuing.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25314 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-07-05 05:08:15 +00:00
e02d83174c set hdb_capability_flags = 0
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25313 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-07-05 05:08:05 +00:00
b0a3f535bf SQLite3 backend from Pontus Walck and Stockholm Univerity.
The work was done as part of Pontus's exjobb. Thanks!

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25269 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-06-03 17:26:08 +00:00