aboutsummaryrefslogtreecommitdiff
path: root/crypto/krb5/doc/html/formats/database_formats.html
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/krb5/doc/html/formats/database_formats.html')
-rw-r--r--crypto/krb5/doc/html/formats/database_formats.html587
1 files changed, 587 insertions, 0 deletions
diff --git a/crypto/krb5/doc/html/formats/database_formats.html b/crypto/krb5/doc/html/formats/database_formats.html
new file mode 100644
index 000000000000..782a004b1370
--- /dev/null
+++ b/crypto/krb5/doc/html/formats/database_formats.html
@@ -0,0 +1,587 @@
+<!DOCTYPE html>
+
+<html lang="en" data-content_root="../">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+
+ <title>Kerberos Database (KDB) Formats &#8212; MIT Kerberos Documentation</title>
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
+ <link rel="stylesheet" type="text/css" href="../_static/agogo.css?v=879f3c71" />
+ <link rel="stylesheet" type="text/css" href="../_static/kerb.css?v=6a0b3979" />
+ <script src="../_static/documentation_options.js?v=236fef3b"></script>
+ <script src="../_static/doctools.js?v=888ff710"></script>
+ <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
+ <link rel="author" title="About these documents" href="../about.html" />
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="copyright" title="Copyright" href="../copyright.html" />
+ <link rel="next" title="MIT Kerberos features" href="../mitK5features.html" />
+ <link rel="prev" title="PKINIT freshness tokens" href="freshness_token.html" />
+ </head><body>
+ <div class="header-wrapper">
+ <div class="header">
+
+
+ <h1><a href="../index.html">MIT Kerberos Documentation</a></h1>
+
+ <div class="rel">
+
+ <a href="../index.html" title="Full Table of Contents"
+ accesskey="C">Contents</a> |
+ <a href="freshness_token.html" title="PKINIT freshness tokens"
+ accesskey="P">previous</a> |
+ <a href="../mitK5features.html" title="MIT Kerberos features"
+ accesskey="N">next</a> |
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a> |
+ <a href="../search.html" title="Enter search criteria"
+ accesskey="S">Search</a> |
+ <a href="mailto:krb5-bugs@mit.edu?subject=Documentation__Kerberos Database (KDB) Formats">feedback</a>
+ </div>
+ </div>
+ </div>
+
+ <div class="content-wrapper">
+ <div class="content">
+ <div class="document">
+
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <section id="kerberos-database-kdb-formats">
+<h1>Kerberos Database (KDB) Formats<a class="headerlink" href="#kerberos-database-kdb-formats" title="Link to this heading">¶</a></h1>
+<section id="dump-format">
+<h2>Dump format<a class="headerlink" href="#dump-format" title="Link to this heading">¶</a></h2>
+<p>Files created with the <a class="reference internal" href="../admin/admin_commands/kdb5_util.html#kdb5-util-8"><span class="std std-ref">kdb5_util</span></a> <strong>dump</strong> command begin with
+a versioned header “kdb5_util load_dump version 7”. This version has
+been in use since MIT krb5 release 1.11; some previous versions are
+supported but are not described here.</p>
+<p>Each subsequent line of the dump file contains one or more
+tab-separated fields describing either a principal entry or a policy
+entry. The fields of a principal entry line are:</p>
+<ul class="simple">
+<li><p>the word “princ”</p></li>
+<li><p>the string “38” (this was originally a length field)</p></li>
+<li><p>the length of the principal name in string form</p></li>
+<li><p>the decimal number of tag-length data elements</p></li>
+<li><p>the decimal number of key-data elements</p></li>
+<li><p>the string “0” (this was originally an extension length field)</p></li>
+<li><p>the principal name in string form</p></li>
+<li><p>the principal attributes as a decimal number; when converted to
+binary, the bits from least significant to most significant are:</p>
+<ul>
+<li><p>disallow_postdated</p></li>
+<li><p>disallow_forwardable</p></li>
+<li><p>disallow_tgt_based</p></li>
+<li><p>disallow_renewable</p></li>
+<li><p>disallow_proxiable</p></li>
+<li><p>disallow_dup_skey</p></li>
+<li><p>disallow_all_tix</p></li>
+<li><p>requires_preauth</p></li>
+<li><p>requires_hwauth</p></li>
+<li><p>requires_pwchange</p></li>
+<li><p>disallow_svr</p></li>
+<li><p>pwchange_service</p></li>
+<li><p>support_desmd5</p></li>
+<li><p>new_princ</p></li>
+<li><p>ok_as_delegate</p></li>
+<li><p>ok_to_auth_as_delegate</p></li>
+<li><p>no_auth_data_required</p></li>
+<li><p>lockdown_keys</p></li>
+</ul>
+</li>
+<li><p>the maximum ticket lifetime, as a decimal number of seconds</p></li>
+<li><p>the maximum renewable ticket lifetime, as a decimal number of seconds</p></li>
+<li><p>the principal expiration time, as a decimal POSIX timestamp</p></li>
+<li><p>the password expiration time, as a decimal POSIX timestamp</p></li>
+<li><p>the last successful authentication time, as a decimal POSIX
+timestamp</p></li>
+<li><p>the last failed authentication time, as a decimal POSIX timestamp</p></li>
+<li><p>the decimal number of failed authentications since the last
+successful authentication time</p></li>
+<li><p>for each tag-length data value:</p>
+<ul>
+<li><p>the tag value in decimal</p></li>
+<li><p>the length in decimal</p></li>
+<li><p>the data as a lowercase hexadecimal byte string, or “-1” if the length is 0</p></li>
+</ul>
+</li>
+<li><p>for each key-data element:</p>
+<ul>
+<li><p>the string “2” if this element has non-normal salt type, “1”
+otherwise</p></li>
+<li><p>the key version number of this element</p></li>
+<li><p>the encryption type</p></li>
+<li><p>the length of the encrypted key value</p></li>
+<li><p>the encrypted key as a lowercase hexadecimal byte string</p></li>
+<li><p>if this element has non-normal salt type:</p>
+<ul>
+<li><p>the salt type</p></li>
+<li><p>the length of the salt data</p></li>
+<li><p>the salt data as a lowercase hexadecimal byte string, or the
+string “-1” if the salt data length is 0</p></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><p>the string “-1;” (this was originally an extension field)</p></li>
+</ul>
+<p>The fields of a policy entry line are:</p>
+<ul class="simple">
+<li><p>the string “policy”</p></li>
+<li><p>the policy name</p></li>
+<li><p>the minimum password lifetime as a decimal number of seconds</p></li>
+<li><p>the maximum password lifetime as a decimal number of seconds</p></li>
+<li><p>the minimum password length, in decimal</p></li>
+<li><p>the minimum number of character classes, in decimal</p></li>
+<li><p>the number of historical keys to be stored, in decimal</p></li>
+<li><p>the policy reference count (no longer used)</p></li>
+<li><p>the maximum number of failed authentications before lockout</p></li>
+<li><p>the time interval after which the failed authentication count is
+reset, as a decimal number of seconds</p></li>
+<li><p>the lockout duration, as a decimal number of seconds</p></li>
+<li><p>the required principal attributes, in decimal (currently unenforced)</p></li>
+<li><p>the maximum ticket lifetime as a decimal number of seconds
+(currently unenforced)</p></li>
+<li><p>the maximum renewable lifetime as a decimal number of seconds
+(currently unenforced)</p></li>
+<li><p>the allowed key/salt types, or “-” if unrestricted</p></li>
+<li><p>the number of tag-length values</p></li>
+<li><p>for each tag-length data value:</p>
+<ul>
+<li><p>the tag value in decimal</p></li>
+<li><p>the length in decimal</p></li>
+<li><p>the data as a lowercase hexadecimal byte string, or “-1” if the
+length is 0</p></li>
+</ul>
+</li>
+</ul>
+</section>
+<section id="tag-length-data-formats">
+<h2>Tag-length data formats<a class="headerlink" href="#tag-length-data-formats" title="Link to this heading">¶</a></h2>
+<p>The currently defined tag-length data types are:</p>
+<ul class="simple">
+<li><p>(1) last password change: a four-byte little-endian POSIX timestamp
+giving the last password change time</p></li>
+<li><p>(2) last modification data: a four-byte little-endian POSIX
+timestamp followed by a zero-terminated principal name in string
+form, giving the time of the last principal change and the principal
+who performed it</p></li>
+<li><p>(3) kadmin data: the XDR encoding of a per-principal kadmin data
+record (see below)</p></li>
+<li><p>(8) master key version: a two-byte little-endian integer containing
+the master key version used to encrypt this principal’s key data</p></li>
+<li><ol class="arabic simple" start="9">
+<li><p>active kvno: see below</p></li>
+</ol>
+</li>
+<li><ol class="arabic simple" start="10">
+<li><p>master key auxiliary data: see below</p></li>
+</ol>
+</li>
+<li><p>(11) string attributes: one or more iterations of a zero-terminated
+string key followed by a zero-terminated string value</p></li>
+<li><p>(12) alias target principal: a zero-terminated principal name in
+string form</p></li>
+<li><ol class="arabic simple" start="255">
+<li><p>LDAP object information: see below</p></li>
+</ol>
+</li>
+<li><p>(768) referral padata: a DER-encoded PA-SVR-REFERRAL-DATA to be sent
+to a TGS-REQ client within encrypted padata (see Appendix A of
+<span class="target" id="index-0"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc1606.html"><strong>RFC 1606</strong></a>)</p></li>
+<li><p>(1792) last admin unlock: a four-byte little-endian POSIX timestamp
+giving the time of the last administrative account unlock</p></li>
+<li><p>(32767) database arguments: a zero-terminated key=value string (may
+appear multiple times); used by the kadmin protocol to
+communicate -x arguments to kadmind</p></li>
+</ul>
+<section id="per-principal-kadmin-data">
+<h3>Per-principal kadmin data<a class="headerlink" href="#per-principal-kadmin-data" title="Link to this heading">¶</a></h3>
+<p>Per-principal kadmin data records use a modified XDR encoding of the
+kadmin_data type defined as follows:</p>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">key_data</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">numfields</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">kvno</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">enctype</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">salttype</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">keylen</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">saltlen</span><span class="p">;</span>
+<span class="w"> </span><span class="n">opaque</span><span class="w"> </span><span class="n">key</span><span class="o">&lt;&gt;</span><span class="p">;</span>
+<span class="w"> </span><span class="n">opaque</span><span class="w"> </span><span class="n">salt</span><span class="o">&lt;&gt;</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="k">struct</span><span class="w"> </span><span class="nc">hist_entry</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="n">key_data</span><span class="w"> </span><span class="n">keys</span><span class="o">&lt;&gt;</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="k">struct</span><span class="w"> </span><span class="nc">kadmin_data</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">version_number</span><span class="p">;</span>
+<span class="w"> </span><span class="n">nullstring</span><span class="w"> </span><span class="n">policy</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">aux_attributes</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">old_key_next</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">admin_history_kvno</span><span class="p">;</span>
+<span class="w"> </span><span class="n">hist_entry</span><span class="w"> </span><span class="n">old_keysets</span><span class="o">&lt;&gt;</span><span class="p">;</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>The type “nullstring” uses a custom string encoder where the length
+field is zero or the string length plus one; a length of zero
+indicates that no policy object is specified for the principal. The
+field “version_number” contains 0x12345C01. The aux_attributes field
+contains the bit 0x800 if a policy object is associated with the
+principal.</p>
+<p>Within a key_data record, numfields is 2 if the key data has
+non-normal salt type, 1 otherwise.</p>
+</section>
+<section id="active-kvno-and-master-key-auxiliary-data">
+<h3>Active kvno and master key auxiliary data<a class="headerlink" href="#active-kvno-and-master-key-auxiliary-data" title="Link to this heading">¶</a></h3>
+<p>These types only appear in the entry of the master key principal
+(K/M). They use little-endian binary integer encoding.</p>
+<p>The active kvno table determines which master key version is active
+for a given timestamp. It uses the following binary format:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>active-key-version-table <span class="o">::=</span>
+ version (16 bits) [with the value 1]
+ version entry 1 (key-version-entry)
+ version entry 2 (key-version-entry)
+ ...
+
+key-version-entry <span class="o">::=</span>
+ key version (16 bits)
+ timestamp (32 bits) [when this key version becomes active]
+</pre></div>
+</div>
+<p>The master key auxiliary data record contains copies of the current
+master key encrypted in each older master key. It uses the following
+binary format:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>master-key-aux <span class="o">::=</span>
+ version (16 bits) [with the value 1]
+ key entry 1 (key-entry)
+ key entry 2 (key-entry)
+ ...
+
+key-entry <span class="o">::=</span>
+ old master key version (16 bits)
+ latest master key version (16 bits)
+ latest master key encryption type (16 bits)
+ encrypted key length (16 bits)
+ encrypted key contents
+</pre></div>
+</div>
+</section>
+<section id="ldap-object-information">
+<h3>LDAP object information<a class="headerlink" href="#ldap-object-information" title="Link to this heading">¶</a></h3>
+<p>This type appears in principal entries retrieved with the LDAP KDB
+module. The value uses the following binary format, using big-endian
+integer encoding:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>ldap-principal-data <span class="o">::=</span>
+ record 1 (ldap-tl-data)
+ record 2 (ldap-tl-data)
+ ...
+
+ldap-tl-data <span class="o">::=</span>
+ type (8 bits)
+ length (16 bits)
+ data
+</pre></div>
+</div>
+<p>The currently defined ldap-tl-data types are (all integers are
+big-endian):</p>
+<ul class="simple">
+<li><p>(1) principal type: 16 bits containing the value 1, indicating that
+the LDAP object containing the principal entry is a standalone
+principal object</p></li>
+<li><p>(2) principal count: 16 bits containing the number of
+krbPrincipalName values in the LDAP object</p></li>
+<li><p>(3) user DN: the string representation of the distinguished name of
+the LDAP object</p></li>
+<li><p>(5) attribute mask: 16 bits indicating which Kerberos-specific LDAP
+attributes are present in the LDAP object (see below)</p></li>
+<li><p>(7) link DN: the string representation of the distinguished name of
+an LDAP object this object is linked to; may appear multiple times</p></li>
+</ul>
+<p>When converted to binary, the attribute mask bits, from least
+significant to most significant, correspond to the following LDAP
+attributes:</p>
+<ul class="simple">
+<li><p>krbMaxTicketLife</p></li>
+<li><p>krbMaxRenewableAge</p></li>
+<li><p>krbTicketFlags</p></li>
+<li><p>krbPrincipalExpiration</p></li>
+<li><p>krbTicketPolicyReference</p></li>
+<li><p>krbPrincipalAuthInd</p></li>
+<li><p>krbPwdPolicyReference</p></li>
+<li><p>krbPasswordExpiration</p></li>
+<li><p>krbPrincipalKey</p></li>
+<li><p>krbLastPwdChange</p></li>
+<li><p>krbExtraData</p></li>
+<li><p>krbLastSuccessfulAuth</p></li>
+<li><p>krbLastFailedAuth</p></li>
+<li><p>krbLoginFailedCount</p></li>
+<li><p>krbLastAdminUnlock</p></li>
+<li><p>krbPwdHistory</p></li>
+</ul>
+</section>
+</section>
+<section id="alias-principal-entries">
+<h2>Alias principal entries<a class="headerlink" href="#alias-principal-entries" title="Link to this heading">¶</a></h2>
+<p>To allow aliases to be represented in dump files and within the
+incremental update protocol, the krb5 database library supports the
+concept of an alias principal entry. An alias principal entry
+contains an alias target principal in its tag-length data, has its
+attributes set to disallow_all_tix, and has zero or empty values for
+all other fields. The database glue library recognizes alias entries
+and iteratively looks up the alias target up to a depth of 10 chained
+aliases. (Added in release 1.22.)</p>
+</section>
+<section id="db2-principal-and-policy-formats">
+<h2>DB2 principal and policy formats<a class="headerlink" href="#db2-principal-and-policy-formats" title="Link to this heading">¶</a></h2>
+<p>The DB2 KDB module uses the string form of a principal name, with zero
+terminator, as a lookup key for principal entries. Principal entry
+values use the following binary format with little-endian integer
+encoding:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>db2-principal-entry <span class="o">::=</span>
+ len (16 bits) [always has the value 38]
+ attributes (32 bits)
+ max ticket lifetime (32 bits)
+ max renewable lifetime (32 bits)
+ principal expiration timestamp (32 bits)
+ password expiration timestamp (32 bits)
+ last successful authentication timestamp (32 bits)
+ last failed authentication timestamp (32 bits)
+ failed authentication counter (32 bits)
+ number of tag-length elements (16 bits)
+ number of key-data elements (16 bits)
+ length of string-form principal with zero terminator (16 bits)
+ string-form principal with zero terminator
+ tag-length entry 1 (tag-length-data)
+ tag-length entry 2 (tag-length-data)
+ ...
+ key-data entry 1 (key-data)
+ key-data entry 2 (key-data)
+ ...
+
+tag-length-data <span class="o">::=</span>
+ type tag (16 bits)
+ data length (16 bits)
+ data
+
+key-data <span class="o">::=</span>
+ salt indicator (16 bits) [1 for default salt, 2 otherwise]
+ key version (16 bits)
+ encryption type (16 bits)
+ encrypted key length (16 bits)
+ encrypted key
+ salt type (16 bits) [omitted if salt indicator is 1]
+ salt data length (16 bits) [omitted if salt indicator is 1]
+ salt data [omitted if salt indicator is 1]
+</pre></div>
+</div>
+<p>DB2 policy entries reside in a separate database file. The lookup key
+is the policy name with zero terminator. Policy entry values use a
+modified XDR encoding of the policy type defined as follows:</p>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">tl_data</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">type</span><span class="p">;</span>
+<span class="w"> </span><span class="n">opaque</span><span class="w"> </span><span class="n">data</span><span class="o">&lt;&gt;</span><span class="p">;</span>
+<span class="w"> </span><span class="n">tl_data</span><span class="w"> </span><span class="o">*</span><span class="n">next</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="k">struct</span><span class="w"> </span><span class="nc">policy</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">version_number</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">min_life</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_pw_life</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">min_length</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">min_classes</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">history_num</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">refcount</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_fail</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">failcount_interval</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">lockout_duration</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">attributes</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_ticket_life</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_renewable_life</span><span class="p">;</span>
+<span class="w"> </span><span class="n">nullstring</span><span class="w"> </span><span class="n">allowed_keysalts</span><span class="p">;</span>
+<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n_tl_data</span><span class="p">;</span>
+<span class="w"> </span><span class="n">tl_data</span><span class="w"> </span><span class="o">*</span><span class="n">tag_length_data</span><span class="p">;</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>The type “nullstring” uses the same custom encoder as in the
+per-principal kadmin data.</p>
+<p>The field “version_number” contains 0x12345D01, 0x12345D02, or
+0x12345D03 for versions 1, 2, and 3 respectively. Versions 1 and 2
+omit the fields “attributes” through “tag_length_data”. Version 1
+also omits the fields “max_fail” through “lockout_duration”. Encoding
+uses the lowest version that can represent the policy entry.</p>
+<p>The field “refcount” is no longer used and its value is ignored.</p>
+</section>
+<section id="lmdb-principal-and-policy-formats">
+<h2>LMDB principal and policy formats<a class="headerlink" href="#lmdb-principal-and-policy-formats" title="Link to this heading">¶</a></h2>
+<p>In the LMDB KDB module, principal entries are stored in the
+“principal” database within the main LMDB environment (typically named
+“principal.mdb”), with the exception of lockout-related fields which
+are stored in the “lockout” table of the lockout LMDB environment
+(typically named “principal.lockout.mdb”). For both databases the key
+is the principal name in string form, with no zero terminator. Values
+in the “principal” database use the following binary format with
+little-endian integer encoding:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>lmdb-principal-entry <span class="o">::=</span>
+ attributes (32 bits)
+ max ticket lifetime (32 bits)
+ max renewable lifetime (32 bits)
+ principal expiration timestamp (32 bits)
+ password expiration timestamp (32 bits)
+ number of tag-length elements (16 bits)
+ number of key-data elements (16 bits)
+ tag-length entry 1 (tag-length-data)
+ tag-length entry 2 (tag-length-data)
+ ...
+ key-data entry 1 (key-data)
+ key-data entry 2 (key-data)
+ ...
+
+tag-length-data <span class="o">::=</span>
+ type tag (16 bits)
+ data length (16 bits)
+ data value
+
+key-data <span class="o">::=</span>
+ salt indicator (16 bits) [1 for default salt, 2 otherwise]
+ key version (16 bits)
+ encryption type (16 bits)
+ encrypted key length (16 bits)
+ encrypted key
+ salt type (16 bits) [omitted if salt indicator is 1]
+ salt data length (16 bits) [omitted if salt indicator is 1]
+ salt data [omitted if salt indicator is 1]
+</pre></div>
+</div>
+<p>Values in the “lockout” database have the following binary format with
+little-endian integer encoding:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>lmdb-lockout-entry <span class="o">::=</span>
+ last successful authentication timestamp (32 bits)
+ last failed authentication timestamp (32 bits)
+ failed authentication counter (32 bits)
+</pre></div>
+</div>
+<p>In the “policy” database, the lookup key is the policy name with no
+zero terminator. Values in this database use the following binary
+format with little-endian integer encoding:</p>
+<div class="highlight-bnf notranslate"><div class="highlight"><pre><span></span>lmdb-policy-entry <span class="o">::=</span>
+ minimum password lifetime (32 bits)
+ maximum password lifetime (32 bits)
+ minimum password length (32 bits)
+ minimum character classes (32 bits)
+ number of historical keys (32 bits)
+ maximum failed authentications before lockout (32 bits)
+ time interval to reset failed authentication counter (32 bits)
+ lockout duration (32 bits)
+ required principal attributes (32 bits) [currently unenforced]
+ maximum ticket lifetime (32 bits) [currently unenforced]
+ maximum renewable lifetime (32 bits) [currently unenforced]
+ allowed key/salt type specification length [32 bits]
+ allowed key/salt type specification
+ number of tag-length values (16 bits)
+ tag-length entry 1 (tag-length-data)
+ tag-length entry 2 (tag-length-data)
+ ...
+
+tag-length-data <span class="o">::=</span>
+ type tag (16 bits)
+ data length (16 bits)
+ data value
+</pre></div>
+</div>
+</section>
+</section>
+
+
+ <div class="clearer"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="sidebar">
+
+ <h2>On this page</h2>
+ <ul>
+<li><a class="reference internal" href="#">Kerberos Database (KDB) Formats</a><ul>
+<li><a class="reference internal" href="#dump-format">Dump format</a></li>
+<li><a class="reference internal" href="#tag-length-data-formats">Tag-length data formats</a><ul>
+<li><a class="reference internal" href="#per-principal-kadmin-data">Per-principal kadmin data</a></li>
+<li><a class="reference internal" href="#active-kvno-and-master-key-auxiliary-data">Active kvno and master key auxiliary data</a></li>
+<li><a class="reference internal" href="#ldap-object-information">LDAP object information</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#alias-principal-entries">Alias principal entries</a></li>
+<li><a class="reference internal" href="#db2-principal-and-policy-formats">DB2 principal and policy formats</a></li>
+<li><a class="reference internal" href="#lmdb-principal-and-policy-formats">LMDB principal and policy formats</a></li>
+</ul>
+</li>
+</ul>
+
+ <br/>
+ <h2>Table of contents</h2>
+ <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../user/index.html">For users</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../admin/index.html">For administrators</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../appdev/index.html">For application developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../plugindev/index.html">For plugin module developers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../build/index.html">Building Kerberos V5</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../basic/index.html">Kerberos V5 concepts</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="index.html">Protocols and file formats</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="ccache_file_format.html">Credential cache file format</a></li>
+<li class="toctree-l2"><a class="reference internal" href="keytab_file_format.html">Keytab file format</a></li>
+<li class="toctree-l2"><a class="reference internal" href="rcache_file_format.html">Replay cache file format</a></li>
+<li class="toctree-l2"><a class="reference internal" href="cookie.html">KDC cookie format</a></li>
+<li class="toctree-l2"><a class="reference internal" href="freshness_token.html">PKINIT freshness tokens</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">Kerberos Database (KDB) Formats</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../mitK5features.html">MIT Kerberos features</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../build_this.html">How to build this documentation from the source</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../about.html">Contributing to the MIT Kerberos Documentation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../resources.html">Resources</a></li>
+</ul>
+
+ <br/>
+ <h4><a href="../index.html">Full Table of Contents</a></h4>
+ <h4>Search</h4>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+
+ </div>
+ <div class="clearer"></div>
+ </div>
+ </div>
+
+ <div class="footer-wrapper">
+ <div class="footer" >
+ <div class="right" ><i>Release: 1.22-final</i><br />
+ &copy; <a href="../copyright.html">Copyright</a> 1985-2025, MIT.
+ </div>
+ <div class="left">
+
+ <a href="../index.html" title="Full Table of Contents"
+ >Contents</a> |
+ <a href="freshness_token.html" title="PKINIT freshness tokens"
+ >previous</a> |
+ <a href="../mitK5features.html" title="MIT Kerberos features"
+ >next</a> |
+ <a href="../genindex.html" title="General Index"
+ >index</a> |
+ <a href="../search.html" title="Enter search criteria"
+ >Search</a> |
+ <a href="mailto:krb5-bugs@mit.edu?subject=Documentation__Kerberos Database (KDB) Formats">feedback</a>
+ </div>
+ </div>
+ </div>
+
+ </body>
+</html> \ No newline at end of file