summaryrefslogtreecommitdiffstats
path: root/doc/admin.texinfo
diff options
context:
space:
mode:
Diffstat (limited to 'doc/admin.texinfo')
-rw-r--r--doc/admin.texinfo2819
1 files changed, 2819 insertions, 0 deletions
diff --git a/doc/admin.texinfo b/doc/admin.texinfo
new file mode 100644
index 0000000000..c90a0ef138
--- /dev/null
+++ b/doc/admin.texinfo
@@ -0,0 +1,2819 @@
+\input texinfo @c -*-texinfo-*-
+@c Note: the above texinfo file must include the "doubleleftarrow"
+@c definitions added by jcb.
+@c %**start of header
+@c guide
+@setfilename kerbnet-admin.info
+@settitle Kerb*Net System Administrator's Guide
+@c @setchapternewpage odd @c chapter begins on next odd page
+@setchapternewpage on @c chapter begins on next page
+@smallbook @c Format for 7" X 9.25" paper
+@c %**end of header
+@paragraphindent 0
+@iftex
+@parskip 6pt plus 6pt
+@end iftex
+
+@include definitions.texinfo
+@set EDITION 0.9 beta
+
+@finalout @c don't print black warning boxes
+
+@titlepage
+@title @value{PRODUCT} System Administrator's Guide
+@subtitle Release: @value{RELEASE}
+@subtitle Document Edition: @value{EDITION}
+@subtitle Last updated: @value{UPDATED}
+@author @value{COMPANY}
+
+@page
+@vskip 0pt plus 1filll
+
+@include copyright.texinfo
+@end titlepage
+
+@comment node-name, next, previous, up
+@node Top, Introduction, (dir), (dir)
+
+@ifinfo
+This document describes how to administrate a @value{PRODUCT}
+installation.
+
+@include copyright.texinfo
+@end ifinfo
+
+@c The master menu is updated using emacs19's M-x texinfo-all-menus-update
+@c function. Don't forget to run M-x texinfo-every-node-update after
+@c you add a new section or subsection, or after you've rearranged the
+@c order of sections or subsections. Also, don't forget to add an @node
+@c comand before each @section or @subsection! All you need to enter
+@c is:
+@c
+@c @node New Section Name
+
+@c @section New Section Name
+@c
+@c M-x texinfo-every-node-update will take care of calculating the
+@c node's forward and back pointers.
+@c
+
+@menu
+* Introduction::
+* How Kerberos Works::
+* Administrating Kerberos Database Entries::
+* Application Servers::
+* Updates::
+* Backups of Secure Hosts::
+* Support::
+* Appendix::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Introduction, How Kerberos Works, Top, Top
+@chapter Introduction
+
+Congratulations on your purchase of @value{PRODUCT}. @value{COMPANY}
+believes @value{PRODUCT} provides the best network security available.
+Please let us know if we can be of assistance in getting your
+installation of @value{PRODUCT} set up and running.
+
+@menu
+* Why Should I use Kerberos?::
+* @value{PRODUCT} Documentation::
+* Overview of This Guide::
+@end menu
+
+@node Why Should I use Kerberos?, @value{PRODUCT} Documentation, Introduction, Introduction
+@section Why Should I use Kerberos?
+
+Since Kerberos negotiates authenticated, and optionally encrypted,
+communications between two points anywhere on the internet, it provides
+a layer of security that is not dependent on which side of a firewall
+either client is on. Since studies have shown that half of the computer
+security breaches in industry happen from @i{inside} firewalls,
+@value{PRODUCT} from @value{COMPANY} will play a vital role in the
+security of your network.
+
+@node @value{PRODUCT} Documentation, Overview of This Guide, Why Should I use Kerberos?, Introduction
+@section @value{PRODUCT} Documentation
+
+This document is one piece of the document set for @value{PRODUCT}. The
+documents, and their intended audiences, are:
+
+@include document-list.texinfo
+
+@node Overview of This Guide, , @value{PRODUCT} Documentation, Introduction
+@section Overview of This Guide
+
+The next chapter describes how Kerberos works.
+
+Chapter three describes administration of the principals in the Kerberos
+database.
+
+Chapter four describes administrative programs for manipulating the
+Kerberos database as a whole.
+
+Chapter five describes issues to consider when adding an application
+server to the database.
+
+Chapter six describes our problem reporting system.
+
+The appendices include sample configuration files, the list of Kerberos
+error messages, and a complete list of the time zones understood by
+@code{kadmin}.
+
+@node How Kerberos Works, Administrating Kerberos Database Entries, Introduction, Top
+@chapter How Kerberos Works
+
+This section provides a simplified description of a general user's
+interaction with the Kerberos system. This interaction happens
+transparently---users don't need to know and probably don't care about
+what's going on---but Kerberos administrators might find a schematic
+description of the process useful. This description glosses over a lot
+of details; for more information, see @i{Kerberos: An Authentication
+Service for Open Network Systems}, a paper presented at Winter USENIX
+1988, in Dallas, Texas. This paper can be retreived by FTP from
+@code{athena-dist.mit.edu}, in the location:
+@code{/pub/ATHENA/kerberos/doc/USENIX.ps}.
+
+@menu
+* Network Services and Their Client Programs::
+* Kerberos Tickets::
+* The Kerberos Database::
+* Kerberos Realms::
+* The Ticket-Granting Ticket::
+* Network Services and the Master Database::
+* The User--Kerberos Interaction::
+* Definitions::
+@end menu
+
+@node Network Services and Their Client Programs, Kerberos Tickets, How Kerberos Works, How Kerberos Works
+@section Network Services and Their Client Programs
+
+In an environment that provides network services, you use @dfn{client}
+programs to request @dfn{services} from @dfn{server} programs that are
+somewhere on the network. Suppose you have logged in to a workstation
+and you want to @samp{rlogin} to a typical UNIX host. You use the local
+@samp{rlogin} client program to contact the remote machine's
+@samp{rlogind} daemon.
+
+@node Kerberos Tickets, The Kerberos Database, Network Services and Their Client Programs, How Kerberos Works
+@section Kerberos Tickets
+
+Under Kerberos, the @samp{klogind} daemon allows you to login to a
+remote machine if you can provide @samp{klogind} a Kerberos ticket
+which proves your identity. In addition to the ticket, you must also
+have possession of the corresponding ticket session key. The
+combination of a ticket and the ticket's session key is known as a credential.
+
+Typically, a client program automatically obtains credentials
+identifying the person using the client program. The credentials are
+obtained from a Kerberos server that resides somewhere on the network.
+A Kerberos server maintains a database of user, server, and password
+information.
+
+@node The Kerberos Database, Kerberos Realms, Kerberos Tickets, How Kerberos Works
+@section The Kerberos Database
+
+Kerberos will give you credentials only if you have an entry in the
+Kerberos server's @dfn{Kerberos database}. Your database entry includes
+your Kerberos @dfn{principal} (an identifying string, which is often
+just your username), and your Kerberos password. Every Kerberos user
+must have an entry in this database.
+
+@node Kerberos Realms, The Ticket-Granting Ticket, The Kerberos Database, How Kerberos Works
+@section Kerberos Realms
+
+Each administrative domain will have its own Kerberos database, which
+contains information about the users and services for that particular
+site or administrative domain. This administrative domain is the
+@dfn{Kerberos realm}.
+
+Each Kerberos realm will have at least one Kerberos server, where the
+master Kerberos database for that site or administrative domain is
+stored. A Kerberos realm may also have one or more @dfn{slave servers},
+which have read-only copies of the Kerberos database that are
+periodically propagated from the master server. For more details on how
+this is done, see the ``Set Up the Slave KDCs for Database Propagation''
+and ``Propagate the Database to Each Slave KDC'' sections of the
+@value{PRODUCT} Installation Guide.
+
+@node The Ticket-Granting Ticket, Network Services and the Master Database, Kerberos Realms, How Kerberos Works
+@section The Ticket-Granting Ticket
+
+The @samp{kinit} command prompts for your password. If you enter it
+successfully, you will obtain a @dfn{ticket-granting ticket} and a
+@dfn{ticket session key} which gives you the right to use the ticket.
+This combination of the ticket and its associated key is known as your
+@dfn{credentials}. As illustrated below, client programs use your
+ticket-granting ticket credentials in order to obtain client-specific
+credentials as needed.
+
+Your credentials are stored in a @dfn{credentials cache}, which is often
+just a file in @code{/tmp}. The credentials cache is also called the
+@dfn{ticket file}, especially in Kerberos V4 documentation. Note,
+however, that a credentials cache does not have to be stored in a file.
+
+@node Network Services and the Master Database, The User--Kerberos Interaction, The Ticket-Granting Ticket, How Kerberos Works
+@section Network Services and the Master Database
+
+The master database also contains entries for all network services that
+require Kerberos authentication. Suppose that your site has a machine,
+@samp{laughter.@value{PRIMARYDOMAIN}}, that requires Kerberos
+authentication from anyone who wants to @samp{rlogin} to it. The host's
+Kerberos realm is @samp{@value{PRIMARYREALM}}.
+
+This service must be registered in the Kerberos database, using the
+proper service name, which in this case is the @dfn{principal}:
+
+@smallexample
+host/laughter.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
+@end smallexample
+
+@noindent
+The @samp{/} character separates the Kerberos @dfn{primary} (in this
+case, @samp{host}) from the @dfn{instance} (in this case,
+@samp{laughter.@value{PRIMARYDOMAIN}}); the @samp{@@} character separates
+the realm name (in this case, @samp{@value{PRIMARYREALM}}) from the rest
+of the principal. The primary, @samp{host}, denotes the name or type of
+the service that is being offered: generic host-level access to the
+machine. The instance, @samp{laughter.@value{PRIMARYDOMAIN}}, names the
+specific machine that is offering this service. There will generally be
+many different machines, each offering one particular type of service,
+and the instance serves to give each one of these servers a different
+Kerberos principal.
+
+@menu
+* The Keytab File::
+@end menu
+
+@node The Keytab File, , Network Services and the Master Database, Network Services and the Master Database
+@subsection The Keytab File
+
+For each service, there must also be a @dfn{service key} known only by
+Kerberos and the service. On the Kerberos server, the service key is
+stored in the Kerberos database.
+
+On the server host, these service keys are stored in @dfn{key tables},
+which are files known as @dfn{keytabs}.@footnote{Keytabs were called
+@dfn{srvtabs} in Kerberos V4.} For example, the service keys used by
+services that run as root are usually stored in the keytab file
+@code{/etc/v5srvtab}. @b{N.B.:} This service key is the equivalent of
+the service's password, and must be kept secure. Data which is meant to
+be read only by the service is encrypted using this key.
+
+@node The User--Kerberos Interaction, Definitions, Network Services and the Master Database, How Kerberos Works
+@section The User--Kerberos Interaction
+
+Suppose that you walk up to a host intending to login to it, and then
+@samp{rlogin} to the machine @samp{laughter}. Here's what happens:
+
+@enumerate
+@item
+You login to the workstation and use the @samp{kinit} command to get a
+ticket-granting ticket. This command prompts you for your Kerberos
+password. (On systems running the @value{PRODUCT} @samp{login} program,
+this may be done as part of the login process, not requiring the user to
+run a separate program.)
+
+@enumerate A
+@item
+The @samp{kinit} command sends your request to the Kerberos master
+server machine. The server software looks for your principal name's
+entry in the Kerberos database.
+
+@item
+If this entry exists, the Kerberos server creates and returns a
+ticket-granting ticket and the key which allows you to use it, encrypted
+by your password. If @samp{kinit} can decrypt the Kerberos reply using
+the password you provide, it stores this ticket in a credentials cache
+on your local machine for later use. The name of the credentials cache
+can be specified in the @samp{KRB5_CCNAME} environment variable. If
+this variable is not set, the name of the file will be
+@file{/tmp/krb5cc_<uid>}, where <uid> is your UNIX user-id, represented
+in decimal format.
+@end enumerate
+
+@need 1500
+@item
+Now you use the @samp{rlogin} client to access the machine
+@samp{laughter}.
+
+@example
+host% @b{rlogin laughter}
+@end example
+
+@enumerate A
+@item
+The @samp{rlogin} client checks your ticket file to see if you have a
+ticket for the @samp{host} service for @samp{laughter}. You don't, so
+@samp{rlogin} uses the credential cache's ticket-granting ticket to make
+a request to the master server's ticket-granting service.
+
+@item
+This ticket-granting service receives the request for a ticket for
+@samp{host/laughter.@value{PRIMARYDOMAIN}}, and looks in the master
+database for an entry for @samp{host/laughter.@value{PRIMARYDOMAIN}}.
+If the entry exists, the ticket-granting service issues you a ticket for
+that service. That ticket is also cached in your credentials cache.
+
+@item
+The @samp{rlogin} client now sends that ticket to the @samp{laughter}
+@samp{klogind} service program. The service program checks the ticket
+by using its own service key. If the ticket is valid, it now knows your
+identity. If you are allowed to login to @samp{laughter} (because your
+username matches one in /etc/passwd, or your Kerberos principal is in
+the appropriate @file{.k5login} file), @code{klogind} will let you
+login.
+@end enumerate
+@end enumerate
+
+@node Definitions, , The User--Kerberos Interaction, How Kerberos Works
+@section Definitions
+
+Following are definitions of some of the Kerberos terminology.
+
+@include glossary.texinfo
+
+@node Administrating Kerberos Database Entries, Application Servers, How Kerberos Works, Top
+@chapter Administrating the Kerberos Database
+
+Your Kerberos database contains all of your realm's Kerberos principals,
+their passwords, and other administrative information about each
+principal. For the most part, you will use the @code{kdb5_util} program
+to manipulate the Kerberos database as a whole, and the @code{kadmin}
+program to make changes to the entries in the database. (One notable
+exception is that users will use the @code{kpasswd} program to change
+their own passwords.) The @code{kadmin} program has its own
+command-line interface, to which you type the database administrating
+commands.
+
+@code{Kdb5_util} provides a means to create, delete, load, or dump a
+Kerberos database. It also includes a command to stash a copy of the
+master database key in a file on a KDC, so that the KDC can authenticate
+itself to the @code{kadmind} and @code{krb5kdc} daemons at boot time.
+
+@code{Kadmin} provides for the maintenance of Kerberos principals, KADM5
+policies, and service key tables (keytabs). It exists as both a
+Kerberos client, @code{kadmin}, using Kerberos authentication and an
+RPC, to operate securely from anywhere on the network, and as a local
+client, @code{kadmin.local}, intended to run directly on the KDC without
+Kerberos authentication. Other than the fact that the remote client
+uses Kerberos to authenticate the person using it, the functionalities
+of the two versions are identical. The local version is necessary to
+enable you to set up enough of the database to be able to use the remote
+version. It replaces the now obsolete @code{kdb5_edit} (except for
+database dump and load, which are provided by @code{kdb5_util}).
+
+The remote version authenticates to the KADM5 server using the service
+principal @code{kadmin/admin}. If the credentials cache contains a
+ticket for the @code{kadmin/admin} principal, and the @samp{-c
+credentials_cache} option is specified, that ticket is used to
+authenticate to KADM5. Otherwise, the @samp{-p} and @samp{-k} options
+are used to specify the client Kerberos principal name used to
+authenticate. Once kadmin has determined the principal name, it
+requests a @code{kadmin/admin} Kerberos service ticket from the KDC, and
+uses that service ticket to authenticate to KADM5.
+
+@menu
+* Kadmin Options::
+* Date Format::
+* Principals::
+* Policies::
+* Dumping a Kerberos Database to a File::
+* Restoring a Kerberos Database from a Dump File::
+* Creating a Stash File::
+* Creating and Destroying a Kerberos Database::
+* The KDC Logs::
+@end menu
+
+@node Kadmin Options, Date Format, Administrating Kerberos Database Entries, Administrating Kerberos Database Entries
+@section Kadmin Options
+
+You can invoke @code{kadmin} with any of the following options:
+
+@table @b
+@item @b{-r} @i{REALM}
+Use @i{REALM} as the default Kerberos realm for the database.
+
+@item @b{-p} @i{principal}
+Use the Kerberos principal @i{principal} to authenticate to Kerberos.
+If this option is not given, @code{kadmin} will append @code{admin} to
+either the primary principal name, the environment variable USER, or to
+the username obtained grom @code{getpwuid}, in order of preference.
+
+@item @b{-k} @i{keytab}
+Use the keytab @i{keytab} to decrypt the KDC response instead of
+prompting for a password on the TTY. In this case, the principal will
+be @samp{host/@i{hostname}}.
+
+@item @b{-c} @i{credentials cache}
+Use @i{credentials_cache} as the credentials cache. The credentials
+cache should contain a service ticket for the @code{kadmin/admin}
+service, which can be acquired with the @code{kinit} program. If this
+option is not specified, @code{kadmin} requests a new service ticket
+from the KDC, and stores it in its own temporary ccache.
+
+@item @b{-w} @i{password}
+Use @i{password} as the password instead of prompting for one on the
+TTY. Note: placing the password for a Kerberos principal with
+administration access into a shell script can be dangerous if
+unauthorized users gain read access to the script.
+
+@item @b{-q} @i{query}
+Pass @i{query} directly to @code{kadmin}. This is useful for writing
+scripts that pass specific queries to @code{kadmin}.
+@end table
+
+@node Date Format, Principals, Kadmin Options, Administrating Kerberos Database Entries
+@section Date Format
+
+Many of the @code{kadmin} commands take a duration or time as an
+argument. The date can appear in a wide variety of formats, such as:
+
+@smallexample
+@group
+1 month ago
+2 hours ago
+400000 seconds ago
+last year
+this Monday
+next Monday
+yesterday
+tomorrow
+now
+second Monday
+a fortnight ago
+3/31/92 10:00:07 PST
+January 23, 1987 10:05pm
+22:00 GMT
+@end group
+@end smallexample
+
+All of these are case-insensitive. The following is a list of all of
+the allowable keywords.
+
+@table @b
+@item Months
+january, jan, february, feb, march, mar, april, apr, may, june, jun,
+july, jul, august, aug, september, sept, sep, october, oct, november,
+nov, december, dec
+
+@item Days
+sunday, sun, monday, mon, tuesday, tues, tue, wednesday, wednes, wed,
+thursday, thurs, thur, thu, friday, fri, saturday, sat
+
+@item Units
+year, month, fortnight, week, day, hour, minute, min, second, sec
+
+@item Relative
+tomorrow, yesterday, today, now, last, this, next, first, third, fourth,
+fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, ago
+
+@item Time Zones
+@code{kadmin} recognizes abbreviations for most of the world's time
+zones. A complete listing appears in @ref{kadmin Time Zones}.
+
+@item 12-hour Time Delimiters
+am, pm
+@end table
+
+@menu
+* Principals::
+* Policies::
+* The KDC Logs::
+@end menu
+
+@node Principals, Policies, Date Format, Administrating Kerberos Database Entries
+@section Principals
+
+Each entry in the Kerberos database contains a Kerberos principal
+(@pxref{Definitions}) and the attributes and policies associated with
+that principal.
+
+@menu
+* Retrieving Information About a Principal::
+* Privileges::
+* Adding or Modifying Principals::
+* Deleting Principals::
+* Changing Passwords::
+* Renaming Principals::
+@end menu
+
+@node Retrieving Information About a Principal, Privileges, Principals, Principals
+@subsection Retrieving Information About a Principal
+
+@menu
+* Attributes::
+* Retrieving a List of Principals::
+@end menu
+
+@node Attributes, Retrieving a List of Principals, Retrieving Information About a Principal, Retrieving Information About a Principal
+@subsubsection Attributes
+
+To retrieve a listing of the attributes and/or policies associated with
+a principal, use the @code{kadmin} @code{get_principal} command, which
+requires the ``inquire'' administrative privilege. The syntax is:
+
+@smallexample
+@b{get_principal} @i{principal}
+@end smallexample
+
+@noindent The @code{get_principal} command has the alias @code{getprinc}.
+
+For example, suppose you wanted to view the attributes of the principals
+@code{@value{RANDOMUSER1}/root@@@value{PRIMARYREALM}} and
+@code{systest@@@value{PRIMARYREALM}}. You would type:
+
+@smallexample
+@group
+@b{shell%} kadmin
+@b{kadmin:} getprinc @value{RANDOMUSER1}/root
+@b{Principal: @value{RANDOMUSER1}/admin@@@value{PRIMARYREALM}
+Key version: 3
+Maximum life: 1 day 00:00:00
+Maximum renewable life: 7 days 00:00:00
+Master key version: 1
+Expires: Mon Jan 18 22:14:07 EDT 2038
+Password expires: Mon Sep 19 14:40:00 EDT 1996
+Password last changed: Mon Jan 31 02:06:40 EDT 1996
+Last modified: by @value{ADMINUSER}/admin@@@value{PRIMARYREALM}
+ on Wed Jul 13 18:27:08 EDT 1996
+Attributes: DISALLOW_FORWARDABLE, DISALLOW_PROXIABLE,
+ REQUIRES_HW_AUTH
+Salt type: DEFAULT
+kadmin:}
+@end group
+@end smallexample
+
+The @code{get_principal} command has a @code{-terse} option, which lists
+the fields as a quoted, tab-separated string. For example:
+
+@smallexample
+@group
+@b{kadmin:} getprinc -terse systest
+@b{systest@@@value{PRIMARYREALM} 3 86400 604800 1
+785926535 753241234 785900000
+@value{RANDOMUSER1}/admin@@@value{PRIMARYREALM} 786100034 0
+0
+kadmin:}
+@end group
+@end smallexample
+
+@node Retrieving a List of Principals, , Attributes, Retrieving Information About a Principal
+@subsubsection Retrieving a List of Principals
+
+To generate a listing of principals, use the @code{kadmin}
+@code{list_principals} command, which requires the ``list'' privilege.
+The syntax is:
+
+@smallexample
+@b{list_principals} [@i{expression}]
+@end smallexample
+
+@noindent where @i{expression} is a shell-style glob expression that can
+contain the characters @samp{*}, @samp{?}, @samp{[}, and @samp{]}. All
+policy names matching the expression are displayed. The
+@code{list_principals} command has the alias @code{listprincs}. For
+example:
+
+@smallexample
+@group
+@b{kadmin:} listprincs test*
+@b{test3@@@value{PRIMARYDOMAIN}
+test2@@@value{PRIMARYDOMAIN}
+test1@@@value{PRIMARYDOMAIN}
+testuser@@@value{PRIMARYDOMAIN}
+kadmin:}
+@end group
+@end smallexample
+
+@noindent If no expression is provided, all principals are printed.
+
+@node Privileges, Adding or Modifying Principals, Retrieving Information About a Principal, Principals
+@subsection Privileges
+
+Administrative privileges for the Kerberos database are stored in the
+file @code{kadm5.acl}. Each line of the file contains a principal, the
+privileges that principal has, and optionally the target to which those
+permissions apply. The privileges are represented by single letters;
+UPPER-CASE letters represent negative permissions. The permissions are:
+
+@table @b
+@itemx a
+allows the addition of principals or policies in the database.
+@itemx A
+disallows the addition of principals or policies in the database.
+@itemx d
+allows the deletion of principals or policies in the database.
+@itemx D
+disallows the deletion of principals or policies in the database.
+@itemx m
+allows the modification of principals or policies in the database.
+@itemx M
+disallows the modification of principals or policies in the database.
+@itemx c
+allows the changing of passwords for principals in the database.
+@itemx C
+disallows the changing of passwords for principals in the database.
+@itemx i
+allows inquiries to the database.
+@itemx I
+disallows inquiries to the database.
+@itemx l
+allows the listing of principals or policies in the database.
+@itemx L
+disallows the listing of principals or policies in the database.
+@itemx *
+All privileges (admcil).
+@itemx x
+All privileges (admcil); identical to ``*''.
+@end table
+
+Principals in this file can include the @b{*} wildcard. Here is an
+example of a @code{kadm5.acl} file. Note that order is important;
+permissions are determined by the first matching entry.
+
+@smallexample
+@group
+*/admin@@@value{PRIMARYREALM} *
+@value{ADMINUSER}/null@@@value{PRIMARYREALM} ADMCIL
+@value{ADMINUSER}/*@@@value{PRIMARYREALM} il
+@value{RANDOMUSER1}/root@@@value{PRIMARYREALM} cil */root@@@value{PRIMARYREALM}
+*/*@@@value{PRIMARYREALM} i
+@end group
+@end smallexample
+
+@noindent In the above file, any principal with an @code{admin} instance
+has all administrative privileges. The user @code{@value{ADMINUSER}}
+has all permissions with his @code{admin} instance,
+@code{@value{ADMINUSER}/admin@@@value{PRIMARYREALM}} (matches the first
+line). He has no permissions at all with his @code{null} instance,
+@code{@value{ADMINUSER}/null@@@value{PRIMARYREALM}} (matches the second
+line). He has @i{inquire} and @i{list} permissions with any other
+instance (matches the third line). When @code{@value{RANDOMUSER1}} is
+using her @code{root}
+instance, @code{@value{RANDOMUSER1}/root@@@value{PRIMARYREALM}}, she has
+@i{change password}, @i{inquire}, and @i{list} privileges for any other
+principal that has the instance @code{root}. Finally, any principal in
+the realm @code{@value{PRIMARYREALM}} (except for
+@code{@value{ADMINUSER}/null@@@value{PRIMARYREALM}}, as mentioned above)
+has @i{inquire} privileges.
+
+@node Adding or Modifying Principals, Deleting Principals, Privileges, Principals
+@subsection Adding or Modifying Principals
+
+To add a principal to the database, use the kadmin @code{add_principal}
+command, which requires the ``add'' administrative privilege. The
+syntax is:
+
+@smallexample
+@b{kadmin:} add_principal [@i{options}] @i{principal}
+@end smallexample
+
+To modify attributes of a principal, use the kadmin
+@code{modify_principal} command, which requires the ``modify''
+administrative privilege. The syntax is:
+
+@smallexample
+@b{kadmin:} modify_principal [@i{options}] @i{principal}
+@end smallexample
+
+@noindent
+@code{add_principal} has the aliases @code{addprinc} and
+@code{ank}@footnote{@code{ank} was the short form of the equivalent
+command using the deprecated @code{kadmin5} database administrative
+tool. It has been kept}. @code{modify_principal} has the alias @code{modprinc}.
+
+The @code{add_principal} and @code{modify_principal} commands take the
+following switches:
+
+@table @b
+@item -salt @i{salttype}
+Uses the specified salt for generating the key. The valid salt types
+are:
+
+@itemize @bullet
+@item full_name (aliases ``v5_salt'' and ``normal''; this is the default)
+@item name_only
+@item realm_only
+@item no_salt (alias ``v4_salt'')
+@end itemize
+
+@item -clearpolicy
+removes the current policy from a principal (@code{modify_principal}
+only).
+
+@item -expire @i{date}
+Sets the expiration date of the principal to @i{date}.
+
+@item -pwexpire @i{date}
+Sets the expiration date of the password to @i{date}.
+
+@item -maxlife @i{maxlife}
+Sets the maximum ticket life of the principal to @i{maxlife}.
+
+@item -kvno @i{number}
+Explicity sets the key version number to @i{number}. @value{COMPANY}
+does not recommend doing this unless there is a specific reason.
+
+@item -policy @i{policy}
+Sets the policy used by this principal. (@xref{Policies}.) If no
+policy is supplied, the principal will have no policy, and @code{kadmin}
+will print a warning message.
+
+@item @{-|+@}allow_postdated
+The ``-allow_postdated'' option prohibits this principal from obtaining
+postdated tickets. ``+allow_postdated'' clears this flag. In effect,
+``-allow_postdated'' sets the KRB5_KDB_DISALLOW_POSTDATED flag on the
+principal in the database.
+
+@item @{-|+@}allow_forwardable
+The ``-allow_forwardable'' option prohibits this principal from
+obtaining forwardable tickets. ``+allow_forwardable'' clears this flag.
+In effect, ``-allow_forwardable'' sets the KRB5_KDB_DISALLOW_FORWARDABLE
+flag on the principal in the database.
+
+@item @{-|+@}allow_renewable
+The ``-allow_renewable'' option prohibits this principal from obtaining
+renewable tickets. ``+allow_renewable'' clears this flag. In effect,
+``-allow_renewable'' sets the KRB5_KDB_DISALLOW_RENEWABLE flag on the
+principal in the database.
+
+@item @{-|+@}allow_proxiable
+The ``-allow_proxiable'' option prohibits this principal from obtaining
+proxiable tickets. ``+allow_proxiable'' clears this flag. In effect,
+``-allow_proxiable'' sets the KRB5_KDB_DISALLOW_PROXIABLE flag. on the
+principal in the database.
+
+@item @{-|+@}allow_dup_skey
+The ``-allow_dup_skey'' option disables user-to-user authentication for
+this principal by prohibiting this principal from obtaining a session
+key for another user. ``+allow_dup_skey'' clears this flag. In effect,
+``-allow_dup_skey'' sets the KRB5_KDB_DISALLOW_DUP_SKEY flag on the
+principal in the database.
+
+@item @{-|+@}requires_preauth
+The ``+requires_preauth'' option requires this principal to
+preauthenticate before being allowed to kinit. -requires_preauth clears
+this flag. In effect, +requires_preauth sets the
+KRB5_KDB_REQUIRES_PRE_AUTH flag on the principal in the database.
+
+@item @{-|+@}requires_hwauth
+The ``+requires_hwauth'' flag requires the principal to preauthenticate
+using a hardware device before being allowed to kinit.
+``-requires_hwauth'' clears this flag. In effect, ``+requires_hwauth''
+sets the KRB5_KDB_REQUIRES_HW_AUTH flag on the principal in the
+database.
+
+@item @{-|+@}allow_svr
+The ``-allow_svr'' flag prohibits the issuance of service tickets for
+this principal. ``+allow_svr'' clears this flag. In effect,
+``-allow_svr'' sets the KRB5_KDB_DISALLOW_SVR flag on the principal in
+the database.
+
+@item @{-|+@}allow_tgs_req
+The ``-allow_tgs_req'' option specifies that a Ticket-Granting Service
+(TGS) request for a service ticket for this principal is not permitted.
+You will probably never need to use this option. ``+allow_tgs_req''
+clears this flag. The default is ``+allow_tgs_req''. In effect,
+``-allow_tgs_req'' sets the KRB5_KDB_DISALLOW_TGT_BASED flag on the
+principal in the database.
+
+@item @{-|+@}allow_tix
+The ``-allow_tix'' option forbids the issuance of any tickets for this
+principal. ``+allow_tix'' clears this flag. The default is
+``+allow_tix''. In effect, ``-allow_tix'' sets the
+KRB5_KDB_DISALLOW_ALL_TIX flag on the principal in the database.
+
+@item @{-|+@}needchange
+The ``+needchange'' option sets a flag in attributes field to force a
+password change; ``-needchange'' clears it. The default is
+``-needchange''. In effect, ``+needchange'' sets the
+KRB5_KDB_REQUIRES_PWCHANGE flag on the principal in the database.
+
+@item @{-|+@}password_changing_service
+The ``+password_changing_service'' option sets a flag in the attributes
+field marking this principal as a password change service. (Again, you
+will probably never need to use this option.)
+``-password_changing_service'' clears the flag. The default is
+``-password_changing_service''. In effect, the
+``+password_changing_service'' option sets the KRB5_KDB_PWCHANGE_SERVICE
+flag on the principal in the database.
+
+@item -clearpolicy @i{policyname}
+Removes the policy @i{policyname} from the principal
+(@code{modify_principal} only).
+
+@item -randkey
+Sets the key for the principal to a random value (@code{add_principal}
+only). @value{COMPANY} recommends using this option for host keys.
+
+@item -pw @i{password}
+Sets the key of the principal to the specified string and does not
+prompt for a password (@code{add_principal} only). @value{COMPANY} does
+not recommend using this option.
+@end table
+
+If you want to just use the default values, all you need to do is:
+
+@smallexample
+@group
+@b{kadmin:} addprinc @value{RANDOMUSER1}
+@b{WARNING: no policy specified for "@value{RANDOMUSER1}@@@value{PRIMARYREALM}";
+defaulting to no policy.}
+@iftex
+@b{Enter password for principal @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type the password.}
+@b{Re-enter password for principal @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type it again.}
+@end iftex
+@ifinfo
+@b{Enter password for principal @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{<= Type the password.}
+@b{Re-enter password for principal @value{RANDOMUSER1}@@@value{PRIMARYREALM}:} @i{<=Type it again.}
+@end ifinfo
+@b{Principal "@value{RANDOMUSER1}@@@value{PRIMARYREALM}" created.
+kadmin:}
+@end group
+@end smallexample
+
+If, on the other hand, you want to set up an account that expires on
+January 1, 2000, that uses a policy called ``stduser'', with a temporary
+password (which you want the user to change immediately), you would type
+the following. (Note: each line beginning with @result{} is a
+continuation of the previous line.)
+
+@smallexample
+@group
+
+@b{kadmin:} addprinc @value{RANDOMUSER2} -expire "1/1/2000 12:01am EST" -policy stduser
+@result{} +needchange
+@iftex
+@b{Enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type the password.}
+@b{Re-enter password for principal
+@value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type it again.}
+@end iftex
+@ifinfo
+@b{Enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{<= Type the password.}
+@b{Re-enter password for principal
+@value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{<= Type it again.}
+@end ifinfo
+@b{Principal "@value{RANDOMUSER2}@@@value{PRIMARYREALM}" created.
+kadmin:}
+
+@end group
+@end smallexample
+
+If you will need cross-realm authentication, you need to add principals
+for the other realm's TGT to each realm. For example, if you need to do
+cross-realm authentication between the realms @value{PRIMARYREALM} and
+@value{SECONDREALM}, you would need to add the principals
+@samp{krbtgt/@value{SECONDREALM}@@@value{PRIMARYREALM}} and
+@samp{krbtgt/@value{PRIMARYREALM}@@@value{SECONDREALM}} to both
+databases. You need to be sure the passwords and the key version
+numbers (kvno) are the same in both databases. This may require
+explicitly setting the kvno with the @samp{-kvno} option.
+
+@node Deleting Principals, Changing Passwords, Adding or Modifying Principals, Principals
+@subsection Deleting Principals
+
+To delete a principal, use the kadmin @code{delete_principal} command,
+which requires the ``delete'' administrative privilege. The syntax is:
+
+@smallexample
+@b{delete_principal} [@b{-force}] @i{principal}
+@end smallexample
+
+@noindent @code{delete_principal} has the alias @code{delprinc}. The
+@code{-force} option causes @code{delete_principal} not to ask if you're
+sure. For example:
+
+@smallexample
+@group
+@b{kadmin:} delprinc @value{RANDOMUSER1}
+@b{Are you sure you want to delete the principal
+"@value{RANDOMUSER1}@@@value{PRIMARYREALM}"? (yes/no):} yes
+@b{Principal "@value{RANDOMUSER1}@@@value{PRIMARYREALM}" deleted.
+Make sure that you have removed this principal from
+all ACLs before reusing.
+kadmin:}
+@end group
+@end smallexample
+
+@node Changing Passwords, Renaming Principals, Deleting Principals, Principals
+@subsection Changing Passwords
+
+To change a principal's password use the kadmin @code{change_password}
+command, which requires the ``modify'' administrative privilege (unless
+the principal is changing his/her own password). The syntax is:
+
+@smallexample
+@b{change_password} [@i{options}] @i{principal}
+@end smallexample
+
+@noindent The @code{change_password} option has the alias @code{cpw}.
+@code{change_password} takes the following options:
+
+@table @b
+@item @b{-salt} @i{salttype}
+Uses the specified salt for generating the key. Salt types are the same
+as for the @code{add_principal} command (@pxref{Adding or Modifying
+Principals}).
+
+@item -randkey
+Sets the key of the principal to a random value.
+
+@item @b{-pw} @i{password}
+Sets the password to the string @i{password}. @value{COMPANY} does not
+recommend using this option.
+@end table
+
+For example:
+
+@smallexample
+@group
+@b{kadmin:} cpw @value{RANDOMUSER2}
+@iftex
+@b{Enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type the new password.}
+@b{Re-enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{@doubleleftarrow{} Type it again.}
+@end iftex
+@ifinfo
+@b{Enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{<= Type the new password.}
+@b{Re-enter password for principal @value{RANDOMUSER2}@@@value{PRIMARYREALM}:} @i{<= Type it again.}
+@end ifinfo
+@b{Password for @value{RANDOMUSER2}@@@value{PRIMARYREALM} changed.
+kadmin:}
+@end group
+@end smallexample
+
+Note that @code{change_password} will not let you change the password to
+one that is in the principal's password history.
+
+@node Renaming Principals, , Changing Passwords, Principals
+@subsection Renaming Principals
+
+To rename a principal, use the kadmin @code{rename_principal} command,
+which requires both the ``add'' and ``delete'' administrative
+privileges. The syntax is:
+
+@smallexample
+@b{rename_principal} [@b{-force}] @i{old_principal} @i{new_principal}
+@end smallexample
+
+@noindent The @code{rename_principal} command has the alias @code{renprinc}.
+
+For example:
+
+@smallexample
+@group
+@b{kadmin:} renprinc tlyutest test0
+@b{Are you sure you want to rename the principal
+"test@@@value{PRIMARYREALM}" to
+"test2@@@value{PRIMARYREALM}"? (yes/no):} yes
+@b{Principal "test@@@value{PRIMARYREALM}" renamed to
+"test2@@@value{PRIMARYREALM}".
+Make sure that you have removed "test@@@value{PRIMARYREALM}" from
+all ACLs before reusing.
+kadmin:}
+@end group
+@end smallexample
+
+@node Policies, Dumping a Kerberos Database to a File, Principals, Administrating Kerberos Database Entries
+@section Policies
+
+A policy is a set of rules governing passwords. Policies can dictate
+minimum and maximum password lifetimes, minimum number of characters and
+character classes a password must contain, and the number of old
+passwords kept in the database.
+
+@menu
+* Retrieving Policies::
+* Retrieving the List of Policies::
+* Adding or Modifying Policies::
+* Deleting Policies::
+@end menu
+
+@node Retrieving Policies, Retrieving the List of Policies, Policies, Policies
+@subsection Retrieving Policies
+
+To retrieve a policy, use the kadmin @code{get_policy} command, which
+requires the ``inquire'' administrative privilege. The syntax is:
+
+@smallexample
+@b{get_policy} [@b{-terse}] @i{policy}
+@end smallexample
+
+The @code{get_policy} command has the alias @code{getpol}. For example:
+
+@smallexample
+@group
+@b{kadmin:} get_policy admin
+@b{Policy: admin
+Maximum password life: 180 days 00:00:00
+Minimum password life: 00:00:00
+Minimum password length: 6
+Minimum number of password character classes: 2
+Number of old keys kept: 5
+Reference count: 17
+kadmin:}
+@end group
+@end smallexample
+
+@noindent The @dfn{reference count} is the number of principals using
+that policy.
+
+The @code{get_policy} command has a @code{-terse} option, which lists
+each field as a quoted, tab-separated string. For example:
+
+@smallexample
+@group
+@b{kadmin:} get_policy -terse admin
+@b{admin 15552000 0 6 2 5 17
+kadmin:}
+@end group
+@end smallexample
+
+@node Retrieving the List of Policies, Adding or Modifying Policies, Retrieving Policies, Policies
+@subsection Retrieving the List of Policies
+
+You can retrieve the list of policies with the kadmin
+@code{list_policies} command, which requires the ``list'' privilege. The
+syntax is:
+
+@smallexample
+@b{list_policies} [@i{expression}]
+@end smallexample
+
+@noindent where @i{expression} is a shell-style glob expression that can
+contain the characters *, ?, and []. All policy names matching the
+expression are displayed. The @code{list_policies} command has the alias
+@code{listpols}. For example:
+
+@smallexample
+@group
+@b{kadmin:} listpols
+@b{test-pol
+dict-only
+once-a-min
+test-pol-nopw}
+
+@b{kadmin:} listpols t*
+@b{test-pol
+test-pol-nopw
+kadmin:}
+@end group
+@end smallexample
+
+@node Adding or Modifying Policies, Deleting Policies, Retrieving the List of Policies, Policies
+@subsection Adding or Modifying Policies
+
+To add a new policy, use the kadmin @code{add_policy} command, which
+requires the ``add'' administrative privilege. The syntax is:
+
+@smallexample
+@b{add_policy} [@i{options}] @i{policy_name}
+@end smallexample
+
+To modify attributes of a principal, use the kadmin @code{modify_policy}
+command, which requires the ``modify'' administrative privilege. The
+syntax is:
+
+@smallexample
+@b{modify_policy} [@i{options}] @i{policy_name}
+@end smallexample
+
+@noindent @code{add_policy} has the alias @code{addpol}.
+@code{modify_poilcy} has the alias @code{modpol}.
+
+The @code{add_policy} and @code{modify_policy} commands take the
+following switches:
+
+@table @b
+@item -maxlife @i{time}
+Sets the maximum lifetime of a password to @i{time}.
+
+@item -minlife @i{time}
+Sets the minimum lifetime of a password to @i{time}.
+
+@item -minlength @i{length}
+Sets the minimum length of a password to @i{length} characters.
+
+@item -minclasses @i{number}
+Requires at least @i{number} of character classes in a password.
+
+@item -history @i{number}
+Sets the number of past keys kept for a principal to @i{number}.
+@end table
+
+@c **** An example here would be nice. ****
+
+@node Deleting Policies, , Adding or Modifying Policies, Policies
+@subsection Deleting Policies
+
+To delete a policy, use the @code{kadmin} @code{delete_policy} command,
+which requires the ``delete'' administrative privilege. The syntax is:
+
+@smallexample
+@b{delete_policy} @i{policy_name}
+@end smallexample
+
+@noindent The @code{delete_policy} command has the alias @code{delpol}.
+It prompts for confirmation before deletion.
+For example:
+
+@smallexample
+@group
+@b{kadmin:} delete_policy guests
+@b{Are you sure you want to delete the policy "guests"?
+(yes/no):} yes
+@b{Policy "guests" deleted.
+kadmin:}
+@end group
+@end smallexample
+
+Note that you must cancel the policy from all principals before deleting
+it. The @code{delete_policy} command will fail if it is in use by any
+principals.
+
+@node Dumping a Kerberos Database to a File, Restoring a Kerberos Database from a Dump File, Policies, Administrating Kerberos Database Entries
+@section Dumping a Kerberos Database to a File
+
+To dump a Kerberos database into a file, use the @code{kdb5_util}
+@code{dump} command on one of the KDCs. The syntax is:
+
+@smallexample
+@b{kdb5_util dump} [@b{-old}] [@b{-b6}] [@b{-ov}] [@b{-verbose}] [@i{filename}
+[@i{principals...}]]
+@end smallexample
+
+The @code{kdb5_util dump} command takes the following options:
+
+@table @b
+@itemx -old
+causes the dump to be in the Kerberos 5 Beta 5 and earlier dump format
+(``kdb5_edit load_dump version 2.0'').
+@itemx -b6
+causes the dump to be in the Kerberos 5 Beta 6 format (``kdb5_edit
+load_dump version 3.0'').
+@itemx -ov
+causes the dump to be in ovsec_adm_export format.
+@itemx -verbose
+causes the name of each principal and policy to be printed as it is
+dumped.
+@end table
+
+For example:
+
+@smallexample
+@group
+@b{shell%} kdb5_util dump dumpfile
+@b{shell%}
+@end group
+@end smallexample
+
+@smallexample
+@group
+@b{shell%} kbd5_util dump -verbose dumpfile
+@b{kadmin/admin@@@value{PRIMARYREALM}
+krbtgt/@value{PRIMARYREALM}@@@value{PRIMARYREALM}
+kadmin/history@@@value{PRIMARYREALM}
+K/M@@@value{PRIMARYREALM}
+kadmin/changepw@@@value{PRIMARYREALM}
+shell%}
+@end group
+@end smallexample
+
+@noindent
+If you specify which principals to dump, you must use the full
+principal, as in the following example. (The line beginning with
+@result{} is a continuation of the previous line.):
+
+@smallexample
+@group
+@b{shell%} kdb5_util dump -verbose dumpfile K/M@@@value{PRIMARYREALM}
+@result{} kadmin/admin@@@value{PRIMARYREALM}
+@b{kadmin/admin@@@value{PRIMARYREALM}
+K/M@@@value{PRIMARYREALM}
+shell%}
+@end group
+@end smallexample
+
+@noindent
+Otherwise, the principals will not match those in the database and will
+not be dumped:
+
+@smallexample
+@group
+@b{shell%} kdb5_util dump -verbose dumpfile K/M kadmin/admin
+@b{shell%}
+@end group
+@end smallexample
+
+@noindent
+If you do not specify a dump file, @code{kdb5_util} will dump the
+database to the standard output.
+
+@node Restoring a Kerberos Database from a Dump File, Creating a Stash File, Dumping a Kerberos Database to a File, Administrating Kerberos Database Entries
+@section Restoring a Kerberos Database from a Dump File
+
+To restore a Kerberos database dump from a file, use the
+@code{kdb5_util} @code{load} command on one of the KDCs. The syntax
+is:
+
+@smallexample
+@b{kdb5_util load} [@b{-old}] [@b{-b6}] [@b{-ov}] [@b{-verbose}] [@b{-update}]
+@i{dumpfilename} @i{dbname} [@i{admin_dbname}]
+@end smallexample
+
+The @code{kdb5_util load} command takes the following options:
+
+@table @b
+@itemx -old
+requires the dump to be in the Kerberos 5 Beta 5 and earlier dump format
+(``kdb5_edit load_dump version 2.0'').
+@itemx -b6
+requires the dump to be in the Kerberos 5 Beta 6 format (``kdb5_edit
+load_dump version 3.0'').
+@itemx -ov
+requires the dump to be in ovsec_adm_export format.
+@itemx -verbose
+causes the name of each principal and policy to be printed as it is
+dumped.
+@itemx -update
+causes records from the dump file to be updated in or added to the
+existing database.
+@end table
+
+For example:
+
+@smallexample
+@group
+@b{shell%} kdb5_util load dumpfile principal
+@b{shell%}
+@end group
+@end smallexample
+
+@smallexample
+@group
+@b{shell%} kdb5_util load -update dumpfile principal
+@b{shell%}
+@end group
+@end smallexample
+
+@noindent
+If the database file exists, and the @b{-update} flag was not given,
+@code{kdb5_util} will overwrite the existing database.
+
+@node Creating a Stash File, Creating and Destroying a Kerberos Database, Restoring a Kerberos Database from a Dump File, Administrating Kerberos Database Entries
+@section Creating a Stash File
+
+A stash file allows a KDC to authenticate itself to the database
+utilities, such as @code{kadmin}, @code{kadmind}, @code{krb5kdc}, and
+@code{kdb5_util}.
+
+To create a stash file, use the @code{kdb5_util} @code{stash} command.
+The syntax is:
+
+@smallexample
+@b{kdb5_util stash} [@b{-f} @i{keyfile}]
+@end smallexample
+
+For example:
+
+@smallexample
+@group
+@b{shell%} kdb5_util stash
+@b{kdb5_util: Cannot find/read stored master key while reading master key
+kdb5_util: Warning: proceeding without master key}
+@iftex
+@b{Enter KDC database master key:} @i{@doubleleftarrow{} Type the KDC database master password.}
+@end iftex
+@ifinfo
+@b{Enter KDC database master key:} @i{<= Type the KDC database master password.}
+@end ifinfo
+@b{shell%}
+@end group
+@end smallexample
+
+@noindent
+If you do not specify a stash file, @code{kdb5_util} will stash the key
+in the file specified in your @code{kdc.conf} file.
+
+@node Creating and Destroying a Kerberos Database, The KDC Logs, Creating a Stash File, Administrating Kerberos Database Entries
+@section Creating and Destroying a Kerberos Database
+
+If you need to create a new Kerberos database, use the @code{kdb5_util}
+@code{create} command. The syntax is:
+
+@smallexample
+@b{kdb5_util create} [@b{-s}]
+@end smallexample
+
+If you specify the @samp{-s} option, @code{kdb5_util} will stash a copy
+of the master key in a stash file. (@xref{Creating a Stash File}.) For
+example:
+
+@smallexample
+@group
+@b{shell%} @value{ROOTDIR}/sbin/kdb5_util -r @value{PRIMARYREALM} create -s
+@b{kdb5_util: No such file or directory while setting active database to '/krb5/principal'
+Initializing database '@value{ROOTDIR}/lib/krb5kdc/principal' for
+@result{} realm '@value{PRIMARYREALM}',
+master key name 'K/M@@@value{PRIMARYREALM}'
+You will be prompted for the database Master Password.
+It is important that you NOT FORGET this password.}
+@iftex
+@b{Enter KDC database master key:} @i{@doubleleftarrow{} Type the master password.}
+@b{Re-enter KDC database master key to verify:} @i{@doubleleftarrow{} Type it again.}
+@end iftex
+@ifinfo
+@b{Enter KDC database master key:} @i{<= Type the master password.}
+@b{Re-enter KDC database master key to verify:} @i{<= Type it again.}
+@end ifinfo
+@b{shell%}
+@end group
+@end smallexample
+
+@ignore
+@node The KDC Logs, , Creating and Destroying a Kerberos Database, Administrating Kerberos Database Entries
+@section The KDC Logs
+
+This will have to wait until the next release. *sigh*
+@end ignore
+
+@node Application Servers, Updates, Administrating Kerberos Database Entries, Top
+@chapter Application Servers
+
+If you need to install the @value{PRODUCT} programs on an application
+server, please refer to the @value{PRODUCT} Installation Guide. Once
+you have installed the software, you need to add that host to the
+Kerberos database (@pxref{Adding or Modifying Principals}), and generate
+a @dfn{keytab} for that host, that contains the host's key. You also
+need to make sure the host's clock is within your maximum clock skew of
+the KDCs.
+
+@menu
+* Keytabs::
+* Clock Skew::
+* Getting DNS Information Correct::
+* Configuring Your Firewall to Work With @value{PRODUCT}::
+* Enabling Users to Connect from Off-Site::
+@end menu
+
+@node Keytabs, Clock Skew, Application Servers, Application Servers
+@section Keytabs
+
+A @dfn{keytab} is a host's copy of its own keylist, which is analogous
+to a user's password. An application server that needs to authenticate
+itself to the KDC has to have a keytab that contains its own principal
+and key. Just as it is important for users to protect their passwords,
+it is equally important for hosts to protect their keytabs. You should
+always store keytab files on local disk, and make them readable only by
+root, and you should never send a keytab file over a network in the
+clear. Ideally, you should run the @code{kadmin} command to extract a
+keytab on the host on which the keytab is to reside.
+
+@menu
+* Adding Principals to Keytabs::
+* Removing Principals from Keytabs::
+@end menu
+
+@node Adding Principals to Keytabs, Removing Principals from Keytabs, Keytabs, Keytabs
+@subsection Adding Principals to Keytabs
+
+To generate a keytab, or to add a principal to an existing keytab, use
+the @code{ktadd} command from @code{kadmin}, which requires the
+``inquire'' administrative privilege. (If you use the @b{-glob}
+@i{princ_exp} option, it also requires the ``list'' administrative
+privilege.) The syntax is:
+
+@smallexample
+@b{ktadd} [@b{-k} @i{keytab}] [@b{-q}] [@i{principal} | @b{-glob} @i{princ_exp}] [@i{@dots{}}]
+@end smallexample
+
+The @code{ktadd} command takes the following switches:
+
+@table @b
+@item -k @i{keytab}
+use @i{keytab} as the keytab file. Otherwise, @code{ktadd} will use the
+default keytab file (@code{/etc/v5srvtab}).
+
+@item -q
+run in quiet mode. This causes @code{ktadd} to display less verbose
+information.
+
+@item @i{principal} | -glob @i{principal expression}
+add @i{principal}, or all principals matching @i{principal expression}
+to the keytab. The rules for @i{principal expression} are the same as
+for the kadmin @code{list_principals} (@pxref{Retrieving a List of
+Principals}) command.
+@end table
+
+For example:
+
+@smallexample
+@group
+@b{kadmin:} ktadd host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
+@b{kadmin: Entry for principal host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM} with
+ kvno 2, encryption type DES-CBC-CRC added to keytab
+ WRFILE:/etc/v5srvtab.
+kadmin:}
+@end group
+@end smallexample
+
+@smallexample
+@group
+@b{kadmin:} ktadd -k /krb5/kadmind.keytab kadmin/admin kadmin/changepw
+@b{kadmin: Entry for principal kadmin/admin@@@value{PRIMARYREALM} with
+ kvno 3, encryption type DES-CBC-CRC added to keytab
+ WRFILE:/krb5/kadmind.keytab.
+kadmin:}
+@end group
+@end smallexample
+
+@node Removing Principals from Keytabs, , Adding Principals to Keytabs, Keytabs
+@subsection Removing Principals from Keytabs
+
+To remove a principal to an existing keytab, use the kadmin
+@code{ktremove} command. The syntax is:
+
+@smallexample
+@b{ktremove} [@b{-k} @i{keytab}] [@b{-q}] @i{principal} [@i{kvno} | @b{all} | @b{old}]
+@end smallexample
+
+The @code{ktremove} command takes the following switches:
+
+@table @b
+@item -k @i{keytab}
+use @i{keytab} as the keytab file. Otherwise, @code{ktremove} will use
+the default keytab file (@code{/etc/v5srvtab}).
+
+@item -q
+run in quiet mode. This causes @code{ktremove} to display less verbose
+information.
+
+@item @i{principal}
+the principal to remove from the keytab. (Required.)
+
+@item @i{kvno}
+remove all entries for the specified principal whose Key Version Numbers
+match @i{kvno}.
+
+@item all
+remove all entries for the specified principal
+
+@item old
+remove all entries for the specified principal except those with the
+highest kvno.
+@end table
+
+For example:
+
+@smallexample
+@group
+@b{kadmin:} ktremove -k /krb5/kadmind.keytab kadmin/admin
+@b{kadmin: Entry for principal kadmin/admin with kvno 3 removed
+ from keytab WRFILE:/krb5/kadmind.keytab.
+kadmin:}
+@end group
+@end smallexample
+
+@node Clock Skew, Getting DNS Information Correct, Keytabs, Application Servers
+@section Clock Skew
+
+In order to prevent intruders from resetting their system clocks in
+order to continue to use expired tickets, @value{PRODUCT} is set up to
+reject ticket requests from any host whose clock is not within the
+specified maximum clock skew of the KDC (as specified in the
+@code{kdc.conf} file). Similarly, hosts are configured to reject
+responses from any KDC whose clock is not within the specified maximum
+clock skew of the host (as specified in the @code{krb5.conf} file). The
+default value for maximum clock skew is 300 seconds (five minutes).
+
+@value{COMPANY} suggests that you add a line to client machines'
+@code{/etc/rc} files to synchronize the machine's clock to your KDC at
+boot time. On UNIX hosts, assuming you had a kdc called
+@code{@value{KDCSERVER}} in your realm, this would be:
+
+@smallexample
+gettime -s @value{KDCSERVER}
+@end smallexample
+
+If the host is not likely to be rebooted frequently, you may also want
+to set up a cron job that adjusts the time on a regular basis.
+
+@node Getting DNS Information Correct, Configuring Your Firewall to Work With @value{PRODUCT}, Clock Skew, Application Servers
+@section Getting DNS Information Correct
+
+Several aspects of Kerberos rely on name service. In order for Kerberos
+to provide its high level of security, it is less forgiving of name
+service problems than some other parts of your network. It is important
+that your Distributed Name Service (DNS) entries and your hosts have the
+correct information.
+
+Each host's canonical name must be the fully-qualified host name
+(including the domain), and each host's IP address must reverse-resolve
+to the canonical name.
+
+Other than the @code{localhost} entry, make all entries in each
+machine's @code{/etc/hosts} file in the following form:
+
+@smallexample
+IP address fully-qualified hostname aliases
+@end smallexample
+
+Here is a sample @code{/etc/hosts} file:
+
+@smallexample
+@group
+# this is a comment
+127.0.0.1 localhost localhost@@@value{PRIMARYDOMAIN}
+@value{RANDOMHOST1IP} @value{RANDOMHOST1}.@value{PRIMARYDOMAIN} trillium wake-robin
+@end group
+@end smallexample
+
+Additionally, on Solaris machines, you need to be sure the ``hosts''
+entry in the file @code{/etc/nsswitch.conf} includes the source ``dns''
+as well as ``file''.
+
+Finally, each host's keytab file must include a host/key pair for the
+host's canonical name. You can list the keys in a keytab file by
+issuing the command @code{klist -k}. For example:
+
+@smallexample
+@group
+viola# klist -k
+Keytab name: /etc/v5srvtab
+KVNO Principal
+---- ------------------------------------------------------------
+ 1 host/@value{RANDOMHOST1}.@value{PRIMARYDOMAIN}@@@value{PRIMARYREALM}
+@end group
+@end smallexample
+
+If you telnet to the host with a fresh credentials cache (ticket file),
+and then @code{klist}, the host's service principal should be
+@i{host/fully-qualified-hostname@@REALM_NAME}.
+
+@node Configuring Your Firewall to Work With @value{PRODUCT}, Enabling Users to Connect from Off-Site, Getting DNS Information Correct, Application Servers
+@section Configuring Your Firewall to Work With @value{PRODUCT}
+
+If you need off-site users to be able to get Kerberos tickets in your
+realm, they must be able to get to your KDC. This requires either that
+you have a slave KDC outside your firewall, or you configure your
+firewall to allow UDP requests into to at least one of your KDCs, on
+whichever port the KDC is running. (The default is port 88; other ports
+may be specified in the KDC's kdc.conf file.) Similarly, if you need
+off-site users to be able to change their passwords in your realm, they
+must be able to get to your Kerberos admin server. The default port for
+the admin server is 749.
+
+If your on-site users inside your firewall will need to get to KDCs in
+other realms, you will also need to configure your firewall to allow
+outgoing TCP and UDP requests to port 88. Additionally, if they will
+need to get to any Kerberos V4 KDCs, you may also need to allow TCP and
+UDP requests to port 750. If your on-site users inside your firewall
+will need to get to Kerberos admin servers in other realms, you will
+also need to allow outgoing TCP and UDP requests to port 749.
+
+If any of your KDCs is outside your firewall, you will need to allow
+@code{kprop} requests to get through to the remote KDC. @code{Kprop}
+uses the krb5_prop service on port 754 (tcp).
+
+If you need your off-site users to have access to machines inside your
+firewall, you need to allow TCP connections from their off-site hosts on
+the appropriate ports for the programs they will be using. The
+following lines from @code{/etc/services} show the default port numbers
+for the @value{PRODUCT} programs:
+
+@smallexample
+@group
+ftp 21/tcp # Kerberos ftp and telnet use the
+telnet 23/tcp # default ports
+kerberos 88/udp kdc # Kerberos V5 KDC
+kerberos 88/tcp kdc # Kerberos V5 KDC
+klogin 543/tcp # Kerberos authenticated rlogin
+kshell 544/tcp cmd # and remote shell
+kerberos-adm 749/tcp # Kerberos 5 admin/changepw
+kerberos-adm 749/udp # Kerberos 5 admin/changepw
+krb5_prop 754/tcp # Kerberos slave propagation
+@c kpop 1109/tcp # Pop with Kerberos
+eklogin 2105/tcp # Kerberos auth. & encrypted rlogin
+krb524 4444/tcp # Kerberos 5 to 4 ticket translator
+@end group
+@end smallexample
+
+By default, @value{PRODUCT} @code{telnet} and @code{ftp} use the same
+ports as the standard @code{telnet} and @code{ftp} programs, so if you
+already allow telnet and ftp connections through your firewall, the
+@value{PRODUCT} versions will get through as well. If you do not
+already allow telnet and ftp connections through your firewall, but need
+your users to be able to use @value{PRODUCT} telnet and ftp, you can
+either allow ftp and telnet connections on the standard ports, or switch
+these programs to non-default port numbers and allow ftp and telnet
+connections on those ports to get through.
+
+@value{PRODUCT} @code{rlogin} uses the @code{klogin} service, which by
+default uses port 543. Encrypted @value{PRODUCT} rlogin uses uses the
+@code{eklogin} service, which by default uses port 2105.
+
+@value{PRODUCT} @code{rsh} uses the @code{kshell} service, which by
+default uses port 544. However, the server must be able to make a TCP
+connection from the kshell port to an arbitrary port on the client, so
+if your users are to be able to use @code{rsh} from outside your
+firewall, the server they connect to must be able to send outgoing
+packets to arbitrary port numbers. Similarly, if your users need to run
+@code{rsh} from inside your firewall to hosts outside your firewall, the
+outside server needs to be able to connect to an arbitrary port on the
+machine inside your firewall. Because @value{PRODUCT} @code{rcp} and
+@code{krdist} use @code{rsh}, the same issues apply to these programs.
+If you need to use @code{rsh} (or @code{rcp} or @code{krdist}) through
+your firewall and are concerned with the security implications of
+allowing connections to arbitrary ports, @value{COMPANY} suggests that
+you have rules that specifically name these applications and, if
+possible, list the allowed hosts.
+
+A reasonably good cookbook for configuring firewalls is available by FTP
+from @code{ftp.livingston.com}, in the location:
+@code{/pub/firewall/firewall-1.1.ps.Z}. The book @cite{UNIX System
+Security}, by David Curry, is also a good starting point.
+
+@ignore
+@node Enabling Users to Connect from Off-Site, , Configuring Your Firewall to Work With @value{PRODUCT}, Application Servers
+@section Enabling Users to Connect from Off-Site
+
+This will have to wait until the next release. *sigh*
+@end ignore
+
+@node Updates, Backups of Secure Hosts, Application Servers, Top
+@chapter Updates
+
+Because the directory into which @value{PRODUCT} installs itself
+contains the release name, it is easy to install a new release of
+@value{PRODUCT}, and to de-install an old one. If you have a problem
+with a new release, it is equally easy to revert to the earlier release.
+These procedures will also work if you are updating from any other
+version of Kerberos V5.
+
+@menu
+* Updating KDCs::
+* Updating Application Servers::
+@end menu
+
+@node Updating KDCs, Updating Application Servers, Updates, Updates
+@section Updating KDCs
+
+To update a KDC from an earlier version of @value{PRODUCT} or of
+Kerberos V5, you need to do the following:
+
+@enumerate
+@item
+Install the new software.
+@item
+Copy your @code{kdc.conf} file and stash file from the old installation
+to the new one. For example, if you were upgrading from @value{PRODUCT}
+version @value{PREVRELEASE} to version @value{RELEASE}, you would have
+to copy these files from the directory @value{PREVINSTALLDIR} to the
+directory @value{INSTALLDIR}. Be sure the new copy of the stash file
+has the correct name. (The default is @code{.k5stash}, unless you have
+specified something different in your @code{kdc.conf} file.)
+@item
+Create a dump of the old database, using whichever old command you used
+with that release (@i{e.g.,} the @code{kdb5_dump} command).
+@item
+Load the dumpfile into the new database in the new location, using the
+@code{kdb5_util} @code{load} command. Be sure to give @code{load}
+the argument for the correct dump format.
+@item
+Change any symbolic links you have (@i{e.g.},
+@code{/usr/@value{LCPRODUCT}}) so that they point to the new
+installation.
+@end enumerate
+@c Reference to upgrading from Kerberos V4 document, once it's written.
+
+@node Updating Application Servers, , Updating KDCs, Updates
+@section Updating Clients and Application Servers
+
+To update a client or application server, you need only to install the
+new release and change any symbolic links to point to the new programs.
+Other than any functionality changes in the programs, the upgrade should
+be completely user-transparent.
+@c Reference to upgrading from Kerberos V4 document, once it's written.
+
+@node Backups of Secure Hosts, Support, Updates, Top
+@chapter Backups of Secure Hosts
+
+When you back up a secure host, you should exclude the host's keytab
+file from the backup. If someone obtained a copy of the keytab from a
+backup, that person could make any host masquerade as the host whose
+keytab was compromised. This could be particularly dangerous if the
+compromised keytab was from one of your KDCs. If the machine has a disk
+crash and the keytab file is lost, it is easy to generate another keytab
+file. (@xref{Adding Principals to Keytabs}.) If you are unable to
+exclude particular files from backups, you should ensure that the
+backups are kept as secure as the host's root password.
+
+@menu
+* Backing Up the Kerberos Database::
+@end menu
+
+@node Backing Up the Kerberos Database, , Backups of Secure Hosts, Backups of Secure Hosts
+@section Backing Up the Kerberos Database
+
+It is possible that the Kerberos database could be corrupted. If this
+happens on one of the slave KDCs, you might never notice, since the next
+automatic propagation of the database would install a fresh copy.
+However, if it happens to the master KDC, the corrupted database would
+be propagated to all of the slaves during the next propagation. For
+this reason, @value{COMPANY} recommends that you back up your Kerberos
+database regularly. Because the master KDC is continuously dumping the
+database to a file in order to propagate it to the slave KDCs, it is a
+simple matter to have a cron job periodically copy the dump file to a
+secure machine elsewhere on your network. (Of course, it is important
+to make the host where these backups are stored as secure as your KDCs,
+and to encrypt its transmission across your network.) Then if your
+database becomes corrupted, you can load the most recent dump onto the
+master KDC. (@xref{Restoring a Kerberos Database from a Dump File}.)
+
+@node Support, Appendix, Backups of Secure Hosts, Top
+@chapter Support
+
+@menu
+* Supported Functionalities::
+* Using sendpr::
+@end menu
+
+@node Supported Functionalities, Using sendpr, Support, Support
+@section Supported Functionalities
+
+@node Using sendpr, , Supported Functionalities, Support
+@section Using sendpr
+
+@include send-pr.texinfo
+
+@node Appendix, , Support, Top
+@appendix Appendix
+
+@menu
+* Files::
+* krb5.conf::
+* kdc.conf::
+* Errors::
+* kadmin Time Zones::
+@end menu
+
+@node Files, krb5.conf, Appendix, Appendix
+@appendixsec Files
+
+@node krb5.conf, kdc.conf, Files, Appendix
+@appendixsec krb5.conf
+
+Normally, you should install your @code{krb5.conf} file in the directory
+@code{/etc}. However, note that you can override this default through
+the environment variable @samp{KRB5_CONFIG}.
+
+Here is an example of a generic @code{krb5.conf} file:
+
+@smallexample
+@group
+[libdefaults]
+ ticket_lifetime = 600
+ default_realm = @value{PRIMARYREALM}
+ default_tkt_enctypes = des-cbc-crc
+ default_tgs_enctypes = des-cbc-crc
+
+[realms]
+ @value{PRIMARYREALM} = @{
+ kdc = @value{KDCSERVER}.@value{PRIMARYDOMAIN}:88
+ kdc = @value{KDCSLAVE1}.@value{PRIMARYDOMAIN}:88
+ kdc = @value{KDCSLAVE2}.@value{PRIMARYDOMAIN}:88
+ admin_server = @value{KDCSERVER}.@value{PRIMARYDOMAIN}:749
+ default_domain = @value{PRIMARYDOMAIN}
+ @}
+ @}
+
+[domain_realm]
+ .@value{PRIMARYDOMAIN} = @value{PRIMARYREALM}
+ @value{PRIMARYDOMAIN} = @value{PRIMARYREALM}
+
+[logging]
+ kdc = FILE:/dev/ttyp9
+ admin_server = FILE:/dev/ttyp9
+ default = FILE:/dev/ttyp9
+@end group
+@end smallexample
+
+@iftex
+@vfill
+@end iftex
+@page
+
+Here is an example of a more extensive @code{krb5.conf} file, which
+includes a second Kerberos realm and authentication to Kerberos V4 as
+well as V5 KDCs in the realm @code{@value{PRIMARYREALM}}:
+
+@smallexample
+@group
+[libdefaults]
+ ticket_lifetime = 600
+ default_realm = @value{PRIMARYREALM}
+ default_tkt_enctypes = des-cbc-crc
+ default_tgs_enctypes = des-cbc-crc
+ krb4_srvtab = /etc/srvtab
+ krb4_config = /usr/krb4/lib/krb.conf
+ krb4_realms = /usr/krb4/lib/krb.realms
+
+[realms]
+ @value{PRIMARYREALM} = @{
+ kdc = @value{KDCSERVER}.@value{PRIMARYDOMAIN}:88
+ kdc = @value{KDCSLAVE1}.@value{PRIMARYDOMAIN}:88
+ kdc = @value{KDCSLAVE2}.@value{PRIMARYDOMAIN}:88
+ admin_server = @value{KDCSERVER}.@value{PRIMARYDOMAIN}:749
+ default_domain = @value{PRIMARYDOMAIN}
+ v4_instance_convert = @{
+ bleep = @value{PRIMARYDOMAIN}
+ @}
+ @}
+ @value{SECONDREALM} = @{
+ kdc = @value{KDCSERVER}.@value{SECONDDOMAIN}
+ kdc = @value{KDCSLAVE1}.@value{SECONDDOMAIN}
+ admin_server = @value{KDCSERVER}.@value{SECONDDOMAIN}
+ @}
+
+[domain_realm]
+ .@value{PRIMARYDOMAIN} = @value{PRIMARYREALM}
+ @value{PRIMARYDOMAIN} = @value{PRIMARYREALM}
+ .@value{SECONDDOMAIN} = @value{SECONDREALM}
+ @value{SECONDDOMAIN} = @value{SECONDREALM}
+@end group
+@end smallexample
+
+For the KDCs, add a section onto the end of the @code{krb5.conf} file
+telling where the @code{kdc.conf} file is located, as in the following
+example:
+
+@smallexample
+@group
+[kdc]
+ profile = @value{ROOTDIR}/lib/krb5kdc/kdc.conf
+
+[logging]
+ admin_server = FILE:@value{ROOTDIR}/lib/krb5kdc/kadmind.log
+ kdc = FILE:@value{ROOTDIR}/lib/krb5kdc/kdc.log
+ default = CONSOLE
+@end group
+@end smallexample
+
+@iftex
+@vfill
+@end iftex
+@page
+
+@node kdc.conf, Errors, krb5.conf, Appendix
+@appendixsec kdc.conf
+
+Normally, you should install your @code{kdc.conf} file in the directory
+@code{@value{ROOTDIR}/lib/krb5kdc}. However, note that you can override
+this default by a pointer in the KDC's @code{krb5.conf} file, or through
+the environment variable @samp{KRB5_KDC_PROFILE}.
+
+Here's an example of a @code{kdc.conf} file:
+
+@smallexample
+@group
+[kdcdefaults]
+ kdc_ports = 88,750
+
+[realms]
+ @value{PRIMARYREALM} = @{
+ profile = /etc/krb5.conf
+ database_name = @value{ROOTDIR}/lib/krb5kdc/principal
+ admin_database_name = @value{ROOTDIR}/lib/krb5kdc/principal.kadm5
+ admin_database_lockfile = @value{ROOTDIR}/lib/krb5kdc/principal.kadm5.lock
+ admin_keytab = @value{ROOTDIR}/lib/krb5kdc/kadm5.keytab
+ acl_file = @value{ROOTDIR}/lib/krb5kdc/kadm5.acl
+ dict_file = @value{ROOTDIR}/lib/krb5kdc/kadm5.dict
+ key_stash_file = @value{ROOTDIR}/lib/krb5kdc/.k5.@value{PRIMARYREALM}
+ kadmind_port = 749
+ max_life = 10h 0m 0s
+ max_renewable_life = 7d 0h 0m 0s
+ master_key_type = des-cbc-crc
+ supported_enctypes = des-cbc-crc:normal
+ @}
+@end group
+@end smallexample
+
+To add Kerberos V4 support, change the @code{supported_enctypes} line to:
+
+@smallexample
+ supported_enctypes = des-cbc-crc:normal des-cbc-crc:v4
+@end smallexample
+
+@node Errors, kadmin Time Zones, kdc.conf, Appendix
+@appendixsec Kerberos Error Messages
+
+@menu
+* Kerberos V5 Library Error Codes::
+* Kerberos V5 Database Library Error Codes::
+* Kerberos V5 Magic Numbers Error Codes::
+* ASN.1 Error Codes::
+* GSSAPI Error Codes::
+@end menu
+
+@node Kerberos V5 Library Error Codes, Kerberos V5 Database Library Error Codes, Errors, Errors
+@appendixsubsec Kerberos V5 Library Error Codes
+
+This is the Kerberos v5 library error code table. Protocol error codes
+are ERROR_TABLE_BASE_krb5 + the protocol error code number; other error
+codes start at ERROR_TABLE_BASE_krb5 + 128.
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+KRB5KDC_ERR_NONE: No error
+@item
+KRB5KDC_ERR_NAME_EXP: Client's entry in database has expired
+@item
+KRB5KDC_ERR_SERVICE_EXP: Server's entry in database has expired
+@item
+KRB5KDC_ERR_BAD_PVNO: Requested protocol version not supported
+@item
+KRB5KDC_ERR_C_OLD_MAST_KVNO: Client's key is encrypted in an old master
+key
+@item
+KRB5KDC_ERR_S_OLD_MAST_KVNO: Server's key is encrypted in an old master
+key
+@item
+KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN: Client not found in Kerberos database
+@item
+KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN: Server not found in Kerberos database
+@item
+KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE: Principal has multiple entries in
+Kerberos database
+@item
+KRB5KDC_ERR_NULL_KEY: Client or server has a null key
+@item
+KRB5KDC_ERR_CANNOT_POSTDATE: Ticket is ineligible for postdating
+@item
+KRB5KDC_ERR_NEVER_VALID: Requested effective lifetime is negative or
+too short
+@item
+KRB5KDC_ERR_POLICY: KDC policy rejects request
+@item
+KRB5KDC_ERR_BADOPTION: KDC can't fulfill requested option
+@item
+KRB5KDC_ERR_ETYPE_NOSUPP: KDC has no support for encryption type
+@item
+KRB5KDC_ERR_SUMTYPE_NOSUPP: KDC has no support for checksum type
+@item
+KRB5KDC_ERR_PADATA_TYPE_NOSUPP: KDC has no support for padata type
+@item
+KRB5KDC_ERR_TRTYPE_NOSUPP: KDC has no support for transited type
+@item
+KRB5KDC_ERR_CLIENT_REVOKED: Clients credentials have been revoked
+@item
+KRB5KDC_ERR_SERVICE_REVOKED: Credentials for server have been revoked
+@item
+KRB5KDC_ERR_TGT_REVOKED: TGT has been revoked
+@item
+KRB5KDC_ERR_CLIENT_NOTYET: Client not yet valid - try again later
+@item
+KRB5KDC_ERR_SERVICE_NOTYET: Server not yet valid - try again later
+@item
+KRB5KDC_ERR_KEY_EXP: Password has expired
+@item
+KRB5KDC_ERR_PREAUTH_FAILED: Preauthentication failed
+@item
+@iftex
+KRB5KDC_ERR_PREAUTH_REQUIRED: Additional pre-auth@-en@-ti@-ca@-tion required
+@end iftex
+@ifinfo
+KRB5KDC_ERR_PREAUTH_REQUIRED: Additional preauthentication required
+@end ifinfo
+@item
+KRB5KDC_ERR_SERVER_NOMATCH: Requested server and ticket don't match
+@item
+KRB5PLACEHOLD_27: KRB5 error code 27
+@item
+KRB5PLACEHOLD_28: KRB5 error code 28
+@item
+KRB5PLACEHOLD_29: KRB5 error code 29
+@item
+KRB5PLACEHOLD_30: KRB5 error code 30
+@item
+KRB5KRB_AP_ERR_BAD_INTEGRITY: Decrypt integrity check failed
+@item
+KRB5KRB_AP_ERR_TKT_EXPIRED: Ticket expired
+@item
+KRB5KRB_AP_ERR_TKT_NYV: Ticket not yet valid
+@item
+KRB5KRB_AP_ERR_REPEAT: Request is a replay
+@item
+KRB5KRB_AP_ERR_NOT_US: The ticket isn't for us
+@item
+KRB5KRB_AP_ERR_BADMATCH: Ticket/authenticator don't match
+@item
+KRB5KRB_AP_ERR_SKEW: Clock skew too great
+@item
+KRB5KRB_AP_ERR_BADADDR: Incorrect net address
+@item
+KRB5KRB_AP_ERR_BADVERSION: Protocol version mismatch
+@item
+KRB5KRB_AP_ERR_MSG_TYPE: Invalid message type
+@item
+KRB5KRB_AP_ERR_MODIFIED: Message stream modified
+@item
+KRB5KRB_AP_ERR_BADORDER: Message out of order
+@item
+KRB5KRB_AP_ERR_ILL_CR_TKT: Illegal cross-realm ticket
+@item
+KRB5KRB_AP_ERR_BADKEYVER: Key version is not available
+@item
+KRB5KRB_AP_ERR_NOKEY: Service key not available
+@item
+KRB5KRB_AP_ERR_MUT_FAIL: Mutual authentication failed
+@item
+KRB5KRB_AP_ERR_BADDIRECTION: Incorrect message direction
+@item
+KRB5KRB_AP_ERR_METHOD: Alternative authentication method required
+@item
+KRB5KRB_AP_ERR_BADSEQ: Incorrect sequence number in message
+@item
+KRB5KRB_AP_ERR_INAPP_CKSUM: Inappropriate type of checksum in message
+@item
+KRB5PLACEHOLD_51: KRB5 error code 51
+@item
+KRB5PLACEHOLD_52: KRB5 error code 52
+@item
+KRB5PLACEHOLD_53: KRB5 error code 53
+@item
+KRB5PLACEHOLD_54: KRB5 error code 54
+@item
+KRB5PLACEHOLD_55: KRB5 error code 55
+@item
+KRB5PLACEHOLD_56: KRB5 error code 56
+@item
+KRB5PLACEHOLD_57: KRB5 error code 57
+@item
+KRB5PLACEHOLD_58: KRB5 error code 58
+@item
+KRB5PLACEHOLD_59: KRB5 error code 59
+@item
+KRB5KRB_ERR_GENERIC: Generic error (see e-text)
+@item
+KRB5KRB_ERR_FIELD_TOOLONG: Field is too long for this implementation
+@item
+KRB5PLACEHOLD_62: KRB5 error code 62
+@item
+KRB5PLACEHOLD_63: KRB5 error code 63
+@item
+KRB5PLACEHOLD_64: KRB5 error code 64
+@item
+KRB5PLACEHOLD_65: KRB5 error code 65
+@item
+KRB5PLACEHOLD_66: KRB5 error code 66
+@item
+KRB5PLACEHOLD_67: KRB5 error code 67
+@item
+KRB5PLACEHOLD_68: KRB5 error code 68
+@item
+KRB5PLACEHOLD_69: KRB5 error code 69
+@item
+KRB5PLACEHOLD_70: KRB5 error code 70
+@item
+KRB5PLACEHOLD_71: KRB5 error code 71
+@item
+KRB5PLACEHOLD_72: KRB5 error code 72
+@item
+KRB5PLACEHOLD_73: KRB5 error code 73
+@item
+KRB5PLACEHOLD_74: KRB5 error code 74
+@item
+KRB5PLACEHOLD_75: KRB5 error code 75
+@item
+KRB5PLACEHOLD_76: KRB5 error code 76
+@item
+KRB5PLACEHOLD_77: KRB5 error code 77
+@item
+KRB5PLACEHOLD_78: KRB5 error code 78
+@item
+KRB5PLACEHOLD_79: KRB5 error code 79
+@item
+KRB5PLACEHOLD_80: KRB5 error code 80
+@item
+KRB5PLACEHOLD_81: KRB5 error code 81
+@item
+KRB5PLACEHOLD_82: KRB5 error code 82
+@item
+KRB5PLACEHOLD_83: KRB5 error code 83
+@item
+KRB5PLACEHOLD_84: KRB5 error code 84
+@item
+KRB5PLACEHOLD_85: KRB5 error code 85
+@item
+KRB5PLACEHOLD_86: KRB5 error code 86
+@item
+KRB5PLACEHOLD_87: KRB5 error code 87
+@item
+KRB5PLACEHOLD_88: KRB5 error code 88
+@item
+KRB5PLACEHOLD_89: KRB5 error code 89
+@item
+KRB5PLACEHOLD_90: KRB5 error code 90
+@item
+KRB5PLACEHOLD_91: KRB5 error code 91
+@item
+KRB5PLACEHOLD_92: KRB5 error code 92
+@item
+KRB5PLACEHOLD_93: KRB5 error code 93
+@item
+KRB5PLACEHOLD_94: KRB5 error code 94
+@item
+KRB5PLACEHOLD_95: KRB5 error code 95
+@item
+KRB5PLACEHOLD_96: KRB5 error code 96
+@item
+KRB5PLACEHOLD_97: KRB5 error code 97
+@item
+KRB5PLACEHOLD_98: KRB5 error code 98
+@item
+KRB5PLACEHOLD_99: KRB5 error code 99
+@item
+KRB5PLACEHOLD_100: KRB5 error code 100
+@item
+KRB5PLACEHOLD_101: KRB5 error code 101
+@item
+KRB5PLACEHOLD_102: KRB5 error code 102
+@item
+KRB5PLACEHOLD_103: KRB5 error code 103
+@item
+KRB5PLACEHOLD_104: KRB5 error code 104
+@item
+KRB5PLACEHOLD_105: KRB5 error code 105
+@item
+KRB5PLACEHOLD_106: KRB5 error code 106
+@item
+KRB5PLACEHOLD_107: KRB5 error code 107
+@item
+KRB5PLACEHOLD_108: KRB5 error code 108
+@item
+KRB5PLACEHOLD_109: KRB5 error code 109
+@item
+KRB5PLACEHOLD_110: KRB5 error code 110
+@item
+KRB5PLACEHOLD_111: KRB5 error code 111
+@item
++
+KRB5PLACEHOLD_112: KRB5 error code 112
+@item
+KRB5PLACEHOLD_113: KRB5 error code 113
+@item
+KRB5PLACEHOLD_114: KRB5 error code 114
+@item
+KRB5PLACEHOLD_115: KRB5 error code 115
+@item
+KRB5PLACEHOLD_116: KRB5 error code 116
+@item
+KRB5PLACEHOLD_117: KRB5 error code 117
+@item
+KRB5PLACEHOLD_118: KRB5 error code 118
+@item
+KRB5PLACEHOLD_119: KRB5 error code 119
+@item
+KRB5PLACEHOLD_120: KRB5 error code 120
+@item
+KRB5PLACEHOLD_121: KRB5 error code 121
+@item
+KRB5PLACEHOLD_122: KRB5 error code 122
+@item
+KRB5PLACEHOLD_123: KRB5 error code 123
+@item
+KRB5PLACEHOLD_124: KRB5 error code 124
+@item
+KRB5PLACEHOLD_125: KRB5 error code 125
+@item
+KRB5PLACEHOLD_126: KRB5 error code 126
+@item
+KRB5PLACEHOLD_127: KRB5 error code 127
+@item
+KRB5_ERR_RCSID: $Id$
+@item
+KRB5_LIBOS_BADLOCKFLAG: Invalid flag for file lock mode
+@item
+KRB5_LIBOS_CANTREADPWD: Cannot read password
+@item
+KRB5_LIBOS_BADPWDMATCH: Password mismatch
+@item
+KRB5_LIBOS_PWDINTR: Password read interrupted
+@item
+KRB5_PARSE_ILLCHAR: Illegal character in component name
+@item
+KRB5_PARSE_MALFORMED: Malformed representation of principal
+@item
+KRB5_CONFIG_CANTOPEN: Can't open/find configuration file
+@item
+KRB5_CONFIG_BADFORMAT: Improper format of configuration file
+@item
+KRB5_CONFIG_NOTENUFSPACE: Insufficient space to return complete
+information
+@item
+KRB5_BADMSGTYPE: Invalid message type specified for encoding
+@item
+KRB5_CC_BADNAME: Credential cache name malformed
+@item
+KRB5_CC_UNKNOWN_TYPE: Unknown credential cache type
+@item
+KRB5_CC_NOTFOUND: Matching credential not found
+@item
+KRB5_CC_END: End of credential cache reached
+@item
+KRB5_NO_TKT_SUPPLIED: Request did not supply a ticket
+@item
+KRB5KRB_AP_WRONG_PRINC: Wrong principal in request
+@item
+KRB5KRB_AP_ERR_TKT_INVALID: Ticket has invalid flag set
+@item
+KRB5_PRINC_NOMATCH: Requested principal and ticket don't match
+@item
+KRB5_KDCREP_MODIFIED: KDC reply did not match expectations
+@item
+KRB5_KDCREP_SKEW: Clock skew too great in KDC reply
+@item
+KRB5_IN_TKT_REALM_MISMATCH: Client/server realm mismatch in initial
+ticket request
+@item
+KRB5_PROG_ETYPE_NOSUPP: Program lacks support for encryption type
+@item
+KRB5_PROG_KEYTYPE_NOSUPP: Program lacks support for key type
+@item
+KRB5_WRONG_ETYPE: Requested encryption type not used in message
+@item
+KRB5_PROG_SUMTYPE_NOSUPP: Program lacks support for checksum type
+@item
+KRB5_REALM_UNKNOWN: Cannot find KDC for requested realm
+@item
+KRB5_SERVICE_UNKNOWN: Kerberos service unknown
+@item
+KRB5_KDC_UNREACH: Cannot contact any KDC for requested realm
+@item
+KRB5_NO_LOCALNAME: No local name found for principal name
+@item
+KRB5_MUTUAL_FAILED: Mutual authentication failed
+@item
+KRB5_RC_TYPE_EXISTS: Replay cache type is already registered
+@item
+KRB5_RC_MALLOC: No more memory to allocate (in replay cache code)
+@item
+KRB5_RC_TYPE_NOTFOUND: Replay cache type is unknown
+@item
+KRB5_RC_UNKNOWN: Generic unknown RC error
+@item
+KRB5_RC_REPLAY: Message is a replay
+@item
+KRB5_RC_IO: Replay I/O operation failed XXX
+@item
+KRB5_RC_NOIO: Replay cache type does not support non-volatile storage
+@item
+KRB5_RC_PARSE: Replay cache name parse/format error
+@item
+KRB5_RC_IO_EOF: End-of-file on replay cache I/O
+@item
+KRB5_RC_IO_MALLOC: No more memory to allocate (in replay cache I/O
+code)
+@item
+KRB5_RC_IO_PERM: Permission denied in replay cache code
+@item
+KRB5_RC_IO_IO: I/O error in replay cache i/o code
+@item
+KRB5_RC_IO_UNKNOWN: Generic unknown RC/IO error
+@item
+KRB5_RC_IO_SPACE: Insufficient system space to store replay information
+@item
+KRB5_TRANS_CANTOPEN: Can't open/find realm translation file
+@item
+KRB5_TRANS_BADFORMAT: Improper format of realm translation file
+@item
+KRB5_LNAME_CANTOPEN: Can't open/find lname translation database
+@item
+KRB5_LNAME_NOTRANS: No translation available for requested principal
+@item
+KRB5_LNAME_BADFORMAT: Improper format of translation database entry
+@item
+KRB5_CRYPTO_INTERNAL: Cryptosystem internal error
+@item
+KRB5_KT_BADNAME: Key table name malformed
+@item
+KRB5_KT_UNKNOWN_TYPE: Unknown Key table type
+@item
+KRB5_KT_NOTFOUND: Key table entry not found
+@item
+KRB5_KT_END: End of key table reached
+@item
+KRB5_KT_NOWRITE: Cannot write to specified key table
+@item
+KRB5_KT_IOERR: Error writing to key table
+@item
+KRB5_NO_TKT_IN_RLM: Cannot find ticket for requested realm
+@item
+KRB5DES_BAD_KEYPAR: DES key has bad parity
+@item
+KRB5DES_WEAK_KEY: DES key is a weak key
+@item
+KRB5_BAD_ENCTYPE: Bad encryption type
+@item
+KRB5_BAD_KEYSIZE: Key size is incompatible with encryption type
+@item
+KRB5_BAD_MSIZE: Message size is incompatible with encryption type
+@item
+KRB5_CC_TYPE_EXISTS: Credentials cache type is already registered.
+@item
+KRB5_KT_TYPE_EXISTS: Key table type is already registered.
+@item
+KRB5_CC_IO: Credentials cache I/O operation failed XXX
+@item
+KRB5_FCC_PERM: Credentials cache file permissions incorrect
+@item
+KRB5_FCC_NOFILE: No credentials cache file found
+@item
+KRB5_FCC_INTERNAL: Internal file credentials cache error
+@item
+KRB5_CC_WRITE: Error writing to credentials cache file
+@item
+KRB5_CC_NOMEM: No more memory to allocate (in credentials cache code)
+@item
+KRB5_CC_FORMAT: Bad format in credentials cache
+@item
+KRB5_INVALID_FLAGS: Invalid KDC option combination (library internal
+error) [for dual tgt library calls]
+@item
+KRB5_NO_2ND_TKT: Request missing second ticket [for dual tgt library
+calls]
+@item
+KRB5_NOCREDS_SUPPLIED: No credentials supplied to library routine
+@item
+KRB5_SENDAUTH_BADAUTHVERS: Bad sendauth version was sent
+@item
+KRB5_SENDAUTH_BADAPPLVERS: Bad application version was sent (via
+sendauth)
+@item
+KRB5_SENDAUTH_BADRESPONSE: Bad response (during sendauth exchange)
+@item
+KRB5_SENDAUTH_REJECTED: Server rejected authentication (during sendauth
+exchange)
+@item
+KRB5_PREAUTH_BAD_TYPE: Unsupported preauthentication type
+@item
+KRB5_PREAUTH_NO_KEY: Required preauthentication key not supplied
+@item
+KRB5_PREAUTH_FAILED: Generic preauthentication failure
+@item
+KRB5_RCACHE_BADVNO: Unsupported replay cache format version number
+@item
+KRB5_CCACHE_BADVNO: Unsupported credentials cache format version number
+@item
+KRB5_KEYTAB_BADVNO: Unsupported key table format version number
+@item
+KRB5_PROG_ATYPE_NOSUPP: Program lacks support for address type
+@item
+KRB5_RC_REQUIRED: Message replay detection requires rcache parameter
+@item
+KRB5_ERR_BAD_HOSTNAME: Hostname cannot be canonicalized
+@item
+KRB5_ERR_HOST_REALM_UNKNOWN: Cannot determine realm for host
+@item
+KRB5_SNAME_UNSUPP_NAMETYPE: Conversion to service principal undefined
+for name type
+@item
+KRB5KRB_AP_ERR_V4_REPLY: Initial Ticket response appears to be Version
+4 error
+@item
+KRB5_REALM_CANT_RESOLVE: Cannot resolve KDC for requested realm
+@item
+KRB5_TKT_NOT_FORWARDABLE: Requesting ticket can't get forwardable
+tickets
+@item
+KRB5_FWD_BAD_PRINCIPAL: Bad principal name while trying to forward
+credentials
+@item
+KRB5_GET_IN_TKT_LOOP: Looping detected inside krb5_get_in_tkt
+@item
+KRB5_CONFIG_NODEFREALM: Configuration file does not specify default
+realm
+@item
+KRB5_SAM_UNSUPPORTED: Bad SAM flags in obtain_sam_padata
+@end enumerate
+
+@node Kerberos V5 Database Library Error Codes, Kerberos V5 Magic Numbers Error Codes, Kerberos V5 Library Error Codes, Errors
+@appendixsubsec Kerberos V5 Database Library Error Codes
+
+This is the Kerberos v5 database library error code table.
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+KRB5_KDB_RCSID: $Id$
+@item
+KRB5_KDB_INUSE: Entry already exists in database
+@item
+KRB5_KDB_UK_SERROR: Database store error
+@item
+KRB5_KDB_UK_RERROR: Database read error
+@item
+KRB5_KDB_UNAUTH: Insufficient access to perform requested operation
+@item
+KRB5_KDB_NOENTRY: No such entry in the database
+@item
+KRB5_KDB_ILL_WILDCARD: Illegal use of wildcard
+@item
+KRB5_KDB_DB_INUSE: Database is locked or in use--try again later
+@item
+KRB5_KDB_DB_CHANGED: Database was modified during read
+@item
+KRB5_KDB_TRUNCATED_RECORD: Database record is incomplete or corrupted
+@item
+KRB5_KDB_RECURSIVELOCK: Attempt to lock database twice
+@item
+KRB5_KDB_NOTLOCKED: Attempt to unlock database when not locked
+@item
+KRB5_KDB_BADLOCKMODE: Invalid kdb lock mode
+@item
+KRB5_KDB_DBNOTINITED: Database has not been initialized
+@item
+KRB5_KDB_DBINITED: Database has already been initialized
+@item
+KRB5_KDB_ILLDIRECTION: Bad direction for converting keys
+@item
+KRB5_KDB_NOMASTERKEY: Cannot find master key record in database
+@item
+KRB5_KDB_BADMASTERKEY: Master key does not match database
+@item
+KRB5_KDB_INVALIDKEYSIZE: Key size in database is invalid
+@item
+KRB5_KDB_CANTREAD_STORED: Cannot find/read stored master key
+@item
+KRB5_KDB_BADSTORED_MKEY: Stored master key is corrupted
+@item
+KRB5_KDB_CANTLOCK_DB: Insufficient access to lock database
+@item
+KRB5_KDB_DB_CORRUPT: Database format error
+@item
+KRB5_KDB_BAD_VERSION: Unsupported version in database entry
+@item
+KRB5_KDB_BAD_SALTTYPE: Unsupported salt type
+@item
+KRB5_KDB_BAD_ENCTYPE: Unsupported encryption type
+@end enumerate
+
+@node Kerberos V5 Magic Numbers Error Codes, ASN.1 Error Codes, Kerberos V5 Database Library Error Codes, Errors
+@appendixsubsec Kerberos V5 Magic Numbers Error Codes
+
+This is the Kerberos v5 magic numbers error code table.
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+KV5M_NONE: Kerberos V5 magic number table
+@item
+KV5M_PRINCIPAL: Bad magic number for krb5_principal structure
+@item
+KV5M_DATA: Bad magic number for krb5_data structure
+@item
+KV5M_KEYBLOCK: Bad magic number for krb5_keyblock structure
+@item
+KV5M_CHECKSUM: Bad magic number for krb5_checksum structure
+@item
+KV5M_ENCRYPT_BLOCK: Bad magic number for krb5_encrypt_block structure
+@item
+KV5M_ENC_DATA: Bad magic number for krb5_enc_data structure
+@item
+@iftex
+KV5M_CRYPTOSYSTEM_ENTRY: Bad magic number for krb5_cryp@-to@-sys@-tem_entry
+structure
+@end iftex
+@ifinfo
+KV5M_CRYPTOSYSTEM_ENTRY: Bad magic number for krb5_cryptosystem_entry
+structure
+@end ifinfo
+@item
+KV5M_CS_TABLE_ENTRY: Bad magic number for krb5_cs_table_entry structure
+@item
+@iftex
+KV5M_CHECKSUM_ENTRY: Bad magic number for krb5_check@-sum_en@-try structure
+@end iftex
+@ifinfo
+KV5M_CHECKSUM_ENTRY: Bad magic number for krb5_checksum_entry structure
+@end ifinfo
+@item
+KV5M_AUTHDATA: Bad magic number for krb5_authdata structure
+@item
+KV5M_TRANSITED: Bad magic number for krb5_transited structure
+@item
+KV5M_ENC_TKT_PART: Bad magic number for krb5_enc_tkt_part structure
+@item
+KV5M_TICKET: Bad magic number for krb5_ticket structure
+@item
+KV5M_AUTHENTICATOR: Bad magic number for krb5_authenticator structure
+@item
+KV5M_TKT_AUTHENT: Bad magic number for krb5_tkt_authent structure
+@item
+KV5M_CREDS: Bad magic number for krb5_creds structure
+@item
+KV5M_LAST_REQ_ENTRY: Bad magic number for krb5_last_req_entry structure
+@item
+KV5M_PA_DATA: Bad magic number for krb5_pa_data structure
+@item
+KV5M_KDC_REQ: Bad magic number for krb5_kdc_req structure
+@item
+KV5M_ENC_KDC_REP_PART: Bad magic number for @*
+krb5_enc_kdc_rep_part structure
+@item
+KV5M_KDC_REP: Bad magic number for krb5_kdc_rep structure
+@item
+KV5M_ERROR: Bad magic number for krb5_error structure
+@item
+KV5M_AP_REQ: Bad magic number for krb5_ap_req structure
+@item
+KV5M_AP_REP: Bad magic number for krb5_ap_rep structure
+@item
+KV5M_AP_REP_ENC_PART: Bad magic number for @*
+krb5_ap_rep_enc_part structure
+@item
+KV5M_RESPONSE: Bad magic number for krb5_response structure
+@item
+KV5M_SAFE: Bad magic number for krb5_safe structure
+@item
+KV5M_PRIV: Bad magic number for krb5_priv structure
+@item
+KV5M_PRIV_ENC_PART: Bad magic number for krb5_priv_enc_part structure
+@item
+KV5M_CRED: Bad magic number for krb5_cred structure
+@item
+KV5M_CRED_INFO: Bad magic number for krb5_cred_info structure
+@item
+KV5M_CRED_ENC_PART: Bad magic number for krb5_cred_enc_part structure
+@item
+KV5M_PWD_DATA: Bad magic number for krb5_pwd_data structure
+@item
+KV5M_ADDRESS: Bad magic number for krb5_address structure
+@item
+KV5M_KEYTAB_ENTRY: Bad magic number for krb5_keytab_entry structure
+@item
+KV5M_CONTEXT: Bad magic number for krb5_context structure
+@item
+KV5M_OS_CONTEXT: Bad magic number for krb5_os_context structure
+@item
+KV5M_ALT_METHOD: Bad magic number for krb5_alt_method structure
+@item
+KV5M_ETYPE_INFO_ENTRY: Bad magic number for @*
+krb5_etype_info_entry structure
+@item
+KV5M_DB_CONTEXT: Bad magic number for krb5_db_context structure
+@item
+KV5M_AUTH_CONTEXT: Bad magic number for krb5_auth_context structure
+@item
+KV5M_KEYTAB: Bad magic number for krb5_keytab structure
+@item
+KV5M_RCACHE: Bad magic number for krb5_rcache structure
+@item
+KV5M_CCACHE: Bad magic number for krb5_ccache structure
+@item
+KV5M_PREAUTH_OPS: Bad magic number for krb5_preauth_ops
+@item
+KV5M_SAM_CHALLENGE: Bad magic number for krb5_sam_challenge
+@item
+KV5M_SAM_KEY: Bad magic number for krb5_sam_key
+@item
+KV5M_ENC_SAM_RESPONSE_ENC: Bad magic number for @*
+krb5_enc_sam_response_enc
+@item
+KV5M_SAM_RESPONSE: Bad magic number for krb5_sam_response
+@item
+KV5M_PREDICTED_SAM_RESPONSE: Bad magic number for
+krb5_predicted_sam_response
+@item
+KV5M_PASSWD_PHRASE_ELEMENT: Bad magic number for passwd_phrase_element
+@end enumerate
+
+@node ASN.1 Error Codes, GSSAPI Error Codes, Kerberos V5 Magic Numbers Error Codes, Errors
+@appendixsubsec ASN.1 Error Codes
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+ASN1_BAD_TIMEFORMAT: ASN.1 failed call to system time library
+@item
+ASN1_MISSING_FIELD: ASN.1 structure is missing a required field
+@item
+ASN1_MISPLACED_FIELD: ASN.1 unexpected field number
+@item
+ASN1_TYPE_MISMATCH: ASN.1 type numbers are inconsistent
+@item
+ASN1_OVERFLOW: ASN.1 value too large
+@item
+ASN1_OVERRUN: ASN.1 encoding ended unexpectedly
+@item
+ASN1_BAD_ID: ASN.1 identifier doesn't match expected value
+@item
+ASN1_BAD_LENGTH: ASN.1 length doesn't match expected value
+@item
+ASN1_BAD_FORMAT: ASN.1 badly-formatted encoding
+@item
+ASN1_PARSE_ERROR: ASN.1 parse error
+@end enumerate
+
+@node GSSAPI Error Codes, , ASN.1 Error Codes, Errors
+@appendixsubsec GSSAPI Error Codes
+
+Generic GSSAPI Errors:
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+G_BAD_SERVICE_NAME: No @ in SERVICE-NAME name string
+@item
+G_BAD_STRING_UID: STRING-UID-NAME contains nondigits
+@item
+G_NOUSER: UID does not resolve to username
+@item
+G_VALIDATE_FAILED: Validation error
+@item
+G_BUFFER_ALLOC: Couldn't allocate gss_buffer_t data
+@item
+G_BAD_MSG_CTX: Message context invalid
+@item
+G_WRONG_SIZE: Buffer is the wrong size
+@item
+G_BAD_USAGE: Credential usage type is unknown
+@item
+G_UNKNOWN_QOP: Unknown quality of protection specified
+@item
+G_BAD_HOSTNAME: Hostname in SERVICE-NAME string could not be
+canonicalized
+@end enumerate
+
+Kerberos 5 GSSAPI Errors:
+
+@c error table numbering starts at 0
+@enumerate 0
+@item
+KG_CCACHE_NOMATCH: Principal in credential cache does not match desired
+name
+@item
+KG_KEYTAB_NOMATCH: No principal in keytab matches desired name
+@item
+KG_TGT_MISSING: Credential cache has no TGT
+@item
+KG_NO_SUBKEY: Authenticator has no subkey
+@item
+KG_CONTEXT_ESTABLISHED: Context is already fully established
+@item
+KG_BAD_SIGN_TYPE: Unknown signature type in token
+@item
+KG_BAD_LENGTH: Invalid field length in token
+@item
+KG_CTX_INCOMPLETE: Attempt to use incomplete security context
+@item
+KG_CONTEXT: Bad magic number for krb5_gss_ctx_id_t
+@item
+KG_CRED: Bad magic number for krb5_gss_cred_id_t
+@item
+KG_ENC_DESC: Bad magic number for krb5_gss_enc_desc
+@end enumerate
+
+@node kadmin Time Zones, , Errors, Appendix
+@appendixsec kadmin Time Zones
+
+This is a complete listing of the time zones recognized by the
+@code{kadmin} command.
+
+@table @b
+@itemx gmt
+Greenwich Mean Time
+@itemx ut, utc
+Universal Time (Coordinated).
+@itemx wet
+Western European Time. (Same as GMT.)
+@itemx bst
+British Summer Time. (1 hour ahead of GMT.)
+@itemx wat
+West Africa Time. (1 hour behind GMT.)
+@itemx at
+Azores Time. (2 hours behind GMT.)
+@itemx bst
+Brazil Standard Time. (3 hours behind GMT.) Note that the abbreviation
+BST also stands for British Summer Time.
+@itemx gst
+Greenland Standard Time. (3 hours behind GMT.) Note that the
+abbreviation GST also stands for Guam Standard Time.
+@itemx nft
+Newfoundland Time. (3.5 hours behind GMT.)
+@itemx nst
+Newfoundland Standard Time. (3.5 hours behind GMT.)
+@itemx ndt
+Newfoundland Daylight Time. (2.5 hours behind GMT.)
+@itemx ast
+Atlantic Standard Time. (4 hours behind GMT.)
+@itemx adt
+Atlantic Daylight Time. (3 hours behind GMT.)
+@itemx est
+Eastern Standard Time. (5 hours behind GMT.)
+@itemx edt
+Eastern Daylight Time. (4 hours behind GMT.)
+@itemx cst
+Central Standard Time. (6 hours behind GMT.)
+@itemx cdt
+Central Daylight Time. (5 hours behind GMT.)
+@itemx mst
+Mountain Standard Time. (7 hours behind GMT.)
+@itemx mdt
+Mountain Daylight Time. (6 hours behind GMT.)
+@itemx pst
+Pacific Standard Time. (8 hours behind GMT.)
+@itemx pdt
+Pacific Daylight Time. (7 hours behind GMT.)
+@itemx yst
+Yukon Standard Time. (9 hours behind GMT.)
+@itemx ydt
+Yukon Daylight Time. (8 hours behind GMT.)
+@itemx hst
+Hawaii Standard Time. (10 hours behind GMT.)
+@itemx hdt
+Hawaii Daylight Time. (9 hours behind GMT.)
+@itemx cat
+Central Alaska Time. (10 hours behind GMT.)
+@itemx ahst
+Alaska-Hawaii Standard Time. (10 hours behind GMT.)
+@itemx nt
+Nome Time. (11 hours behind GMT.)
+@itemx idlw
+International Date Line West Time. (12 hours behind GMT.)
+@itemx cet
+Central European Time. (1 hour ahead of GMT.)
+@itemx met
+Middle European Time. (1 hour ahead of GMT.)
+@itemx mewt
+Middle European Winter Time. (1 hour ahead of GMT.)
+@itemx mest
+Middle European Summer Time. (2 hours ahead of GMT.)
+@itemx swt
+Swedish Winter Time. (1 hour ahead of GMT.)
+@itemx sst
+Swedish Summer Time. (1 hours ahead of GMT.)
+@itemx fwt
+French Winter Time. (1 hour ahead of GMT.)
+@itemx fst
+French Summer Time. (2 hours ahead of GMT.)
+@itemx eet
+Eastern Europe Time; Russia Zone 1. (2 hours ahead of GMT.)
+@itemx bt
+Baghdad Time; Russia Zone 2. (3 hours ahead of GMT.)
+@itemx it
+Iran Time. (3.5 hours ahead of GMT.)
+@itemx zp4
+Russia Zone 3. (4 hours ahead of GMT.)
+@itemx zp5
+Russia Zone 4. (5 hours ahead of GMT.)
+@itemx ist
+Indian Standard Time. (5.5 hours ahead of GMT.)
+@itemx zp6
+Russia Zone 5. (6 hours ahead of GMT.)
+@itemx nst
+North Sumatra Time. (6.5 hours ahead of GMT.) Note that the
+abbreviation NST is also used for Newfoundland Stanard Time.
+@itemx sst
+South Sumatra Time; Russia Zone 6. (7 hours ahead of GMT.) Note that
+SST is also Swedish Summer Time.
+@itemx wast
+West Australian Standard Time. (7 hours ahead of GMT.)
+@itemx wadt
+West Australian Daylight Time. (8 hours ahead of GMT.)
+@itemx jt
+Java Time. (7.5 hours ahead of GMT.)
+@itemx cct
+China Coast Time; Russia Zone 7. (8 hours ahead of GMT.)
+@itemx jst
+Japan Standard time; Russia Zone 8. (9 hours ahead of GMT.)
+@itemx kst
+Korean Standard Time. (9 hours ahead of GMT.)
+@itemx cast
+Central Australian Standard Time. (9.5 hours ahead of GMT.)
+@itemx cadt
+Central Australian Daylight Time. (10.5 hours ahead of GMT.)
+@itemx east
+Eastern Australian Standard Time. (10 hours ahead of GMT.)
+@itemx eadt
+Eastern Australian Daylight Time. (11 hours ahead of GMT.)
+@itemx gst
+Guam Standard Time; Russia Zone 9. (10 hours ahead of GMT.)
+@itemx kdt
+Korean Daylight Time. (10 hours ahead of GMT.)
+@itemx nzt
+New Zealand Time. (12 hours ahead of GMT.)
+@itemx nzst
+New Zealand Standard Time. (12 hours ahead of GMT.)
+@itemx nzdt
+New Zealand Daylight Time. (13 hours ahead of GMT.)
+@itemx idle
+International Date Line East. (12 hours ahead of GMT.)
+@end table
+
+@contents
+@bye