1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 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 — 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=6dbce55c"></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"><></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"><></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"><></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"><></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"><></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.1</i><br />
© <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>
|