--- /dev/null
+
+
+
+KDESTROY(1) BSD Reference Manual KDESTROY(1)
+
+
+N\bNA\bAM\bME\bE
+ kdestroy - destroy Kerberos tickets
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ k\bkd\bde\bes\bst\btr\bro\boy\by [ -\b-f\bf ] [ -\b-q\bq ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ The _\bk_\bd_\be_\bs_\bt_\br_\bo_\by utility destroys the user's active Kerberos
+ authorization tickets by writing zeros to the file that
+ contains them. If the ticket file does not exist, _\bk_\bd_\be_\b-
+ _\bs_\bt_\br_\bo_\by displays a message to that effect.
+
+ After overwriting the file, _\bk_\bd_\be_\bs_\bt_\br_\bo_\by removes the file from
+ the system. The utility displays a message indicating the
+ success or failure of the operation. If _\bk_\bd_\be_\bs_\bt_\br_\bo_\by is
+ unable to destroy the ticket file, the utility will warn
+ you by making your terminal beep.
+
+ In the Athena workstation environment, the _\bt_\bo_\be_\bh_\bo_\bl_\bd service
+ automatically destroys your tickets when you end a work-
+ station session. If your site does not provide a similar
+ ticket-destroying mechanism, you can place the _\bk_\bd_\be_\bs_\bt_\br_\bo_\by
+ command in your _\b._\bl_\bo_\bg_\bo_\bu_\bt file so that your tickets are
+ destroyed automatically when you logout.
+
+ The options to _\bk_\bd_\be_\bs_\bt_\br_\bo_\by are as follows:
+
+ -\b-f\bf _\bk_\bd_\be_\bs_\bt_\br_\bo_\by runs without displaying the status mes-
+ sage.
+
+ -\b-q\bq _\bk_\bd_\be_\bs_\bt_\br_\bo_\by will not make your terminal beep if it
+ fails to destroy the tickets.
+
+F\bFI\bIL\bLE\bES\bS
+ KRBTKFILE environment variable if set, otherwise
+ /tmp/tkt[uid]
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), kinit(1), klist(1)
+
+B\bBU\bUG\bGS\bS
+ Only the tickets in the user's current ticket file are
+ destroyed. Separate ticket files are used to hold root
+ instance and password changing tickets. These files
+ should probably be destroyed too, or all of a user's tick-
+ ets kept in a single ticket file.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+ Clifford Neuman, MIT Project Athena
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KDESTROY(1) BSD Reference Manual KDESTROY(1)
+
+
+ Bill Sommerfeld, MIT Project Athena
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(1) BSD Reference Manual KERBEROS(1)
+
+
+N\bNA\bAM\bME\bE
+ kerberos - introduction to the Kerberos system
+
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ The Kerberos system authenticates individual users in a
+ network environment. After authenticating yourself to
+ Kerberos, you can use network utilities such as _\br_\bl_\bo_\bg_\bi_\bn,
+ _\br_\bc_\bp, and _\br_\bs_\bh without having to present passwords to remote
+ hosts and without having to bother with _\b._\br_\bh_\bo_\bs_\bt_\bs files.
+ Note that these utilities will work without passwords only
+ if the remote machines you deal with support the Kerberos
+ system. All Athena timesharing machines and public work-
+ stations support Kerberos.
+
+ Before you can use Kerberos, you must register as an
+ Athena user, and you must make sure you have been added to
+ the Kerberos database. You can use the _\bk_\bi_\bn_\bi_\bt command to
+ find out. This command tries to log you into the Kerberos
+ system. _\bk_\bi_\bn_\bi_\bt will prompt you for a username and pass-
+ word. Enter your username and password. If the utility
+ lets you login without giving you a message, you have
+ already been registered.
+
+ If you enter your username and _\bk_\bi_\bn_\bi_\bt responds with this
+ message:
+
+ Principal unknown (kerberos)
+
+ you haven't been registered as a Kerberos user. See your
+ system administrator.
+
+ A Kerberos name contains three parts. The first is the
+ _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl _\bn_\ba_\bm_\be_\b, which is usually a user's or service's
+ name. The second is the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b, which in the case of a
+ user is usually null. Some users may have privileged
+ instances, however, such as ``root'' or ``admin''. In the
+ case of a service, the instance is the name of the machine
+ on which it runs; i.e. there can be an _\br_\bl_\bo_\bg_\bi_\bn service run-
+ ning on the machine ABC, which is different from the
+ rlogin service running on the machine XYZ. The third part
+ of a Kerberos name is the _\br_\be_\ba_\bl_\bm_\b. The realm corresponds to
+ the Kerberos service providing authentication for the
+ principal. For example, at MIT there is a Kerberos run-
+ ning at the Laboratory for Computer Science and one run-
+ ning at Project Athena.
+
+ When writing a Kerberos name, the principal name is sepa-
+ rated from the instance (if not null) by a period, and the
+ realm (if not the local realm) follows, preceded by an
+ ``@'' sign. The following are examples of valid Kerberos
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(1) BSD Reference Manual KERBEROS(1)
+
+
+ names:
+
+ billb
+ jis.admin
+ srz@lcs.mit.edu
+ treese.root@athena.mit.edu
+
+ When you authenticate yourself with Kerberos, through
+ either the workstation _\bt_\bo_\be_\bh_\bo_\bl_\bd system or the _\bk_\bi_\bn_\bi_\bt com-
+ mand, Kerberos gives you an initial Kerberos _\bt_\bi_\bc_\bk_\be_\bt. (A
+ Kerberos ticket is an encrypted protocol message that pro-
+ vides authentication.) Kerberos uses this ticket for net-
+ work utilities such as _\br_\bl_\bo_\bg_\bi_\bn and _\br_\bc_\bp. The ticket trans-
+ actions are done transparently, so you don't have to worry
+ about their management.
+
+ Note, however, that tickets expire. Privileged tickets,
+ such as root instance tickets, expire in a few minutes,
+ while tickets that carry more ordinary privileges may be
+ good for several hours or a day, depending on the instal-
+ lation's policy. If your login session extends beyond the
+ time limit, you will have to re-authenticate yourself to
+ Kerberos to get new tickets. Use the _\bk_\bi_\bn_\bi_\bt command to re-
+ authenticate yourself.
+
+ If you use the _\bk_\bi_\bn_\bi_\bt command to get your tickets, make
+ sure you use the _\bk_\bd_\be_\bs_\bt_\br_\bo_\by command to destroy your tickets
+ before you end your login session. You should probably
+ put the _\bk_\bd_\be_\bs_\bt_\br_\bo_\by command in your _\b._\bl_\bo_\bg_\bo_\bu_\bt file so that your
+ tickets will be destroyed automatically when you logout.
+ For more information about the _\bk_\bi_\bn_\bi_\bt and _\bk_\bd_\be_\bs_\bt_\br_\bo_\by com-
+ mands, see the _\bk_\bi_\bn_\bi_\bt_\b(_\b1_\b) and _\bk_\bd_\be_\bs_\bt_\br_\bo_\by_\b(_\b1_\b) manual pages.
+
+ Currently, Kerberos supports the following network ser-
+ vices: _\br_\bl_\bo_\bg_\bi_\bn, _\br_\bs_\bh, and _\br_\bc_\bp. Other services are being
+ worked on, such as the _\bp_\bo_\bp mail system and NFS (network
+ file system), but are not yet available.
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kdestroy(1), kinit(1), klist(1), kpasswd(1), des_crypt(3),
+ kerberos(3), kadmin(8)
+
+B\bBU\bUG\bGS\bS
+ Kerberos will not do authentication forwarding. In other
+ words, if you use _\br_\bl_\bo_\bg_\bi_\bn to login to a remote host, you
+ cannot use Kerberos services from that host until you
+ authenticate yourself explicitly on that host. Although
+ you may need to authenticate yourself on the remote host,
+ be aware that when you do so, _\br_\bl_\bo_\bg_\bi_\bn sends your password
+ across the network in clear text.
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(1) BSD Reference Manual KERBEROS(1)
+
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+ Clifford Neuman, MIT Project Athena
+
+ The following people helped out on various aspects of the
+ system:
+
+ Jeff Schiller designed and wrote the administration server
+ and its user interface, kadmin. He also wrote the dbm
+ version of the database management system.
+
+ Mark Colan developed the Kerberos versions of _\br_\bl_\bo_\bg_\bi_\bn, _\br_\bs_\bh,
+ and _\br_\bc_\bp, as well as contributing work on the servers.
+
+ John Ostlund developed the Kerberos versions of _\bp_\ba_\bs_\bs_\bw_\bd and
+ _\bu_\bs_\be_\br_\br_\be_\bg.
+
+ Stan Zanarotti pioneered Kerberos in a foreign realm
+ (LCS), and made many contributions based on that experi-
+ ence.
+
+ Many people contributed code and/or useful ideas, includ-
+ ing Jim Aspnes, Bob Baldwin, John Barba, Richard Basch,
+ Jim Bloom, Bill Bryant, Rob French, Dan Geer, David
+ Jedlinsky, John Kohl, John Kubiatowicz, Bob McKie, Brian
+ Murphy, Ken Raeburn, Chris Reed, Jon Rochlis, Mike
+ Shanzer, Bill Sommerfeld, Jennifer Steiner, Ted Ts'o, and
+ Win Treese.
+
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986 Massachusetts Institute of Technology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
--- /dev/null
+
+
+
+KINIT(1) BSD Reference Manual KINIT(1)
+
+
+N\bNA\bAM\bME\bE
+ kinit - Kerberos login utility
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ k\bki\bin\bni\bit\bt [ -\b-i\bir\brv\bvl\bl ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ The _\bk_\bi_\bn_\bi_\bt command is used to login to the Kerberos authen-
+ tication and authorization system. Note that only regis-
+ tered Kerberos users can use the Kerberos system. For
+ information about registering as a Kerberos user, see the
+ _\bk_\be_\br_\bb_\be_\br_\bo_\bs_\b(_\b1_\b) manual page.
+
+ If you are logged in to a workstation that is running the
+ _\bt_\bo_\be_\bh_\bo_\bl_\bd service, you do not have to use _\bk_\bi_\bn_\bi_\bt_\b. The _\bt_\bo_\be_\b-
+ _\bh_\bo_\bl_\bd login procedure will log you into Kerberos automati-
+ cally. You will need to use _\bk_\bi_\bn_\bi_\bt only in those situa-
+ tions in which your original tickets have expired. (Tick-
+ ets expire in about a day.) Note as well that _\bt_\bo_\be_\bh_\bo_\bl_\bd
+ will automatically destroy your tickets when you logout
+ from the workstation.
+
+ When you use _\bk_\bi_\bn_\bi_\bt without options, the utility prompts
+ for your username and Kerberos password, and tries to
+ authenticate your login with the local Kerberos server.
+
+ If Kerberos authenticates the login attempt, _\bk_\bi_\bn_\bi_\bt
+ retrieves your initial ticket and puts it in the ticket
+ file specified by your KRBTKFILE environment variable. If
+ this variable is undefined, your ticket will be stored in
+ the _\b/_\bt_\bm_\bp directory, in the file _\bt_\bk_\bt_\bu_\bi_\bd _\b, where _\bu_\bi_\bd speci-
+ fies your user identification number.
+
+ If you have logged in to Kerberos without the benefit of
+ the workstation _\bt_\bo_\be_\bh_\bo_\bl_\bd system, make sure you use the _\bk_\bd_\be_\b-
+ _\bs_\bt_\br_\bo_\by command to destroy any active tickets before you end
+ your login session. You may want to put the _\bk_\bd_\be_\bs_\bt_\br_\bo_\by com-
+ mand in your _\b._\bl_\bo_\bg_\bo_\bu_\bt file so that your tickets will be
+ destroyed automatically when you logout.
+
+ The options to _\bk_\bi_\bn_\bi_\bt are as follows:
+
+ -\b-i\bi _\bk_\bi_\bn_\bi_\bt prompts you for a Kerberos instance.
+
+ -\b-r\br _\bk_\bi_\bn_\bi_\bt prompts you for a Kerberos realm. This
+ option lets you authenticate yourself with a remote
+ Kerberos server.
+
+ -\b-v\bv Verbose mode. _\bk_\bi_\bn_\bi_\bt prints the name of the ticket
+ file used, and a status message indicating the suc-
+ cess or failure of your login attempt.
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KINIT(1) BSD Reference Manual KINIT(1)
+
+
+ -\b-l\bl _\bk_\bi_\bn_\bi_\bt prompts you for a ticket lifetime in minutes.
+ Due to protocol restrictions in Kerberos Version 4,
+ this value must be between 5 and 1275 minutes.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), kdestroy(1), klist(1), toehold(1)
+
+B\bBU\bUG\bGS\bS
+ The -\b-r\br option has not been fully implemented.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+ Clifford Neuman, MIT Project Athena
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
--- /dev/null
+
+
+
+KLIST(1) BSD Reference Manual KLIST(1)
+
+
+N\bNA\bAM\bME\bE
+ klist - list currently held Kerberos tickets
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ k\bkl\bli\bis\bst\bt [ -\b-s\bs | -\b-t\bt ] [ -\b-f\bfi\bil\ble\be name ] [ -\b-s\bsr\brv\bvt\bta\bab\bb ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bl_\bi_\bs_\bt prints the name of the tickets file and the identity
+ of the principal the tickets are for (as listed in the
+ tickets file), and lists the principal names of all Ker-
+ beros tickets currently held by the user, along with the
+ issue and expire time for each authenticator. Principal
+ names are listed in the form _\bn_\ba_\bm_\be_\b._\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b@_\br_\be_\ba_\bl_\bm_\b, with the
+ '.' omitted if the instance is null, and the '@' omitted
+ if the realm is null.
+
+ If given the -\b-s\bs option, _\bk_\bl_\bi_\bs_\bt does not print the issue and
+ expire times, the name of the tickets file, or the iden-
+ tity of the principal.
+
+ If given the -\b-t\bt option, k\bkl\bli\bis\bst\bt checks for the existence of
+ a non-expired ticket-granting-ticket in the ticket file.
+ If one is present, it exits with status 0, else it exits
+ with status 1. No output is generated when this option is
+ specified.
+
+ If given the -\b-f\bfi\bil\ble\be option, the following argument is used
+ as the ticket file. Otherwise, if the K\bKR\bRB\bBT\bTK\bKF\bFI\bIL\bLE\bE environ-
+ ment variable is set, it is used. If this environment
+ variable is not set, the file /\b/t\btm\bmp\bp/\b/t\btk\bkt\bt[\b[u\bui\bid\bd]\b] is used, where
+ u\bui\bid\bd is the current user-id of the user.
+
+ If given the -\b-s\bsr\brv\bvt\bta\bab\bb option, the file is treated as a ser-
+ vice key file, and the names of the keys contained therein
+ are printed. If no file is specified with a -\b-f\bfi\bil\ble\be option,
+ the default is _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bs_\br_\bv_\bt_\ba_\bb.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/krb.conf
+ to get the name of the local realm
+
+ /tmp/tkt[uid] as the default ticket file ([uid] is
+ the decimal UID of the user).
+
+ /etc/kerberosIV/srvtab
+ as the default service key file
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), kinit(1), kdestroy(1)
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KLIST(1) BSD Reference Manual KLIST(1)
+
+
+B\bBU\bUG\bGS\bS
+ When reading a file as a service key file, very little
+ sanity or error checking is performed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
--- /dev/null
+
+
+
+KSRVTGT(1) BSD Reference Manual KSRVTGT(1)
+
+
+N\bNA\bAM\bME\bE
+ ksrvtgt - fetch and store Kerberos ticket-granting-ticket
+ using a service key
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ k\bks\bsr\brv\bvt\btg\bgt\bt name instance [[realm] srvtab]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bs_\br_\bv_\bt_\bg_\bt retrieves a ticket-granting ticket with a lifetime
+ of five (5) minutes for the principal _\bn_\ba_\bm_\be_\b._\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b@_\br_\be_\ba_\bl_\bm
+ (or _\bn_\ba_\bm_\be_\b._\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b@_\bl_\bo_\bc_\ba_\bl_\br_\be_\ba_\bl_\bm if _\br_\be_\ba_\bl_\bm is not supplied on
+ the command line), decrypts the response using the service
+ key found in _\bs_\br_\bv_\bt_\ba_\bb (or in /\b/e\bet\btc\bc/\b/k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/s\bsr\brv\bvt\bta\bab\bb if
+ _\bs_\br_\bv_\bt_\ba_\bb is not specified on the command line), and stores
+ the ticket in the standard ticket cache.
+
+ This command is intended primarily for use in shell
+ scripts and other batch-type facilities.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "Generic kerberos failure (kfailure)" can indicate a whole
+ range of problems, the most common of which is the inabil-
+ ity to read the service key file.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/krb.conf
+ to get the name of the local realm.
+
+ /tmp/tkt[uid] The default ticket file.
+
+ /etc/kerberosIV/srvtab
+ The default service key file.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), kinit(1), kdestroy(1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+REGISTER(1) BSD Reference Manual REGISTER(1)
+
+
+N\bNA\bAM\bME\bE
+ register - register with Kerberos
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ r\bre\beg\bgi\bis\bst\bte\ber\br
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ The _\br_\be_\bg_\bi_\bs_\bt_\be_\br command is used to register a new user with
+ Kerberos. The Kerberos server keeps record of certain
+ trusted hosts from which it will accept new registrations.
+ If the host on which _\br_\be_\bg_\bi_\bs_\bt_\be_\br is run is trusted by Ker-
+ beros, the user is asked for his current password, and
+ then a new password to be used with Kerberos. A user may
+ only register with Kerberos one time.
+
+F\bFI\bIL\bLE\bES\bS
+ /.update.keyxx.xx.xx.xx shared DES key with server
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ registerd(8), kerberos(1)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "Principal not unique" if the user already exists in the
+ Kerberos database.
+ "Permission Denied," if the host on which register is
+ being run is untrusted.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4.4 Berkeley Distribution June 1, 1993 1
+
+
+
+
+
--- /dev/null
+
+
+
+ACL_CHECK(3) BSD Programmer's Manual ACL_CHECK(3)
+
+
+N\bNA\bAM\bME\bE
+ acl_canonicalize_principal, acl_check, acl_exact_match,
+ acl_add, acl_delete, acl_initialize - access control list
+ routines
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ c\bcc\bc <\b<f\bfi\bil\ble\bes\bs>\b> -\b-l\bla\bac\bcl\bl -\b-l\blk\bkr\brb\bb
+
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bkr\brb\bb.\b.h\bh>\b>
+
+ a\bac\bcl\bl_\b_c\bca\ban\bno\bon\bni\bic\bca\bal\bli\biz\bze\be_\b_p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl(\b(p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl,\b, b\bbu\buf\bf)\b)
+ c\bch\bha\bar\br *\b*p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl;\b;
+ c\bch\bha\bar\br *\b*b\bbu\buf\bf;\b;
+
+ a\bac\bcl\bl_\b_c\bch\bhe\bec\bck\bk(\b(a\bac\bcl\bl,\b, p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl)\b)
+ c\bch\bha\bar\br *\b*a\bac\bcl\bl;\b;
+ c\bch\bha\bar\br *\b*p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl;\b;
+
+ a\bac\bcl\bl_\b_e\bex\bxa\bac\bct\bt_\b_m\bma\bat\btc\bch\bh(\b(a\bac\bcl\bl,\b, p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl)\b)
+ c\bch\bha\bar\br *\b*a\bac\bcl\bl;\b;
+ c\bch\bha\bar\br *\b*p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl;\b;
+
+ a\bac\bcl\bl_\b_a\bad\bdd\bd(\b(a\bac\bcl\bl,\b, p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl)\b)
+ c\bch\bha\bar\br *\b*a\bac\bcl\bl;\b;
+ c\bch\bha\bar\br *\b*p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl;\b;
+
+ a\bac\bcl\bl_\b_d\bde\bel\ble\bet\bte\be(\b(a\bac\bcl\bl,\b, p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl)\b)
+ c\bch\bha\bar\br *\b*a\bac\bcl\bl;\b;
+ c\bch\bha\bar\br *\b*p\bpr\bri\bin\bnc\bci\bip\bpa\bal\bl;\b;
+
+ a\bac\bcl\bl_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\be(\b(a\bac\bcl\bl_\b_f\bfi\bil\ble\be,\b, m\bmo\bod\bde\be)\b)
+ c\bch\bha\bar\br *\b*a\bac\bcl\bl_\b_f\bfi\bil\ble\be;\b;
+ i\bin\bnt\bt m\bmo\bod\bde\be;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ I\bIn\bnt\btr\bro\bod\bdu\buc\bct\bti\bio\bon\bn
+ An access control list (ACL) is a list of principals,
+ where each principal is represented by a text string which
+ cannot contain whitespace. The library allows application
+ programs to refer to named access control lists to test
+ membership and to atomically add and delete principals
+ using a natural and intuitive interface. At present, the
+ names of access control lists are required to be Unix
+ filenames, and refer to human-readable Unix files; in the
+ future, when a networked ACL server is implemented, the
+ names may refer to a different namespace specific to the
+ ACL service.
+
+
+ P\bPr\bri\bin\bnc\bci\bip\bpa\bal\bl N\bNa\bam\bme\bes\bs
+ Principal names have the form
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+ACL_CHECK(3) BSD Programmer's Manual ACL_CHECK(3)
+
+
+ <name>[.<instance>][@<realm>]
+ e.g.:
+ asp
+ asp.root
+ asp@ATHENA.MIT.EDU
+ asp.@ATHENA.MIT.EDU
+ asp.root@ATHENA.MIT.EDU
+ It is possible for principals to be underspecified. If an
+ instance is missing, it is assumed to be "". If realm is
+ missing, it is assumed to be the local realm as determined
+ by _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm(3). The canonical form contains all of
+ name, instance, and realm; the acl_add and acl_delete rou-
+ tines will always leave the file in that form. Note that
+ the canonical form of asp@ATHENA.MIT.EDU is actually
+ asp.@ATHENA.MIT.EDU.
+
+ R\bRo\bou\but\bti\bin\bne\bes\bs
+ _\ba_\bc_\bl_\b__\bc_\ba_\bn_\bo_\bn_\bi_\bc_\ba_\bl_\bi_\bz_\be_\b__\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl stores the canonical form of
+ _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl in _\bb_\bu_\bf. _\bB_\bu_\bf must contain enough space to store
+ a principal, given the limits on the sizes of name,
+ instance, and realm specified as ANAME_SZ, INST_SZ, and
+ REALM_SZ, respectively, in _\b/_\bu_\bs_\br_\b/_\bi_\bn_\bc_\bl_\bu_\bd_\be_\b/_\bk_\br_\bb_\b._\bh.
+
+ _\ba_\bc_\bl_\b__\bc_\bh_\be_\bc_\bk returns nonzero if _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl appears in _\ba_\bc_\bl.
+ Returns 0 if principal does not appear in acl, or if an
+ error occurs. Canonicalizes principal before checking,
+ and allows the ACL to contain wildcards. The only sup-
+ ported wildcards are entries of the form name.*@realm,
+ *.*@realm, and *.*@*. An asterisk matches any value for
+ its component field. For example, "jtkohl.*@*" would
+ match principal jtkohl, with any instance and any realm.
+
+ _\ba_\bc_\bl_\b__\be_\bx_\ba_\bc_\bt_\b__\bm_\ba_\bt_\bc_\bh performs like _\ba_\bc_\bl_\b__\bc_\bh_\be_\bc_\bk, but does no
+ canonicalization or wildcard matching.
+
+ _\ba_\bc_\bl_\b__\ba_\bd_\bd atomically adds _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl to _\ba_\bc_\bl. Returns 0 if
+ successful, nonzero otherwise. It is considered a failure
+ if _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl is already in _\ba_\bc_\bl. This routine will canoni-
+ calize _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl, but will treat wildcards literally.
+
+ _\ba_\bc_\bl_\b__\bd_\be_\bl_\be_\bt_\be atomically deletes _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl from _\ba_\bc_\bl. Returns
+ 0 if successful, nonzero otherwise. It is considered a
+ failure if _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl is not already in _\ba_\bc_\bl. This routine
+ will canonicalize _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl, but will treat wildcards lit-
+ erally.
+
+ _\ba_\bc_\bl_\b__\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be initializes _\ba_\bc_\bl_\b__\bf_\bi_\bl_\be. If the file _\ba_\bc_\bl_\b__\bf_\bi_\bl_\be
+ does not exist, _\ba_\bc_\bl_\b__\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be creates it with mode _\bm_\bo_\bd_\be.
+ If the file _\ba_\bc_\bl_\b__\bf_\bi_\bl_\be exists, _\ba_\bc_\bl_\b__\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be removes all
+ members. Returns 0 if successful, nonzero otherwise.
+ WARNING: Mode argument is likely to change with the
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+ACL_CHECK(3) BSD Programmer's Manual ACL_CHECK(3)
+
+
+ eventual introduction of an ACL service.
+
+N\bNO\bOT\bTE\bES\bS
+ In the presence of concurrency, there is a very small
+ chance that _\ba_\bc_\bl_\b__\ba_\bd_\bd or _\ba_\bc_\bl_\b__\bd_\be_\bl_\be_\bt_\be could report success
+ even though it would have had no effect. This is a neces-
+ sary side effect of using lock files for concurrency con-
+ trol rather than flock(2), which is not supported by NFS.
+
+ The current implementation caches ACLs in memory in a
+ hash-table format for increased efficiency in checking
+ membership; one effect of the caching scheme is that one
+ file descriptor will be kept open for each ACL cached, up
+ to a maximum of 8.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(3), krb_get_lrealm(3)
+
+A\bAU\bUT\bTH\bHO\bOR\bR
+ James Aspnes (MIT Project Athena)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
--- /dev/null
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+N\bNA\bAM\bME\bE
+ des_read_password, des_string_to_key, des_random_key,
+ des_set_key, des_ecb_encrypt, des_cbc_encrypt,
+ des_pcbc_encrypt, des_cbc_cksum, des_quad_cksum, - (new)
+ DES encryption
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_r\bre\bea\bad\bd_\b_p\bpa\bas\bss\bsw\bwo\bor\brd\bd(\b(k\bke\bey\by,\b,p\bpr\bro\bom\bmp\bpt\bt,\b,v\bve\ber\bri\bif\bfy\by)\b)
+ des_cblock *key;
+ char *prompt;
+ int verify;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_s\bst\btr\bri\bin\bng\bg_\b_t\bto\bo_\b_k\bke\bey\by(\b(s\bst\btr\br,\b,k\bke\bey\by)\b)
+ c\bch\bha\bar\br *\b*s\bst\btr\br;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_r\bra\ban\bnd\bdo\bom\bm_\b_k\bke\bey\by(\b(k\bke\bey\by)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*k\bke\bey\by;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_e\bec\bcb\bb_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_c\bcb\bbc\bc_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_p\bpc\bcb\bbc\bc_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ u\bun\bns\bsi\big\bgn\bne\bed\bd l\blo\bon\bng\bg d\bde\bes\bs_\b_c\bcb\bbc\bc_\b_c\bck\bks\bsu\bum\bm(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+
+ u\bun\bns\bsi\big\bgn\bne\bed\bd l\blo\bon\bng\bg q\bqu\bua\bad\bd_\b_c\bck\bks\bsu\bum\bm(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,o\bou\but\bt_\b_c\bco\bou\bun\bnt\bt,\b,s\bse\bee\bed\bd)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ i\bin\bnt\bt o\bou\but\bt_\b_c\bco\bou\bun\bnt\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*s\bse\bee\bed\bd;\b;
+
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports various DES encryption related oper-
+ ations. It differs from the _\bc_\br_\by_\bp_\bt_\b, _\bs_\be_\bt_\bk_\be_\by_\b, _\ba_\bn_\bd _\be_\bn_\bc_\br_\by_\bp_\bt
+ library routines in that it provides a true DES encryp-
+ tion, without modifying the algorithm, and executes much
+ faster.
+
+ For each key that may be simultaneously active, create a
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be struct, defined in "des.h". Next, create
+ key schedules (from the 8-byte keys) as needed, via
+ _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b, prior to using the encryption or checksum
+ routines. Then setup the input and output areas. Make
+ sure to note the restrictions on lengths being multiples
+ of eight bytes. Finally, invoke the encryption/decryption
+ routines, _\bd_\be_\bs_\b__\be_\bc_\bb_\b__\be_\bn_\bc_\br_\by_\bp_\bt or _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt or
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b, or, to generate a cryptographic check-
+ sum, use _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm (fast) or _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm (slow).
+
+ A _\bd_\be_\bs_\b__\bc_\bb_\bl_\bo_\bc_\bk struct is an 8 byte block used as the funda-
+ mental unit for DES data and keys, and is defined as:
+
+ t\bty\byp\bpe\bed\bde\bef\bf u\bun\bns\bsi\big\bgn\bne\bed\bd c\bch\bha\bar\br d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk[\b[8\b8]\b];\b;
+
+ and a _\bd_\be_\bs_\b__\bk_\be_\by_\b__\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, is defined as:
+
+ t\bty\byp\bpe\bed\bde\bef\bf s\bst\btr\bru\buc\bct\bt d\bde\bes\bs_\b_k\bks\bs_\b_s\bst\btr\bru\buc\bct\bt {\b{d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk _\b_;\b;}\b}
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be[\b[1\b16\b6]\b];\b;
+
+ _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd writes the string specified by _\bp_\br_\bo_\bm_\bp_\bt to
+ the standard output, turns off echo (if possible) and
+ reads an input string from standard input until terminated
+ with a newline. If _\bv_\be_\br_\bi_\bf_\by is non-zero, it prompts and
+ reads input again, for use in applications such as chang-
+ ing a password; both versions are compared, and the input
+ is requested repeatedly until they match. Then
+ _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd converts the input string into a valid
+ DES key, internally using the _\bd_\be_\bs_\b__\bs_\bt_\br_\bi_\bn_\bg_\b__\bt_\bo_\b__\bk_\be_\by routine.
+ The newly created key is copied to the area pointed to by
+ the _\bk_\be_\by argument. _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd returns a zero if no
+ errors occurred, or a -1 indicating that an error occurred
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ trying to manipulate the terminal echo.
+
+
+ _\bd_\be_\bs_\b__\bs_\bt_\br_\bi_\bn_\bg_\b__\bt_\bo_\b__\bk_\be_\by converts an arbitrary length null-
+ terminated string to an 8 byte DES key, with odd byte par-
+ ity, per FIPS specification. A one-way function is used
+ to convert the string to a key, making it very difficult
+ to reconstruct the string from the key. The _\bs_\bt_\br argument
+ is a pointer to the string, and _\bk_\be_\by should point to a
+ _\bd_\be_\bs_\b__\bc_\bb_\bl_\bo_\bc_\bk supplied by the caller to receive the generated
+ key. No meaningful value is returned. Void is not used
+ for compatibility with other compilers.
+
+
+ _\bd_\be_\bs_\b__\br_\ba_\bn_\bd_\bo_\bm_\b__\bk_\be_\by generates a random DES encryption key
+ (eight bytes), set to odd parity per FIPS specifications.
+ This routine uses the current time, process id, and a
+ counter as a seed for the random number generator. The
+ caller must supply space for the output key, pointed to
+ by argument _\bk_\be_\by_\b, then after calling _\bd_\be_\bs_\b__\br_\ba_\bn_\bd_\bo_\bm_\b__\bk_\be_\by should
+ call the _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by routine when needed. No meaningful
+ value is returned. Void is not used for compatibility
+ with other compilers.
+
+
+ _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by calculates a key schedule from all eight bytes
+ of the input key, pointed to by the _\bk_\be_\by argument, and out-
+ puts the schedule into the _\bd_\be_\bs_\b__\bk_\be_\by_\b__\bs_\bc_\bh_\be_\bd_\bu_\bl_\be indicated by
+ the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument. Make sure to pass a valid eight
+ byte key; no padding is done. The key schedule may then
+ be used in subsequent encryption/decryption/checksum oper-
+ ations. Many key schedules may be cached for later use.
+ The user is responsible to clear keys and schedules as
+ soon as no longer needed, to prevent their disclosure.
+ The routine also checks the key parity, and returns a zero
+ if the key parity is correct (odd), a -1 indicating a key
+ parity error, or a -2 indicating use of an illegal weak
+ key. If an error is returned, the key schedule was not
+ created.
+
+
+ _\bd_\be_\bs_\b__\be_\bc_\bb_\b__\be_\bn_\bc_\br_\by_\bp_\bt is the basic DES encryption routine that
+ encrypts or decrypts a single 8-byte block in e\bel\ble\bec\bct\btr\bro\bon\bni\bic\bc
+ c\bco\bod\bde\be b\bbo\boo\bok\bk mode. It always transforms the input data,
+ pointed to by _\bi_\bn_\bp_\bu_\bt_\b, into the output data, pointed to by
+ the _\bo_\bu_\bt_\bp_\bu_\bt argument.
+
+ If the _\be_\bn_\bc_\br_\by_\bp_\bt argument is non-zero, the _\bi_\bn_\bp_\bu_\bt (cleartext)
+ is encrypted into the _\bo_\bu_\bt_\bp_\bu_\bt (ciphertext) using the
+ key_schedule specified by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument, previ-
+ ously set via _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ If encrypt is zero, the _\bi_\bn_\bp_\bu_\bt (now ciphertext) is
+ decrypted into the _\bo_\bu_\bt_\bp_\bu_\bt (now cleartext).
+
+ Input and output may overlap.
+
+ No meaningful value is returned. Void is not used for
+ compatibility with other compilers.
+
+
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt encrypts/decrypts using the c\bci\bip\bph\bhe\ber\br-\b-b\bbl\blo\boc\bck\bk-\b-
+ c\bch\bha\bai\bin\bni\bin\bng\bg m\bmo\bod\bde\be o\bof\bf D\bDE\bES\bS.\b. If the _\be_\bn_\bc_\br_\by_\bp_\bt argument is non-
+ zero, the routine cipher-block-chain encrypts the cleart-
+ ext data pointed to by the _\bi_\bn_\bp_\bu_\bt argument into the cipher-
+ text pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt argument, using the key
+ schedule provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument, and initial-
+ ization vector provided by the _\bi_\bv_\be_\bc argument. If the
+ _\bl_\be_\bn_\bg_\bt_\bh argument is not an integral multiple of eight
+ bytes, the last block is copied to a temp and zero filled
+ (highest addresses). The output is ALWAYS an integral
+ multiple of eight bytes.
+
+ If _\be_\bn_\bc_\br_\by_\bp_\bt is zero, the routine cipher-block chain
+ decrypts the (now) ciphertext data pointed to by the _\bi_\bn_\bp_\bu_\bt
+ argument into (now) cleartext pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt
+ argument using the key schedule provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be
+ argument, and initialization vector provided by the _\bi_\bv_\be_\bc
+ argument. Decryption ALWAYS operates on integral multiples
+ of 8 bytes, so it will round the _\bl_\be_\bn_\bg_\bt_\bh provided up to the
+ appropriate multiple. Consequently, it will always produce
+ the rounded-up number of bytes of output cleartext. The
+ application must determine if the output cleartext was
+ zero-padded due to original cleartext lengths that were
+ not integral multiples of 8.
+
+ No errors or meaningful values are returned. Void is not
+ used for compatibility with other compilers.
+
+ A characteristic of cbc mode is that changing a single bit
+ of the cleartext, then encrypting using cbc mode, affects
+ ALL the subsequent ciphertext. This makes cryptanalysis
+ much more difficult. However, modifying a single bit of
+ the ciphertext, then decrypting, only affects the result-
+ ing cleartext from the modified block and the succeeding
+ block. Therefore, _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt is STRONGLY recom-
+ mended for applications where indefinite propagation of
+ errors is required in order to detect modifications.
+
+
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt encrypts/decrypts using a modified block
+ chaining mode. Its calling sequence is identical to
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b. It differs in its error propagation
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ characteristics.
+
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt is highly recommended for most encryption
+ purposes, in that modification of a single bit of the
+ ciphertext will affect ALL the subsequent (decrypted)
+ cleartext. Similarly, modifying a single bit of the clear-
+ text will affect ALL the subsequent (encrypted) cipher-
+ text. "PCBC" mode, on encryption, "xors" both the cleart-
+ ext of block N and the ciphertext resulting from block N
+ with the cleartext for block N+1 prior to encrypting block
+ N+1.
+
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm produces an 8 byte cryptographic checksum by
+ cipher-block-chain encrypting the cleartext data pointed
+ to by the _\bi_\bn_\bp_\bu_\bt argument. All of the ciphertext output is
+ discarded, except the last 8-byte ciphertext block, which
+ is written into the area pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt argu-
+ ment. It uses the key schedule, provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be
+ argument and initialization vector provided by the _\bi_\bv_\be_\bc
+ argument. If the _\bl_\be_\bn_\bg_\bt_\bh argument is not an integral mul-
+ tiple of eight bytes, the last cleartext block is copied
+ to a temp and zero filled (highest addresses). The output
+ is ALWAYS eight bytes.
+
+ The routine also returns an unsigned long, which is the
+ last (highest address) half of the 8 byte checksum com-
+ puted.
+
+
+ _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm produces a checksum by chaining quadratic oper-
+ ations on the cleartext data pointed to by the _\bi_\bn_\bp_\bu_\bt argu-
+ ment. The _\bl_\be_\bn_\bg_\bt_\bh argument specifies the length of the
+ input -- only exactly that many bytes are included for the
+ checksum, without any padding.
+
+ The algorithm may be iterated over the same input data, if
+ the _\bo_\bu_\bt_\b__\bc_\bo_\bu_\bn_\bt argument is 2, 3 or 4, and the optional _\bo_\bu_\bt_\b-
+ _\bp_\bu_\bt argument is a non-null pointer . The default is one
+ iteration, and it will not run more than 4 times. Multiple
+ iterations run slower, but provide a longer checksum if
+ desired. The _\bs_\be_\be_\bd argument provides an 8-byte seed for the
+ first iteration. If multiple iterations are requested, the
+ results of one iteration are automatically used as the
+ seed for the next iteration.
+
+ It returns both an unsigned long checksum value, and if
+ the _\bo_\bu_\bt_\bp_\bu_\bt argument is not a null pointer, up to 16 bytes
+ of the computed checksum are written into the output.
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ This software has not yet been compiled or tested on
+ machines other than the VAX and the IBM PC.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986 Massachusetts Institute of Technology
+
+ This software may not be exported outside of the US with-
+ out a special license from the US Dept of Commerce. It may
+ be replaced by any secret key block cipher with block
+ length and key length of 8 bytes, as long as the interface
+ is the same as described here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
--- /dev/null
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+N\bNA\bAM\bME\bE
+ des_read_password, des_string_to_key, des_random_key,
+ des_set_key, des_ecb_encrypt, des_cbc_encrypt,
+ des_pcbc_encrypt, des_cbc_cksum, des_quad_cksum, - (new)
+ DES encryption
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_r\bre\bea\bad\bd_\b_p\bpa\bas\bss\bsw\bwo\bor\brd\bd(\b(k\bke\bey\by,\b,p\bpr\bro\bom\bmp\bpt\bt,\b,v\bve\ber\bri\bif\bfy\by)\b)
+ des_cblock *key;
+ char *prompt;
+ int verify;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_s\bst\btr\bri\bin\bng\bg_\b_t\bto\bo_\b_k\bke\bey\by(\b(s\bst\btr\br,\b,k\bke\bey\by)\b)
+ c\bch\bha\bar\br *\b*s\bst\btr\br;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_r\bra\ban\bnd\bdo\bom\bm_\b_k\bke\bey\by(\b(k\bke\bey\by)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*k\bke\bey\by;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_e\bec\bcb\bb_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_c\bcb\bbc\bc_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ i\bin\bnt\bt d\bde\bes\bs_\b_p\bpc\bcb\bbc\bc_\b_e\ben\bnc\bcr\bry\byp\bpt\bt(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc,\b,e\ben\bnc\bcr\bry\byp\bpt\bt)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+ i\bin\bnt\bt e\ben\bnc\bcr\bry\byp\bpt\bt;\b;
+
+ u\bun\bns\bsi\big\bgn\bne\bed\bd l\blo\bon\bng\bg d\bde\bes\bs_\b_c\bcb\bbc\bc_\b_c\bck\bks\bsu\bum\bm(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,i\biv\bve\bec\bc)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\biv\bve\bec\bc;\b;
+
+ u\bun\bns\bsi\big\bgn\bne\bed\bd l\blo\bon\bng\bg q\bqu\bua\bad\bd_\b_c\bck\bks\bsu\bum\bm(\b(i\bin\bnp\bpu\but\bt,\b,o\bou\but\btp\bpu\but\bt,\b,l\ble\ben\bng\bgt\bth\bh,\b,o\bou\but\bt_\b_c\bco\bou\bun\bnt\bt,\b,s\bse\bee\bed\bd)\b)
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*i\bin\bnp\bpu\but\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*o\bou\but\btp\bpu\but\bt;\b;
+ l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ i\bin\bnt\bt o\bou\but\bt_\b_c\bco\bou\bun\bnt\bt;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk *\b*s\bse\bee\bed\bd;\b;
+
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports various DES encryption related oper-
+ ations. It differs from the _\bc_\br_\by_\bp_\bt_\b, _\bs_\be_\bt_\bk_\be_\by_\b, _\ba_\bn_\bd _\be_\bn_\bc_\br_\by_\bp_\bt
+ library routines in that it provides a true DES encryp-
+ tion, without modifying the algorithm, and executes much
+ faster.
+
+ For each key that may be simultaneously active, create a
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be struct, defined in "des.h". Next, create
+ key schedules (from the 8-byte keys) as needed, via
+ _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b, prior to using the encryption or checksum
+ routines. Then setup the input and output areas. Make
+ sure to note the restrictions on lengths being multiples
+ of eight bytes. Finally, invoke the encryption/decryption
+ routines, _\bd_\be_\bs_\b__\be_\bc_\bb_\b__\be_\bn_\bc_\br_\by_\bp_\bt or _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt or
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b, or, to generate a cryptographic check-
+ sum, use _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm (fast) or _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm (slow).
+
+ A _\bd_\be_\bs_\b__\bc_\bb_\bl_\bo_\bc_\bk struct is an 8 byte block used as the funda-
+ mental unit for DES data and keys, and is defined as:
+
+ t\bty\byp\bpe\bed\bde\bef\bf u\bun\bns\bsi\big\bgn\bne\bed\bd c\bch\bha\bar\br d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk[\b[8\b8]\b];\b;
+
+ and a _\bd_\be_\bs_\b__\bk_\be_\by_\b__\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, is defined as:
+
+ t\bty\byp\bpe\bed\bde\bef\bf s\bst\btr\bru\buc\bct\bt d\bde\bes\bs_\b_k\bks\bs_\b_s\bst\btr\bru\buc\bct\bt {\b{d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk _\b_;\b;}\b}
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be[\b[1\b16\b6]\b];\b;
+
+ _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd writes the string specified by _\bp_\br_\bo_\bm_\bp_\bt to
+ the standard output, turns off echo (if possible) and
+ reads an input string from standard input until terminated
+ with a newline. If _\bv_\be_\br_\bi_\bf_\by is non-zero, it prompts and
+ reads input again, for use in applications such as chang-
+ ing a password; both versions are compared, and the input
+ is requested repeatedly until they match. Then
+ _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd converts the input string into a valid
+ DES key, internally using the _\bd_\be_\bs_\b__\bs_\bt_\br_\bi_\bn_\bg_\b__\bt_\bo_\b__\bk_\be_\by routine.
+ The newly created key is copied to the area pointed to by
+ the _\bk_\be_\by argument. _\bd_\be_\bs_\b__\br_\be_\ba_\bd_\b__\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd returns a zero if no
+ errors occurred, or a -1 indicating that an error occurred
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ trying to manipulate the terminal echo.
+
+
+ _\bd_\be_\bs_\b__\bs_\bt_\br_\bi_\bn_\bg_\b__\bt_\bo_\b__\bk_\be_\by converts an arbitrary length null-
+ terminated string to an 8 byte DES key, with odd byte par-
+ ity, per FIPS specification. A one-way function is used
+ to convert the string to a key, making it very difficult
+ to reconstruct the string from the key. The _\bs_\bt_\br argument
+ is a pointer to the string, and _\bk_\be_\by should point to a
+ _\bd_\be_\bs_\b__\bc_\bb_\bl_\bo_\bc_\bk supplied by the caller to receive the generated
+ key. No meaningful value is returned. Void is not used
+ for compatibility with other compilers.
+
+
+ _\bd_\be_\bs_\b__\br_\ba_\bn_\bd_\bo_\bm_\b__\bk_\be_\by generates a random DES encryption key
+ (eight bytes), set to odd parity per FIPS specifications.
+ This routine uses the current time, process id, and a
+ counter as a seed for the random number generator. The
+ caller must supply space for the output key, pointed to
+ by argument _\bk_\be_\by_\b, then after calling _\bd_\be_\bs_\b__\br_\ba_\bn_\bd_\bo_\bm_\b__\bk_\be_\by should
+ call the _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by routine when needed. No meaningful
+ value is returned. Void is not used for compatibility
+ with other compilers.
+
+
+ _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by calculates a key schedule from all eight bytes
+ of the input key, pointed to by the _\bk_\be_\by argument, and out-
+ puts the schedule into the _\bd_\be_\bs_\b__\bk_\be_\by_\b__\bs_\bc_\bh_\be_\bd_\bu_\bl_\be indicated by
+ the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument. Make sure to pass a valid eight
+ byte key; no padding is done. The key schedule may then
+ be used in subsequent encryption/decryption/checksum oper-
+ ations. Many key schedules may be cached for later use.
+ The user is responsible to clear keys and schedules as
+ soon as no longer needed, to prevent their disclosure.
+ The routine also checks the key parity, and returns a zero
+ if the key parity is correct (odd), a -1 indicating a key
+ parity error, or a -2 indicating use of an illegal weak
+ key. If an error is returned, the key schedule was not
+ created.
+
+
+ _\bd_\be_\bs_\b__\be_\bc_\bb_\b__\be_\bn_\bc_\br_\by_\bp_\bt is the basic DES encryption routine that
+ encrypts or decrypts a single 8-byte block in e\bel\ble\bec\bct\btr\bro\bon\bni\bic\bc
+ c\bco\bod\bde\be b\bbo\boo\bok\bk mode. It always transforms the input data,
+ pointed to by _\bi_\bn_\bp_\bu_\bt_\b, into the output data, pointed to by
+ the _\bo_\bu_\bt_\bp_\bu_\bt argument.
+
+ If the _\be_\bn_\bc_\br_\by_\bp_\bt argument is non-zero, the _\bi_\bn_\bp_\bu_\bt (cleartext)
+ is encrypted into the _\bo_\bu_\bt_\bp_\bu_\bt (ciphertext) using the
+ key_schedule specified by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument, previ-
+ ously set via _\bd_\be_\bs_\b__\bs_\be_\bt_\b__\bk_\be_\by
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ If encrypt is zero, the _\bi_\bn_\bp_\bu_\bt (now ciphertext) is
+ decrypted into the _\bo_\bu_\bt_\bp_\bu_\bt (now cleartext).
+
+ Input and output may overlap.
+
+ No meaningful value is returned. Void is not used for
+ compatibility with other compilers.
+
+
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt encrypts/decrypts using the c\bci\bip\bph\bhe\ber\br-\b-b\bbl\blo\boc\bck\bk-\b-
+ c\bch\bha\bai\bin\bni\bin\bng\bg m\bmo\bod\bde\be o\bof\bf D\bDE\bES\bS.\b. If the _\be_\bn_\bc_\br_\by_\bp_\bt argument is non-
+ zero, the routine cipher-block-chain encrypts the cleart-
+ ext data pointed to by the _\bi_\bn_\bp_\bu_\bt argument into the cipher-
+ text pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt argument, using the key
+ schedule provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument, and initial-
+ ization vector provided by the _\bi_\bv_\be_\bc argument. If the
+ _\bl_\be_\bn_\bg_\bt_\bh argument is not an integral multiple of eight
+ bytes, the last block is copied to a temp and zero filled
+ (highest addresses). The output is ALWAYS an integral
+ multiple of eight bytes.
+
+ If _\be_\bn_\bc_\br_\by_\bp_\bt is zero, the routine cipher-block chain
+ decrypts the (now) ciphertext data pointed to by the _\bi_\bn_\bp_\bu_\bt
+ argument into (now) cleartext pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt
+ argument using the key schedule provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be
+ argument, and initialization vector provided by the _\bi_\bv_\be_\bc
+ argument. Decryption ALWAYS operates on integral multiples
+ of 8 bytes, so it will round the _\bl_\be_\bn_\bg_\bt_\bh provided up to the
+ appropriate multiple. Consequently, it will always produce
+ the rounded-up number of bytes of output cleartext. The
+ application must determine if the output cleartext was
+ zero-padded due to original cleartext lengths that were
+ not integral multiples of 8.
+
+ No errors or meaningful values are returned. Void is not
+ used for compatibility with other compilers.
+
+ A characteristic of cbc mode is that changing a single bit
+ of the cleartext, then encrypting using cbc mode, affects
+ ALL the subsequent ciphertext. This makes cryptanalysis
+ much more difficult. However, modifying a single bit of
+ the ciphertext, then decrypting, only affects the result-
+ ing cleartext from the modified block and the succeeding
+ block. Therefore, _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt is STRONGLY recom-
+ mended for applications where indefinite propagation of
+ errors is required in order to detect modifications.
+
+
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt encrypts/decrypts using a modified block
+ chaining mode. Its calling sequence is identical to
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b. It differs in its error propagation
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+ characteristics.
+
+ _\bd_\be_\bs_\b__\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt is highly recommended for most encryption
+ purposes, in that modification of a single bit of the
+ ciphertext will affect ALL the subsequent (decrypted)
+ cleartext. Similarly, modifying a single bit of the clear-
+ text will affect ALL the subsequent (encrypted) cipher-
+ text. "PCBC" mode, on encryption, "xors" both the cleart-
+ ext of block N and the ciphertext resulting from block N
+ with the cleartext for block N+1 prior to encrypting block
+ N+1.
+
+ _\bd_\be_\bs_\b__\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm produces an 8 byte cryptographic checksum by
+ cipher-block-chain encrypting the cleartext data pointed
+ to by the _\bi_\bn_\bp_\bu_\bt argument. All of the ciphertext output is
+ discarded, except the last 8-byte ciphertext block, which
+ is written into the area pointed to by the _\bo_\bu_\bt_\bp_\bu_\bt argu-
+ ment. It uses the key schedule, provided by the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be
+ argument and initialization vector provided by the _\bi_\bv_\be_\bc
+ argument. If the _\bl_\be_\bn_\bg_\bt_\bh argument is not an integral mul-
+ tiple of eight bytes, the last cleartext block is copied
+ to a temp and zero filled (highest addresses). The output
+ is ALWAYS eight bytes.
+
+ The routine also returns an unsigned long, which is the
+ last (highest address) half of the 8 byte checksum com-
+ puted.
+
+
+ _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm produces a checksum by chaining quadratic oper-
+ ations on the cleartext data pointed to by the _\bi_\bn_\bp_\bu_\bt argu-
+ ment. The _\bl_\be_\bn_\bg_\bt_\bh argument specifies the length of the
+ input -- only exactly that many bytes are included for the
+ checksum, without any padding.
+
+ The algorithm may be iterated over the same input data, if
+ the _\bo_\bu_\bt_\b__\bc_\bo_\bu_\bn_\bt argument is 2, 3 or 4, and the optional _\bo_\bu_\bt_\b-
+ _\bp_\bu_\bt argument is a non-null pointer . The default is one
+ iteration, and it will not run more than 4 times. Multiple
+ iterations run slower, but provide a longer checksum if
+ desired. The _\bs_\be_\be_\bd argument provides an 8-byte seed for the
+ first iteration. If multiple iterations are requested, the
+ results of one iteration are automatically used as the
+ seed for the next iteration.
+
+ It returns both an unsigned long checksum value, and if
+ the _\bo_\bu_\bt_\bp_\bu_\bt argument is not a null pointer, up to 16 bytes
+ of the computed checksum are written into the output.
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+DES_CRYPT(3) BSD Programmer's Manual DES_CRYPT(3)
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ This software has not yet been compiled or tested on
+ machines other than the VAX and the IBM PC.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986 Massachusetts Institute of Technology
+
+ This software may not be exported outside of the US with-
+ out a special license from the US Dept of Commerce. It may
+ be replaced by any secret key block cipher with block
+ length and key length of 8 bytes, as long as the interface
+ is the same as described here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_realmofhost, krb_get_phost, krb_get_krbhst,
+ krb_get_admhst, krb_get_lrealm - additional Kerberos util-
+ ity routines
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<n\bne\bet\bti\bin\bne\bet\bt/\b/i\bin\bn.\b.h\bh>\b>
+
+ c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_r\bre\bea\bal\blm\bmo\bof\bfh\bho\bos\bst\bt(\b(h\bho\bos\bst\bt)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+
+ c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_g\bge\bet\bt_\b_p\bph\bho\bos\bst\bt(\b(a\bal\bli\bia\bas\bs)\b)
+ c\bch\bha\bar\br *\b*a\bal\bli\bia\bas\bs;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_k\bkr\brb\bbh\bhs\bst\bt(\b(h\bho\bos\bst\bt,\b,r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_a\bad\bdm\bmh\bhs\bst\bt(\b(h\bho\bos\bst\bt,\b,r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_l\blr\bre\bea\bal\blm\bm(\b(r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\br_\bb_\b__\br_\be_\ba_\bl_\bm_\bo_\bf_\bh_\bo_\bs_\bt returns the Kerberos realm of the host
+ _\bh_\bo_\bs_\bt, as determined by the translation table
+ _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\br_\be_\ba_\bl_\bm_\bs. _\bh_\bo_\bs_\bt should be the fully-
+ qualified domain-style primary host name of the host in
+ question. In order to prevent certain security attacks,
+ this routine must either have _\ba _\bp_\br_\bi_\bo_\br_\bi knowledge of a
+ host's realm, or obtain such information securely.
+
+ The format of the translation file is described by
+ _\bk_\br_\bb_\b._\br_\be_\ba_\bl_\bm_\bs(5). If _\bh_\bo_\bs_\bt exactly matches a host_name line,
+ the corresponding realm is returned. Otherwise, if the
+ domain portion of _\bh_\bo_\bs_\bt matches a domain_name line, the
+ corresponding realm is returned. If _\bh_\bo_\bs_\bt contains a
+ domain, but no translation is found, _\bh_\bo_\bs_\bt's domain is con-
+ verted to upper-case and returned. If _\bh_\bo_\bs_\bt contains no
+ discernible domain, or an error occurs, the local realm
+ name, as supplied by _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm(3), is returned.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bp_\bh_\bo_\bs_\bt converts the hostname _\ba_\bl_\bi_\ba_\bs (which can be
+ either an official name or an alias) into the instance
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+ name to be used in obtaining Kerberos tickets for most
+ services, including the Berkeley rcmd suite (rlogin, rcp,
+ rsh).
+ The current convention is to return the first segment of
+ the official domain-style name after conversion to lower
+ case.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bk_\br_\bb_\bh_\bs_\bt fills in _\bh_\bo_\bs_\bt with the hostname of the _\bnth
+ host running a Kerberos key distribution center (KDC) for
+ realm _\br_\be_\ba_\bl_\bm, as specified in the configuration file
+ (_\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\bc_\bo_\bn_\bf). The configuration file is
+ described by _\bk_\br_\bb_\b._\bc_\bo_\bn_\bf(5). If the host is successfully
+ filled in, the routine returns KSUCCESS. If the file can-
+ not be opened, and _\bn equals 1, then the value of KRB_HOST
+ as defined in _\b<_\bk_\br_\bb_\b._\bh_\b> is filled in, and KSUCCESS is
+ returned. If there are fewer than _\bn hosts running a Ker-
+ beros KDC for the requested realm, or the configuration
+ file is malformed, the routine returns KFAILURE.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\ba_\bd_\bm_\bh_\bs_\bt fills in _\bh_\bo_\bs_\bt with the hostname of the _\bnth
+ host running a Kerberos KDC database administration server
+ for realm _\br_\be_\ba_\bl_\bm, as specified in the configuration file
+ (_\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\bc_\bo_\bn_\bf). If the file cannot be opened
+ or is malformed, or there are fewer than _\bn hosts running a
+ Kerberos KDC database administration server, the routine
+ returns KFAILURE.
+
+ The character arrays used as return values for
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bk_\br_\bb_\bh_\bs_\bt, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\ba_\bd_\bm_\bh_\bs_\bt, should be large enough to
+ hold any hostname (MAXHOSTNAMELEN from <sys/param.h>).
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm fills in _\br_\be_\ba_\bl_\bm with the _\bnth realm of the
+ local host, as specified in the configuration file. _\br_\be_\ba_\bl_\bm
+ should be at least REALM_SZ (from _\b<_\bk_\br_\bb_\b._\bh_\b>_\b)characters_\bl_\bo_\bn_\bg_\b.
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(3), krb.conf(5), krb.realms(5)
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/krb.realms
+ translation file for host-to-realm
+ mapping.
+
+ /etc/kerberosIV/krb.conf
+ local realm-name and realm/server con-
+ figuration file.
+
+B\bBU\bUG\bGS\bS
+ The current convention for instance names is too limited;
+ the full domain name should be used.
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm currently only supports _\bn = 1. It should
+ really consult the user's ticket cache to determine the
+ user's current realm, rather than consulting a file on the
+ host.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
--- /dev/null
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_sendauth, krb_recvauth, krb_net_write, krb_net_read -
+ Kerberos routines for sending authentication via network
+ stream sockets
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<n\bne\bet\bti\bin\bne\bet\bt/\b/i\bin\bn.\b.h\bh>\b>
+
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\ben\bnd\bda\bau\but\bth\bh(\b(o\bop\bpt\bti\bio\bon\bns\bs,\b, f\bfd\bd,\b, k\bkt\bte\bex\bxt\bt,\b, s\bse\ber\brv\bvi\bic\bce\be,\b, i\bin\bns\bst\bt,\b, r\bre\bea\bal\blm\bm,\b,
+ c\bch\bhe\bec\bck\bks\bsu\bum\bm,\b, m\bms\bsg\bg_\b_d\bda\bat\bta\ba,\b, c\bcr\bre\bed\bd,\b, s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b, l\bla\bad\bdd\bdr\br,\b,
+ f\bfa\bad\bdd\bdr\br,\b, v\bve\ber\brs\bsi\bio\bon\bn)\b)
+ l\blo\bon\bng\bg o\bop\bpt\bti\bio\bon\bns\bs;\b;
+ i\bin\bnt\bt f\bfd\bd;\b;
+ K\bKT\bTE\bEX\bXT\bT k\bkt\bte\bex\bxt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be,\b, *\b*i\bin\bns\bst\bt,\b, *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bcr\bre\bed\bd;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*l\bla\bad\bdd\bdr\br,\b, *\b*f\bfa\bad\bdd\bdr\br;\b;
+ c\bch\bha\bar\br *\b*v\bve\ber\brs\bsi\bio\bon\bn;\b;
+
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\bre\bec\bcv\bva\bau\but\bth\bh(\b(o\bop\bpt\bti\bio\bon\bns\bs,\b, f\bfd\bd,\b, k\bkt\bte\bex\bxt\bt,\b, s\bse\ber\brv\bvi\bic\bce\be,\b, i\bin\bns\bst\bt,\b, f\bfa\bad\bdd\bdr\br,\b,
+ l\bla\bad\bdd\bdr\br,\b, a\bau\but\bth\bh_\b_d\bda\bat\bta\ba,\b, f\bfi\bil\ble\ben\bna\bam\bme\be,\b, s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b, v\bve\ber\brs\bsi\bio\bon\bn)\b)
+ l\blo\bon\bng\bg o\bop\bpt\bti\bio\bon\bns\bs;\b;
+ i\bin\bnt\bt f\bfd\bd;\b;
+ K\bKT\bTE\bEX\bXT\bT k\bkt\bte\bex\bxt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be,\b, *\b*i\bin\bns\bst\bt;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*f\bfa\bad\bdd\bdr\br,\b, *\b*l\bla\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bau\but\bth\bh_\b_d\bda\bat\bta\ba;\b;
+ c\bch\bha\bar\br *\b*f\bfi\bil\ble\ben\bna\bam\bme\be;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ c\bch\bha\bar\br *\b*v\bve\ber\brs\bsi\bio\bon\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_n\bne\bet\bt_\b_w\bwr\bri\bit\bte\be(\b(f\bfd\bd,\b, b\bbu\buf\bf,\b, l\ble\ben\bn)\b)
+ i\bin\bnt\bt f\bfd\bd;\b;
+ c\bch\bha\bar\br *\b*b\bbu\buf\bf;\b;
+ i\bin\bnt\bt l\ble\ben\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_n\bne\bet\bt_\b_r\bre\bea\bad\bd(\b(f\bfd\bd,\b, b\bbu\buf\bf,\b, l\ble\ben\bn)\b)
+ i\bin\bnt\bt f\bfd\bd;\b;
+ c\bch\bha\bar\br *\b*b\bbu\buf\bf;\b;
+ i\bin\bnt\bt l\ble\ben\bn;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ These functions, which are built on top of the core Ker-
+ beros library, provide a convenient means for client and
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ server programs to send authentication messages to one
+ another through network connections. The _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh
+ function sends an authenticated ticket from the client
+ program to the server program by writing the ticket to a
+ network socket. The _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh function receives the
+ ticket from the client by reading from a network socket.
+
+
+K\bKR\bRB\bB_\b_S\bSE\bEN\bND\bDA\bAU\bUT\bTH\bH
+ This function writes the ticket to the network socket
+ specified by the file descriptor _\bf_\bd_\b, returning KSUCCESS if
+ the write proceeds successfully, and an error code if it
+ does not.
+
+ The _\bk_\bt_\be_\bx_\bt argument should point to an allocated KTEXT_ST
+ structure. The _\bs_\be_\br_\bv_\bi_\bc_\be_\b, _\bi_\bn_\bs_\bt_\b, and _\br_\be_\ba_\bl_\bm arguments specify
+ the server program's Kerberos principal name, instance,
+ and realm. If you are writing a client that uses the
+ local realm exclusively, you can set the _\br_\be_\ba_\bl_\bm argument to
+ NULL.
+
+ The _\bv_\be_\br_\bs_\bi_\bo_\bn argument allows the client program to pass an
+ application-specific version string that the server pro-
+ gram can then match against its own version string. The
+ _\bv_\be_\br_\bs_\bi_\bo_\bn string can be up to KSEND_VNO_LEN (see _\b<_\bk_\br_\bb_\b._\bh_\b>)
+ characters in length.
+
+ The _\bc_\bh_\be_\bc_\bk_\bs_\bu_\bm argument can be used to pass checksum infor-
+ mation to the server program. The client program is
+ responsible for specifying this information. This check-
+ sum information is difficult to corrupt because
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh passes it over the network in encrypted form.
+ The _\bc_\bh_\be_\bc_\bk_\bs_\bu_\bm argument is passed as the checksum argument
+ to _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq.
+
+ You can set _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b'_\bs other arguments to NULL unless
+ you want the client and server programs to mutually
+ authenticate themselves. In the case of mutual authenti-
+ cation, the client authenticates itself to the server pro-
+ gram, and demands that the server in turn authenticate
+ itself to the client.
+
+
+K\bKR\bRB\bB_\b_S\bSE\bEN\bND\bDA\bAU\bUT\bTH\bH A\bAN\bND\bD M\bMU\bUT\bTU\bUA\bAL\bL A\bAU\bUT\bTH\bHE\bEN\bNT\bTI\bIC\bCA\bAT\bTI\bIO\bON\bN
+ If you want mutual authentication, make sure that you read
+ all pending data from the local socket before calling
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b. Set _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b'_\bs _\bo_\bp_\bt_\bi_\bo_\bn_\bs argument to
+ K\bKO\bOP\bPT\bT_\b_D\bDO\bO_\b_M\bMU\bUT\bTU\bUA\bAL\bL (this macro is defined in the _\bk_\br_\bb_\b._\bh file);
+ make sure that the _\bl_\ba_\bd_\bd_\br argument points to the address of
+ the local socket, and that _\bf_\ba_\bd_\bd_\br points to the foreign
+ socket's network address.
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ _\bK_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh fills in the other arguments-- _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba,
+ _\bc_\br_\be_\bd, and _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be--before sending the ticket to the
+ server program. You must, however, allocate space for
+ these arguments before calling the function.
+
+ _\bK_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh supports two other options: K\bKO\bOP\bPT\bT_\b_D\bDO\bON\bNT\bT_\b_M\bMK\bK_\b_R\bRE\bEQ\bQ,\b,
+ and K\bKO\bOP\bPT\bT_\b_D\bDO\bON\bNT\bT_\b_C\bCA\bAN\bNO\bON\bN.\b. If called with _\bo_\bp_\bt_\bi_\bo_\bn_\bs set as
+ KOPT_DONT_MK_REQ, _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh will not use the _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq
+ function to retrieve the ticket from the Kerberos server.
+ The _\bk_\bt_\be_\bx_\bt argument must point to an existing ticket and
+ authenticator (such as would be created by _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq),
+ and the _\bs_\be_\br_\bv_\bi_\bc_\be_\b, _\bi_\bn_\bs_\bt_\b, and _\br_\be_\ba_\bl_\bm arguments can be set to
+ NULL.
+
+ If called with _\bo_\bp_\bt_\bi_\bo_\bn_\bs set as KOPT_DONT_CANON,
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh will not convert the service's instance to
+ canonical form using _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bp_\bh_\bo_\bs_\bt(3).
+
+ If you want to call _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh with a multiple _\bo_\bp_\bt_\bi_\bo_\bn_\bs
+ specification, construct _\bo_\bp_\bt_\bi_\bo_\bn_\bs as a bitwise-OR of the
+ options you want to specify.
+
+
+K\bKR\bRB\bB_\b_R\bRE\bEC\bCV\bVA\bAU\bUT\bTH\bH
+ The _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh function reads a ticket/authenticator
+ pair from the socket pointed to by the _\bf_\bd argument. Set
+ the _\bo_\bp_\bt_\bi_\bo_\bn_\bs argument as a bitwise-OR of the options
+ desired. Currently only KOPT_DO_MUTUAL is useful to the
+ receiver.
+
+ The _\bk_\bt_\be_\bx_\bt argument should point to an allocated KTEXT_ST
+ structure. _\bK_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh fills _\bk_\bt_\be_\bx_\bt with the
+ ticket/authenticator pair read from _\bf_\bd, then passes it to
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq.
+
+ The _\bs_\be_\br_\bv_\bi_\bc_\be and _\bi_\bn_\bs_\bt arguments specify the expected ser-
+ vice and instance for which the ticket was generated.
+ They are also passed to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. The _\bi_\bn_\bs_\bt argument may
+ be set to "*" if the caller wishes _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq to fill in
+ the instance used (note that there must be space in the
+ _\bi_\bn_\bs_\bt argument to hold a full instance name, see
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq(3)).
+
+ The _\bf_\ba_\bd_\bd_\br argument should point to the address of the peer
+ which is presenting the ticket. It is also passed to
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq.
+
+ If the client and server plan to mutually authenticate one
+ another, the _\bl_\ba_\bd_\bd_\br argument should point to the local
+ address of the file descriptor. Otherwise you can set
+ this argument to NULL.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ The _\ba_\bu_\bt_\bh_\b__\bd_\ba_\bt_\ba argument should point to an allocated
+ AUTH_DAT area. It is passed to and filled in by
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq. The checksum passed to the corresponding
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh is available as part of the filled-in
+ AUTH_DAT area.
+
+ The _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be argument specifies the filename which the
+ service program should use to obtain its service key.
+ _\bK_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh passes _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be to the _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq function.
+ If you set this argument to "", _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq looks for the
+ service key in the file _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bs_\br_\bv_\bt_\ba_\bb_\b.
+
+ If the client and server are performing mutual authentica-
+ tion, the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument should point to an allocated
+ Key_schedule. Otherwise it is ignored and may be NULL.
+
+ The _\bv_\be_\br_\bs_\bi_\bo_\bn argument should point to a character array of
+ at least KSEND_VNO_LEN characters. It is filled in with
+ the version string passed by the client to _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b.
+
+
+K\bKR\bRB\bB_\b_N\bNE\bET\bT_\b_W\bWR\bRI\bIT\bTE\bE A\bAN\bND\bD K\bKR\bRB\bB_\b_N\bNE\bET\bT_\b_R\bRE\bEA\bAD\bD
+ The _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\bw_\br_\bi_\bt_\be function emulates the write(2) system
+ call, but guarantees that all data specified is written to
+ _\bf_\bd before returning, unless an error condition occurs.
+
+ The _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\br_\be_\ba_\bd function emulates the read(2) system
+ call, but guarantees that the requested amount of data is
+ read from _\bf_\bd before returning, unless an error condition
+ occurs.
+
+
+B\bBU\bUG\bGS\bS
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b, _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh_\b, _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\bw_\br_\bi_\bt_\be_\b, and
+ _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\br_\be_\ba_\bd will not work properly on sockets set to non-
+ blocking I/O mode.
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ krb_mk_req(3), krb_rd_req(3), krb_get_phost(3)
+
+
+A\bAU\bUT\bTH\bHO\bOR\bR
+ John T. Kohl, MIT Project Athena
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ Copyright 1988, Massachusetts Instititute of Technology.
+ For copying and distribution information, please see the
+ file <mit-copyright.h>.
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
--- /dev/null
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key,
+ krb_get_cred, krb_mk_priv, krb_rd_priv, krb_mk_safe,
+ krb_rd_safe, krb_mk_err, krb_rd_err, krb_ck_repl - Ker-
+ beros authentication library
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_m\bmk\bk_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bch\bhe\bec\bck\bks\bsu\bum\bm)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\brd\bd_\b_r\bre\beq\bq(\b(a\bau\but\bth\bhe\ben\bnt\bt,\b,s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br,\b,a\bad\bd,\b,f\bfn\bn)\b)
+ K\bKT\bTE\bEX\bXT\bT a\bau\but\bth\bhe\ben\bnt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ u\bu_\b_l\blo\bon\bng\bg f\bfr\bro\bom\bm_\b_a\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*f\bfn\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_k\bkn\bnt\bto\bol\bln\bn(\b(a\bad\bd,\b,l\bln\bna\bam\bme\be)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bad\bd;\b;
+ c\bch\bha\bar\br *\b*l\bln\bna\bam\bme\be;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\bet\bt_\b_k\bke\bey\by(\b(k\bke\bey\by,\b,c\bcv\bvt\bt)\b)
+ c\bch\bha\bar\br *\b*k\bke\bey\by;\b;
+ i\bin\bnt\bt c\bcv\bvt\bt;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(s\bse\ber\brv\bvi\bic\bce\be,\b,i\bin\bns\bst\bta\ban\bnc\bce\be,\b,r\bre\bea\bal\blm\bm,\b,c\bc)\b)
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be;\b;
+ c\bch\bha\bar\br *\b*i\bin\bns\bst\bta\ban\bnc\bce\be;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ d\bde\bes\bs_\b_k\bke\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_p\bpr\bri\biv\bv(\b(i\bin\bn,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,o\bou\but\bt,\b,i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ u\bu_\b_l\blo\bon\bng\bg i\bin\bn_\b_l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_s\bsa\baf\bfe\be(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,k\bke\bey\by,\b,s\bse\ben\bnd\bde\ber\br,\b,r\bre\bec\bce\bei\biv\bve\ber\br,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ d\bde\bes\bs_\b_c\bcb\bbl\blo\boc\bck\bk k\bke\bey\by;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*s\bse\ben\bnd\bde\ber\br;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*r\bre\bec\bce\bei\biv\bve\ber\br;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_m\bmk\bk_\b_e\ber\brr\br(\b(o\bou\but\bt,\b,c\bco\bod\bde\be,\b,s\bst\btr\bri\bin\bng\bg)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*o\bou\but\bt;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ c\bch\bha\bar\br *\b*s\bst\btr\bri\bin\bng\bg;\b;
+
+ l\blo\bon\bng\bg k\bkr\brb\bb_\b_r\brd\bd_\b_e\ber\brr\br(\b(i\bin\bn,\b,l\ble\ben\bng\bgt\bth\bh,\b,c\bco\bod\bde\be,\b,m\bms\bsg\bg_\b_d\bda\bat\bta\ba)\b)
+ u\bu_\b_c\bch\bha\bar\br *\b*i\bin\bn;\b;
+ u\bu_\b_l\blo\bon\bng\bg l\ble\ben\bng\bgt\bth\bh;\b;
+ l\blo\bon\bng\bg c\bco\bod\bde\be;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This library supports network authentication and various
+ related operations. The library contains many routines
+ beyond those described in this man page, but they are not
+ intended to be used directly. Instead, they are called by
+ the routines that are described, the authentication server
+ and the login program.
+
+ _\bk_\br_\bb_\b__\be_\br_\br_\b__\bt_\bx_\bt_\b[_\b] contains text string descriptions of various
+ Kerberos error codes returned by some of the routines
+ below.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq takes a pointer to a text structure in which an
+ authenticator is to be built. It also takes the name,
+ instance, and realm of the service to be used and an
+ optional checksum. It is up to the application to decide
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ how to generate the checksum. _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq then retrieves a
+ ticket for the desired service and creates an authentica-
+ tor. The authenticator is built in _\ba_\bu_\bt_\bh_\be_\bn_\bt and is acces-
+ sible to the calling procedure.
+
+ It is up to the application to get the authenticator to
+ the service where it will be read by _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. Unless
+ an attacker possesses the session key contained in the
+ ticket, it will be unable to modify the authenticator.
+ Thus, the checksum can be used to verify the authenticity
+ of the other data that will pass through a connection.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq takes an authenticator of type K\bKT\bTE\bEX\bXT\bT,\b, a service
+ name, an instance, the address of the host originating the
+ request, and a pointer to a structure of type A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT
+ which is filled in with information obtained from the
+ authenticator. It also optionally takes the name of the
+ file in which it will find the secret key(s) for the ser-
+ vice. If the supplied _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be contains "*", then the
+ first service key with the same service name found in the
+ service key file will be used, and the _\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be argument
+ will be filled in with the chosen instance. This means
+ that the caller must provide space for such an instance
+ name.
+
+ It is used to find out information about the principal
+ when a request has been made to a service. It is up to
+ the application protocol to get the authenticator from the
+ client to the service. The authenticator is then passed
+ to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq to extract the desired information.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq returns zero (RD_AP_OK) upon successful authen-
+ tication. If a packet was forged, modified, or replayed,
+ authentication will fail. If the authentication fails, a
+ non-zero value is returned indicating the particular prob-
+ lem encountered. See _\bk_\br_\bb_\b._\bh for the list of error codes.
+
+ If the last argument is the null string (""), krb_rd_req
+ will use the file /etc/srvtab to find its keys. If the
+ last argument is NULL, it will assume that the key has
+ been set by _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by and will not bother looking fur-
+ ther.
+
+ _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn converts a Kerberos name to a local name. It
+ takes a structure of type AUTH_DAT and uses the name and
+ instance to look in the database /etc/aname to find the
+ corresponding local name. The local name is returned and
+ can be used by an application to change uids, directories,
+ or other parameters. It is not an integral part of Ker-
+ beros, but is instead provided to support the use of Ker-
+ beros in existing utilities.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by takes as an argument a des key. It then cre-
+ ates a key schedule from it and saves the original key to
+ be used as an initialization vector. It is used to set
+ the server's key which must be used to decrypt tickets.
+
+ If called with a non-zero second argument, _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by
+ will first convert the input from a string of arbitrary
+ length to a DES key by encrypting it with a one-way func-
+ tion.
+
+ In most cases it should not be necessary to call
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by_\b. The necessary keys will usually be obtained
+ and set inside _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bk_\be_\by is provided for
+ those applications that do not wish to place the applica-
+ tion keys on disk.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd searches the caller's ticket file for a
+ ticket for the given service, instance, and realm; and, if
+ a ticket is found, fills in the given CREDENTIALS struc-
+ ture with the ticket information.
+
+ If the ticket was found, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd returns GC_OK. If
+ the ticket file can't be found, can't be read, doesn't
+ belong to the user (other than root), isn't a regular
+ file, or is in the wrong mode, the error GC_TKFIL is
+ returned.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv creates an encrypted, authenticated message
+ from any arbitrary application data, pointed to by _\bi_\bn and
+ _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key, pointed to
+ by _\bk_\be_\by and the key schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to encrypt
+ the data and some header information using _\bp_\bc_\bb_\bc_\b__\be_\bn_\bc_\br_\by_\bp_\bt_\b.
+ _\bs_\be_\bn_\bd_\be_\br and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the
+ two parties. In addition to providing privacy, this pro-
+ tocol message protects against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error.
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv decrypts and authenticates a received
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv message. _\bi_\bn points to the beginning of the
+ received message, whose length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b.
+ The private session key, pointed to by _\bk_\be_\by_\b, and the key
+ schedule, _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be_\b, are used to decrypt and verify the
+ received message. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ struct, defined in _\bk_\br_\bb_\b._\bh_\b. The routine fills in the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the decrypted application
+ data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field,
+ _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs with the timestamps in the message,
+ and _\bs_\bw_\ba_\bp with a 1 if the byte order of the receiver is
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ different than that of the sender. (The application must
+ still determine if it is appropriate to byte-swap applica-
+ tion data; the Kerberos protocol fields are already taken
+ care of). The _\bh_\ba_\bs_\bh field returns a value useful as input
+ to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be creates an authenticated, but unencrypted mes-
+ sage from any arbitrary application data, pointed to by _\bi_\bn
+ and _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh bytes long. The private session key,
+ pointed to by _\bk_\be_\by_\b, is used to seed the _\bq_\bu_\ba_\bd_\b__\bc_\bk_\bs_\bu_\bm_\b(_\b) check-
+ sum algorithm used as part of the authentication. _\bs_\be_\bn_\bd_\be_\br
+ and _\br_\be_\bc_\be_\bi_\bv_\be_\br point to the Internet address of the two par-
+ ties. This message does not provide privacy, but does
+ protect (via detection) against modifications, insertions
+ or replays. The encapsulated message and header are
+ placed in the area pointed to by _\bo_\bu_\bt and the routine
+ returns the length of the output, or -1 indicating an
+ error. The authentication provided by this routine is not
+ as strong as that provided by _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or by computing
+ the checksum using _\bc_\bb_\bc_\b__\bc_\bk_\bs_\bu_\bm instead, both of which
+ authenticate via DES.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be authenticates a received _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be message.
+ _\bi_\bn points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. The private session
+ key, pointed to by _\bk_\be_\by_\b, is used to seed the quad_cksum()
+ routine as part of the authentication. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a
+ pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct, defined in _\bk_\br_\bb_\b._\bh _\b. The rou-
+ tine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field
+ with a pointer to the application data, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with
+ the length of the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, _\bt_\bi_\bm_\be_\b__\bs_\be_\bc and _\bt_\bi_\bm_\be_\b__\b5_\bm_\bs
+ with the timestamps in the message, and _\bs_\bw_\ba_\bp with a 1 if
+ the byte order of the receiver is different than that of
+ the sender. (The application must still determine if it
+ is appropriate to byte-swap application data; the Kerberos
+ protocol fields are already taken care of). The _\bh_\ba_\bs_\bh
+ field returns a value useful as input to the _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl
+ routine.
+
+ The routine returns zero if ok, or a Kerberos error code.
+ Modified messages and old messages cause errors, but it is
+ up to the caller to check the time sequence of messages,
+ and to check against recently replayed messages using
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl if so desired.
+
+
+
+MIT Project Athena Kerberos Version 4.0 5
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br constructs an application level error message
+ that may be used along with _\bk_\br_\bb_\b__\bm_\bk_\b__\bp_\br_\bi_\bv or _\bk_\br_\bb_\b__\bm_\bk_\b__\bs_\ba_\bf_\be_\b.
+ _\bo_\bu_\bt is a pointer to the output buffer, _\bc_\bo_\bd_\be is an applica-
+ tion specific error code, and _\bs_\bt_\br_\bi_\bn_\bg is an application
+ specific error string.
+
+
+ _\bk_\br_\bb_\b__\br_\bd_\b__\be_\br_\br unpacks a received _\bk_\br_\bb_\b__\bm_\bk_\b__\be_\br_\br message. _\bi_\bn
+ points to the beginning of the received message, whose
+ length is specified in _\bi_\bn_\b__\bl_\be_\bn_\bg_\bt_\bh_\b. _\bc_\bo_\bd_\be is a pointer to a
+ value to be filled in with the error value provided by the
+ application. _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba is a pointer to a _\bM_\bS_\bG_\b__\bD_\bA_\bT struct,
+ defined in _\bk_\br_\bb_\b._\bh _\b. The routine fills in these _\bM_\bS_\bG_\b__\bD_\bA_\bT
+ fields: the _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field with a pointer to the applica-
+ tion error text, _\ba_\bp_\bp_\b__\bl_\be_\bn_\bg_\bt_\bh with the length of the
+ _\ba_\bp_\bp_\b__\bd_\ba_\bt_\ba field, and _\bs_\bw_\ba_\bp with a 1 if the byte order of the
+ receiver is different than that of the sender. (The
+ application must still determine if it is appropriate to
+ byte-swap application data; the Kerberos protocol fields
+ are already taken care of).
+
+ The routine returns zero if the error message has been
+ successfully received, or a Kerberos error code.
+
+ The _\bK_\bT_\bE_\bX_\bT structure is used to pass around text of varying
+ lengths. It consists of a buffer for the data, and a
+ length. krb_rd_req takes an argument of this type con-
+ taining the authenticator, and krb_mk_req returns the
+ authenticator in a structure of this type. KTEXT itself
+ is really a pointer to the structure. The actual struc-
+ ture is of type KTEXT_ST.
+
+ The _\bA_\bU_\bT_\bH_\b__\bD_\bA_\bT structure is filled in by krb_rd_req. It
+ must be allocated before calling krb_rd_req, and a pointer
+ to it is passed. The structure is filled in with data
+ obtained from Kerberos. _\bM_\bS_\bG_\b__\bD_\bA_\bT structure is filled in by
+ either krb_rd_priv, krb_rd_safe, or krb_rd_err. It must
+ be allocated before the call and a pointer to it is
+ passed. The structure is filled in with data obtained
+ from Kerberos.
+
+
+F\bFI\bIL\bLE\bES\bS
+ /usr/include/kerberosIV/krb.h
+ /usr/lib/libkrb.a
+ /usr/include/kerberosIV/des.h
+ /usr/lib/libdes.a
+ /etc/kerberosIV/aname
+ /etc/kerberosIV/srvtab
+ /tmp/tkt[uid]
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 6
+
+
+
+
+
+
+
+
+KERBEROS(3) BSD Programmer's Manual KERBEROS(3)
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(1), des_crypt(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+B\bBU\bUG\bGS\bS
+ The caller of _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b, _\bk_\br_\bb_\b__\br_\bd_\b__\bp_\br_\bi_\bv_\b, _\ba_\bn_\bd _\bk_\br_\bb_\b__\br_\bd_\b__\bs_\ba_\bf_\be
+ must check time order and for replay attempts.
+ _\bk_\br_\bb_\b__\bc_\bk_\b__\br_\be_\bp_\bl is not implemented yet.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Clifford Neuman, MIT Project Athena
+ Steve Miller, MIT Project Athena/Digital Equipment Corpo-
+ ration
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ COPYRIGHT 1985,1986,1989 Massachusetts Institute of Tech-
+ nology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 7
+
+
+
+
+
--- /dev/null
+
+
+
+KRB_SET_TKT_STRING(3)BSD Programmer's ManualKRB_SET_TKT_STRING(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_set_tkt_string - set Kerberos ticket cache file name
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ v\bvo\boi\bid\bd k\bkr\brb\bb_\b_s\bse\bet\bt_\b_t\btk\bkt\bt_\b_s\bst\btr\bri\bin\bng\bg(\b(f\bfi\bil\ble\ben\bna\bam\bme\be)\b)
+ c\bch\bha\bar\br *\b*f\bfi\bil\ble\ben\bna\bam\bme\be;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\br_\bb_\b__\bs_\be_\bt_\b__\bt_\bk_\bt_\b__\bs_\bt_\br_\bi_\bn_\bg sets the name of the file that holds
+ the user's cache of Kerberos server tickets and associated
+ session keys.
+
+ The string _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be passed in is copied into local stor-
+ age. Only MAXPATHLEN-1 (see <sys/param.h>) characters of
+ the filename are copied in for use as the cache file name.
+
+ This routine should be called during initialization,
+ before other Kerberos routines are called; otherwise the
+ routines which fetch the ticket cache file name may be
+ called and return an undesired ticket file name until this
+ routine is called.
+
+F\bFI\bIL\bLE\bES\bS
+ /tmp/tkt[uid] default ticket file name, unless the
+ environment variable KRBTKFILE is set.
+ [uid] denotes the user's uid, in deci-
+ mal.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(3), setenv(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_sendauth, krb_recvauth, krb_net_write, krb_net_read -
+ Kerberos routines for sending authentication via network
+ stream sockets
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<n\bne\bet\bti\bin\bne\bet\bt/\b/i\bin\bn.\b.h\bh>\b>
+
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_s\bse\ben\bnd\bda\bau\but\bth\bh(\b(o\bop\bpt\bti\bio\bon\bns\bs,\b, f\bfd\bd,\b, k\bkt\bte\bex\bxt\bt,\b, s\bse\ber\brv\bvi\bic\bce\be,\b, i\bin\bns\bst\bt,\b, r\bre\bea\bal\blm\bm,\b,
+ c\bch\bhe\bec\bck\bks\bsu\bum\bm,\b, m\bms\bsg\bg_\b_d\bda\bat\bta\ba,\b, c\bcr\bre\bed\bd,\b, s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b, l\bla\bad\bdd\bdr\br,\b,
+ f\bfa\bad\bdd\bdr\br,\b, v\bve\ber\brs\bsi\bio\bon\bn)\b)
+ l\blo\bon\bng\bg o\bop\bpt\bti\bio\bon\bns\bs;\b;
+ i\bin\bnt\bt f\bfd\bd;\b;
+ K\bKT\bTE\bEX\bXT\bT k\bkt\bte\bex\bxt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be,\b, *\b*i\bin\bns\bst\bt,\b, *\b*r\bre\bea\bal\blm\bm;\b;
+ u\bu_\b_l\blo\bon\bng\bg c\bch\bhe\bec\bck\bks\bsu\bum\bm;\b;
+ M\bMS\bSG\bG_\b_D\bDA\bAT\bT *\b*m\bms\bsg\bg_\b_d\bda\bat\bta\ba;\b;
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bcr\bre\bed\bd;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*l\bla\bad\bdd\bdr\br,\b, *\b*f\bfa\bad\bdd\bdr\br;\b;
+ c\bch\bha\bar\br *\b*v\bve\ber\brs\bsi\bio\bon\bn;\b;
+
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_r\bre\bec\bcv\bva\bau\but\bth\bh(\b(o\bop\bpt\bti\bio\bon\bns\bs,\b, f\bfd\bd,\b, k\bkt\bte\bex\bxt\bt,\b, s\bse\ber\brv\bvi\bic\bce\be,\b, i\bin\bns\bst\bt,\b, f\bfa\bad\bdd\bdr\br,\b,
+ l\bla\bad\bdd\bdr\br,\b, a\bau\but\bth\bh_\b_d\bda\bat\bta\ba,\b, f\bfi\bil\ble\ben\bna\bam\bme\be,\b, s\bsc\bch\bhe\bed\bdu\bul\ble\be,\b, v\bve\ber\brs\bsi\bio\bon\bn)\b)
+ l\blo\bon\bng\bg o\bop\bpt\bti\bio\bon\bns\bs;\b;
+ i\bin\bnt\bt f\bfd\bd;\b;
+ K\bKT\bTE\bEX\bXT\bT k\bkt\bte\bex\bxt\bt;\b;
+ c\bch\bha\bar\br *\b*s\bse\ber\brv\bvi\bic\bce\be,\b, *\b*i\bin\bns\bst\bt;\b;
+ s\bst\btr\bru\buc\bct\bt s\bso\boc\bck\bka\bad\bdd\bdr\br_\b_i\bin\bn *\b*f\bfa\bad\bdd\bdr\br,\b, *\b*l\bla\bad\bdd\bdr\br;\b;
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bau\but\bth\bh_\b_d\bda\bat\bta\ba;\b;
+ c\bch\bha\bar\br *\b*f\bfi\bil\ble\ben\bna\bam\bme\be;\b;
+ K\bKe\bey\by_\b_s\bsc\bch\bhe\bed\bdu\bul\ble\be s\bsc\bch\bhe\bed\bdu\bul\ble\be;\b;
+ c\bch\bha\bar\br *\b*v\bve\ber\brs\bsi\bio\bon\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_n\bne\bet\bt_\b_w\bwr\bri\bit\bte\be(\b(f\bfd\bd,\b, b\bbu\buf\bf,\b, l\ble\ben\bn)\b)
+ i\bin\bnt\bt f\bfd\bd;\b;
+ c\bch\bha\bar\br *\b*b\bbu\buf\bf;\b;
+ i\bin\bnt\bt l\ble\ben\bn;\b;
+
+ i\bin\bnt\bt k\bkr\brb\bb_\b_n\bne\bet\bt_\b_r\bre\bea\bad\bd(\b(f\bfd\bd,\b, b\bbu\buf\bf,\b, l\ble\ben\bn)\b)
+ i\bin\bnt\bt f\bfd\bd;\b;
+ c\bch\bha\bar\br *\b*b\bbu\buf\bf;\b;
+ i\bin\bnt\bt l\ble\ben\bn;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ These functions, which are built on top of the core Ker-
+ beros library, provide a convenient means for client and
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ server programs to send authentication messages to one
+ another through network connections. The _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh
+ function sends an authenticated ticket from the client
+ program to the server program by writing the ticket to a
+ network socket. The _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh function receives the
+ ticket from the client by reading from a network socket.
+
+
+K\bKR\bRB\bB_\b_S\bSE\bEN\bND\bDA\bAU\bUT\bTH\bH
+ This function writes the ticket to the network socket
+ specified by the file descriptor _\bf_\bd_\b, returning KSUCCESS if
+ the write proceeds successfully, and an error code if it
+ does not.
+
+ The _\bk_\bt_\be_\bx_\bt argument should point to an allocated KTEXT_ST
+ structure. The _\bs_\be_\br_\bv_\bi_\bc_\be_\b, _\bi_\bn_\bs_\bt_\b, and _\br_\be_\ba_\bl_\bm arguments specify
+ the server program's Kerberos principal name, instance,
+ and realm. If you are writing a client that uses the
+ local realm exclusively, you can set the _\br_\be_\ba_\bl_\bm argument to
+ NULL.
+
+ The _\bv_\be_\br_\bs_\bi_\bo_\bn argument allows the client program to pass an
+ application-specific version string that the server pro-
+ gram can then match against its own version string. The
+ _\bv_\be_\br_\bs_\bi_\bo_\bn string can be up to KSEND_VNO_LEN (see _\b<_\bk_\br_\bb_\b._\bh_\b>)
+ characters in length.
+
+ The _\bc_\bh_\be_\bc_\bk_\bs_\bu_\bm argument can be used to pass checksum infor-
+ mation to the server program. The client program is
+ responsible for specifying this information. This check-
+ sum information is difficult to corrupt because
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh passes it over the network in encrypted form.
+ The _\bc_\bh_\be_\bc_\bk_\bs_\bu_\bm argument is passed as the checksum argument
+ to _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq.
+
+ You can set _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b'_\bs other arguments to NULL unless
+ you want the client and server programs to mutually
+ authenticate themselves. In the case of mutual authenti-
+ cation, the client authenticates itself to the server pro-
+ gram, and demands that the server in turn authenticate
+ itself to the client.
+
+
+K\bKR\bRB\bB_\b_S\bSE\bEN\bND\bDA\bAU\bUT\bTH\bH A\bAN\bND\bD M\bMU\bUT\bTU\bUA\bAL\bL A\bAU\bUT\bTH\bHE\bEN\bNT\bTI\bIC\bCA\bAT\bTI\bIO\bON\bN
+ If you want mutual authentication, make sure that you read
+ all pending data from the local socket before calling
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b. Set _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b'_\bs _\bo_\bp_\bt_\bi_\bo_\bn_\bs argument to
+ K\bKO\bOP\bPT\bT_\b_D\bDO\bO_\b_M\bMU\bUT\bTU\bUA\bAL\bL (this macro is defined in the _\bk_\br_\bb_\b._\bh file);
+ make sure that the _\bl_\ba_\bd_\bd_\br argument points to the address of
+ the local socket, and that _\bf_\ba_\bd_\bd_\br points to the foreign
+ socket's network address.
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ _\bK_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh fills in the other arguments-- _\bm_\bs_\bg_\b__\bd_\ba_\bt_\ba,
+ _\bc_\br_\be_\bd, and _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be--before sending the ticket to the
+ server program. You must, however, allocate space for
+ these arguments before calling the function.
+
+ _\bK_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh supports two other options: K\bKO\bOP\bPT\bT_\b_D\bDO\bON\bNT\bT_\b_M\bMK\bK_\b_R\bRE\bEQ\bQ,\b,
+ and K\bKO\bOP\bPT\bT_\b_D\bDO\bON\bNT\bT_\b_C\bCA\bAN\bNO\bON\bN.\b. If called with _\bo_\bp_\bt_\bi_\bo_\bn_\bs set as
+ KOPT_DONT_MK_REQ, _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh will not use the _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq
+ function to retrieve the ticket from the Kerberos server.
+ The _\bk_\bt_\be_\bx_\bt argument must point to an existing ticket and
+ authenticator (such as would be created by _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq),
+ and the _\bs_\be_\br_\bv_\bi_\bc_\be_\b, _\bi_\bn_\bs_\bt_\b, and _\br_\be_\ba_\bl_\bm arguments can be set to
+ NULL.
+
+ If called with _\bo_\bp_\bt_\bi_\bo_\bn_\bs set as KOPT_DONT_CANON,
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh will not convert the service's instance to
+ canonical form using _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bp_\bh_\bo_\bs_\bt(3).
+
+ If you want to call _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh with a multiple _\bo_\bp_\bt_\bi_\bo_\bn_\bs
+ specification, construct _\bo_\bp_\bt_\bi_\bo_\bn_\bs as a bitwise-OR of the
+ options you want to specify.
+
+
+K\bKR\bRB\bB_\b_R\bRE\bEC\bCV\bVA\bAU\bUT\bTH\bH
+ The _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh function reads a ticket/authenticator
+ pair from the socket pointed to by the _\bf_\bd argument. Set
+ the _\bo_\bp_\bt_\bi_\bo_\bn_\bs argument as a bitwise-OR of the options
+ desired. Currently only KOPT_DO_MUTUAL is useful to the
+ receiver.
+
+ The _\bk_\bt_\be_\bx_\bt argument should point to an allocated KTEXT_ST
+ structure. _\bK_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh fills _\bk_\bt_\be_\bx_\bt with the
+ ticket/authenticator pair read from _\bf_\bd, then passes it to
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq.
+
+ The _\bs_\be_\br_\bv_\bi_\bc_\be and _\bi_\bn_\bs_\bt arguments specify the expected ser-
+ vice and instance for which the ticket was generated.
+ They are also passed to _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq_\b. The _\bi_\bn_\bs_\bt argument may
+ be set to "*" if the caller wishes _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq to fill in
+ the instance used (note that there must be space in the
+ _\bi_\bn_\bs_\bt argument to hold a full instance name, see
+ _\bk_\br_\bb_\b__\bm_\bk_\b__\br_\be_\bq(3)).
+
+ The _\bf_\ba_\bd_\bd_\br argument should point to the address of the peer
+ which is presenting the ticket. It is also passed to
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq.
+
+ If the client and server plan to mutually authenticate one
+ another, the _\bl_\ba_\bd_\bd_\br argument should point to the local
+ address of the file descriptor. Otherwise you can set
+ this argument to NULL.
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
+
+
+
+KRB_SENDAUTH(3) BSD Programmer's Manual KRB_SENDAUTH(3)
+
+
+ The _\ba_\bu_\bt_\bh_\b__\bd_\ba_\bt_\ba argument should point to an allocated
+ AUTH_DAT area. It is passed to and filled in by
+ _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq. The checksum passed to the corresponding
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh is available as part of the filled-in
+ AUTH_DAT area.
+
+ The _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be argument specifies the filename which the
+ service program should use to obtain its service key.
+ _\bK_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh passes _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be to the _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq function.
+ If you set this argument to "", _\bk_\br_\bb_\b__\br_\bd_\b__\br_\be_\bq looks for the
+ service key in the file _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bs_\br_\bv_\bt_\ba_\bb_\b.
+
+ If the client and server are performing mutual authentica-
+ tion, the _\bs_\bc_\bh_\be_\bd_\bu_\bl_\be argument should point to an allocated
+ Key_schedule. Otherwise it is ignored and may be NULL.
+
+ The _\bv_\be_\br_\bs_\bi_\bo_\bn argument should point to a character array of
+ at least KSEND_VNO_LEN characters. It is filled in with
+ the version string passed by the client to _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b.
+
+
+K\bKR\bRB\bB_\b_N\bNE\bET\bT_\b_W\bWR\bRI\bIT\bTE\bE A\bAN\bND\bD K\bKR\bRB\bB_\b_N\bNE\bET\bT_\b_R\bRE\bEA\bAD\bD
+ The _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\bw_\br_\bi_\bt_\be function emulates the write(2) system
+ call, but guarantees that all data specified is written to
+ _\bf_\bd before returning, unless an error condition occurs.
+
+ The _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\br_\be_\ba_\bd function emulates the read(2) system
+ call, but guarantees that the requested amount of data is
+ read from _\bf_\bd before returning, unless an error condition
+ occurs.
+
+
+B\bBU\bUG\bGS\bS
+ _\bk_\br_\bb_\b__\bs_\be_\bn_\bd_\ba_\bu_\bt_\bh_\b, _\bk_\br_\bb_\b__\br_\be_\bc_\bv_\ba_\bu_\bt_\bh_\b, _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\bw_\br_\bi_\bt_\be_\b, and
+ _\bk_\br_\bb_\b__\bn_\be_\bt_\b__\br_\be_\ba_\bd will not work properly on sockets set to non-
+ blocking I/O mode.
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ krb_mk_req(3), krb_rd_req(3), krb_get_phost(3)
+
+
+A\bAU\bUT\bTH\bHO\bOR\bR
+ John T. Kohl, MIT Project Athena
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ Copyright 1988, Massachusetts Instititute of Technology.
+ For copying and distribution information, please see the
+ file <mit-copyright.h>.
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 4
+
+
+
+
+
--- /dev/null
+
+
+
+KUSEROK(3) BSD Programmer's Manual KUSEROK(3)
+
+
+N\bNA\bAM\bME\bE
+ kuserok - Kerberos version of ruserok
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ k\bku\bus\bse\ber\bro\bok\bk(\b(k\bkd\bda\bat\bta\ba,\b, l\blo\boc\bca\bal\blu\bus\bse\ber\br)\b)
+ A\bAU\bUT\bTH\bH_\b_D\bDA\bAT\bT *\b*a\bau\but\bth\bh_\b_d\bda\bat\bta\ba;\b;
+ c\bch\bha\bar\br *\b*l\blo\boc\bca\bal\blu\bus\bse\ber\br;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bu_\bs_\be_\br_\bo_\bk determines whether a Kerberos principal described
+ by the structure _\ba_\bu_\bt_\bh_\b__\bd_\ba_\bt_\ba is authorized to login as user
+ _\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br according to the authorization file
+ ("~_\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br/.klogin" by default). It returns 0 (zero) if
+ authorized, 1 (one) if not authorized.
+
+ If there is no account for _\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br on the local machine,
+ authorization is not granted. If there is no authoriza-
+ tion file, and the Kerberos principal described by
+ _\ba_\bu_\bt_\bh_\b__\bd_\ba_\bt_\ba translates to _\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br (using _\bk_\br_\bb_\b__\bk_\bn_\bt_\bo_\bl_\bn(3)),
+ authorization is granted. If the authorization file can't
+ be accessed, or the file is not owned by _\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br_\b, autho-
+ rization is denied. Otherwise, the file is searched for a
+ matching principal name, instance, and realm. If a match
+ is found, authorization is granted, else authorization is
+ denied.
+
+ The file entries are in the format:
+ name.instance@realm
+ with one entry per line.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(3), ruserok(3), krb_kntoln(3)
+
+F\bFI\bIL\bLE\bES\bS
+ ~_\bl_\bo_\bc_\ba_\bl_\bu_\bs_\be_\br/.klogin authorization list
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+N\bNA\bAM\bME\bE
+ krb_realmofhost, krb_get_phost, krb_get_krbhst,
+ krb_get_admhst, krb_get_lrealm - additional Kerberos util-
+ ity routines
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/d\bde\bes\bs.\b.h\bh>\b>
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<n\bne\bet\bti\bin\bne\bet\bt/\b/i\bin\bn.\b.h\bh>\b>
+
+ c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_r\bre\bea\bal\blm\bmo\bof\bfh\bho\bos\bst\bt(\b(h\bho\bos\bst\bt)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+
+ c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_g\bge\bet\bt_\b_p\bph\bho\bos\bst\bt(\b(a\bal\bli\bia\bas\bs)\b)
+ c\bch\bha\bar\br *\b*a\bal\bli\bia\bas\bs;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_k\bkr\brb\bbh\bhs\bst\bt(\b(h\bho\bos\bst\bt,\b,r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_a\bad\bdm\bmh\bhs\bst\bt(\b(h\bho\bos\bst\bt,\b,r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*h\bho\bos\bst\bt;\b;
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+ k\bkr\brb\bb_\b_g\bge\bet\bt_\b_l\blr\bre\bea\bal\blm\bm(\b(r\bre\bea\bal\blm\bm,\b,n\bn)\b)
+ c\bch\bha\bar\br *\b*r\bre\bea\bal\blm\bm;\b;
+ i\bin\bnt\bt n\bn;\b;
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\br_\bb_\b__\br_\be_\ba_\bl_\bm_\bo_\bf_\bh_\bo_\bs_\bt returns the Kerberos realm of the host
+ _\bh_\bo_\bs_\bt, as determined by the translation table
+ _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\br_\be_\ba_\bl_\bm_\bs. _\bh_\bo_\bs_\bt should be the fully-
+ qualified domain-style primary host name of the host in
+ question. In order to prevent certain security attacks,
+ this routine must either have _\ba _\bp_\br_\bi_\bo_\br_\bi knowledge of a
+ host's realm, or obtain such information securely.
+
+ The format of the translation file is described by
+ _\bk_\br_\bb_\b._\br_\be_\ba_\bl_\bm_\bs(5). If _\bh_\bo_\bs_\bt exactly matches a host_name line,
+ the corresponding realm is returned. Otherwise, if the
+ domain portion of _\bh_\bo_\bs_\bt matches a domain_name line, the
+ corresponding realm is returned. If _\bh_\bo_\bs_\bt contains a
+ domain, but no translation is found, _\bh_\bo_\bs_\bt's domain is con-
+ verted to upper-case and returned. If _\bh_\bo_\bs_\bt contains no
+ discernible domain, or an error occurs, the local realm
+ name, as supplied by _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm(3), is returned.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bp_\bh_\bo_\bs_\bt converts the hostname _\ba_\bl_\bi_\ba_\bs (which can be
+ either an official name or an alias) into the instance
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+ name to be used in obtaining Kerberos tickets for most
+ services, including the Berkeley rcmd suite (rlogin, rcp,
+ rsh).
+ The current convention is to return the first segment of
+ the official domain-style name after conversion to lower
+ case.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bk_\br_\bb_\bh_\bs_\bt fills in _\bh_\bo_\bs_\bt with the hostname of the _\bnth
+ host running a Kerberos key distribution center (KDC) for
+ realm _\br_\be_\ba_\bl_\bm, as specified in the configuration file
+ (_\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\bc_\bo_\bn_\bf). The configuration file is
+ described by _\bk_\br_\bb_\b._\bc_\bo_\bn_\bf(5). If the host is successfully
+ filled in, the routine returns KSUCCESS. If the file can-
+ not be opened, and _\bn equals 1, then the value of KRB_HOST
+ as defined in _\b<_\bk_\br_\bb_\b._\bh_\b> is filled in, and KSUCCESS is
+ returned. If there are fewer than _\bn hosts running a Ker-
+ beros KDC for the requested realm, or the configuration
+ file is malformed, the routine returns KFAILURE.
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\ba_\bd_\bm_\bh_\bs_\bt fills in _\bh_\bo_\bs_\bt with the hostname of the _\bnth
+ host running a Kerberos KDC database administration server
+ for realm _\br_\be_\ba_\bl_\bm, as specified in the configuration file
+ (_\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\bk_\br_\bb_\b._\bc_\bo_\bn_\bf). If the file cannot be opened
+ or is malformed, or there are fewer than _\bn hosts running a
+ Kerberos KDC database administration server, the routine
+ returns KFAILURE.
+
+ The character arrays used as return values for
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bk_\br_\bb_\bh_\bs_\bt, _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\ba_\bd_\bm_\bh_\bs_\bt, should be large enough to
+ hold any hostname (MAXHOSTNAMELEN from <sys/param.h>).
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm fills in _\br_\be_\ba_\bl_\bm with the _\bnth realm of the
+ local host, as specified in the configuration file. _\br_\be_\ba_\bl_\bm
+ should be at least REALM_SZ (from _\b<_\bk_\br_\bb_\b._\bh_\b>_\b)characters_\bl_\bo_\bn_\bg_\b.
+
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kerberos(3), krb.conf(5), krb.realms(5)
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/krb.realms
+ translation file for host-to-realm
+ mapping.
+
+ /etc/kerberosIV/krb.conf
+ local realm-name and realm/server con-
+ figuration file.
+
+B\bBU\bUG\bGS\bS
+ The current convention for instance names is too limited;
+ the full domain name should be used.
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+KRB_REALMOFHOST(3) BSD Programmer's Manual KRB_REALMOFHOST(3)
+
+
+ _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bl_\br_\be_\ba_\bl_\bm currently only supports _\bn = 1. It should
+ really consult the user's ticket cache to determine the
+ user's current realm, rather than consulting a file on the
+ host.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
--- /dev/null
+
+
+
+TF_UTIL(3) BSD Programmer's Manual TF_UTIL(3)
+
+
+N\bNA\bAM\bME\bE
+ tf_init, tf_get_pname, tf_get_pinst, tf_get_cred, tf_close
+ - routines for manipulating a Kerberos ticket file
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ #\b#i\bin\bnc\bcl\blu\bud\bde\be <\b<k\bke\ber\brb\bbe\ber\bro\bos\bsI\bIV\bV/\b/k\bkr\brb\bb.\b.h\bh>\b>
+
+ e\bex\bxt\bte\ber\brn\bn c\bch\bha\bar\br *\b*k\bkr\brb\bb_\b_e\ber\brr\br_\b_t\btx\bxt\bt[\b[]\b];\b;
+
+ t\btf\bf_\b_i\bin\bni\bit\bt(\b(t\btf\bf_\b_n\bna\bam\bme\be,\b, r\brw\bw)\b)
+ c\bch\bha\bar\br *\b*t\btf\bf_\b_n\bna\bam\bme\be;\b;
+ i\bin\bnt\bt r\brw\bw;\b;
+
+ t\btf\bf_\b_g\bge\bet\bt_\b_p\bpn\bna\bam\bme\be(\b(p\bpn\bna\bam\bme\be)\b)
+ c\bch\bha\bar\br *\b*p\bpn\bna\bam\bme\be;\b;
+
+ t\btf\bf_\b_g\bge\bet\bt_\b_p\bpi\bin\bns\bst\bt(\b(p\bpi\bin\bns\bst\bt)\b)
+ c\bch\bha\bar\br *\b*p\bpi\bin\bns\bst\bt;\b;
+
+ t\btf\bf_\b_g\bge\bet\bt_\b_c\bcr\bre\bed\bd(\b(c\bc)\b)
+ C\bCR\bRE\bED\bDE\bEN\bNT\bTI\bIA\bAL\bLS\bS *\b*c\bc;\b;
+
+ t\btf\bf_\b_c\bcl\blo\bos\bse\be(\b()\b)
+
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ This group of routines are provided to manipulate the Ker-
+ beros tickets file. A ticket file has the following for-
+ mat:
+
+ principal's name (null-terminated string)
+ principal's instance (null-terminated string)
+ CREDENTIAL_1
+ CREDENTIAL_2
+ ...
+ CREDENTIAL_n
+ EOF
+
+
+ Where "CREDENTIAL_x" consists of the following fixed-length
+ fields from the CREDENTIALS structure (defined in <kerberosIV/krb.h>):
+
+ char service[ANAME_SZ]
+ char instance[INST_SZ]
+ char realm[REALM_SZ]
+ des_cblock session
+ int lifetime
+ int kvno
+ KTEXT_ST ticket_st
+ long issue_date
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+TF_UTIL(3) BSD Programmer's Manual TF_UTIL(3)
+
+
+ _\bt_\bf_\b__\bi_\bn_\bi_\bt must be called before the other ticket file rou-
+ tines. It takes the name of the ticket file to use, and a
+ read/write flag as arguments. It tries to open the ticket
+ file, checks the mode and if everything is okay, locks the
+ file. If it's opened for reading, the lock is shared. If
+ it's opened for writing, the lock is exclusive. KSUCCESS
+ is returned if all went well, otherwise one of the follow-
+ ing:
+
+ NO_TKT_FIL - file wasn't there
+ TKT_FIL_ACC - file was in wrong mode, etc.
+ TKT_FIL_LCK - couldn't lock the file, even after a retry
+
+
+ The _\bt_\bf_\b__\bg_\be_\bt_\b__\bp_\bn_\ba_\bm_\be reads the principal's name from a ticket
+ file. It should only be called after tf_init has been
+ called. The principal's name is filled into the _\bp_\bn_\ba_\bm_\be
+ parameter. If all goes well, KSUCCESS is returned. If
+ tf_init wasn't called, TKT_FIL_INI is returned. If the
+ principal's name was null, or EOF was encountered, or the
+ name was longer than ANAME_SZ, TKT_FIL_FMT is returned.
+
+ The _\bt_\bf_\b__\bg_\be_\bt_\b__\bp_\bi_\bn_\bs_\bt reads the principal's instance from a
+ ticket file. It should only be called after tf_init and
+ tf_get_pname have been called. The principal's instance
+ is filled into the _\bp_\bi_\bn_\bs_\bt parameter. If all goes well,
+ KSUCCESS is returned. If tf_init wasn't called,
+ TKT_FIL_INI is returned. If EOF was encountered, or the
+ name was longer than INST_SZ, TKT_FIL_FMT is returned.
+ Note that, unlike the principal name, the instance name
+ may be null.
+
+ The _\bt_\bf_\b__\bg_\be_\bt_\b__\bc_\br_\be_\bd routine reads a CREDENTIALS record from a
+ ticket file and fills in the given structure. It should
+ only be called after tf_init, tf_get_pname, and
+ tf_get_pinst have been called. If all goes well, KSUCCESS
+ is returned. Possible error codes are:
+
+ TKT_FIL_INI - tf_init wasn't called first
+ TKT_FIL_FMT - bad format
+ EOF - end of file encountered
+
+
+ _\bt_\bf_\b__\bc_\bl_\bo_\bs_\be closes the ticket file and releases the lock on
+ it.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ krb(3)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
+
+
+
+TF_UTIL(3) BSD Programmer's Manual TF_UTIL(3)
+
+
+B\bBU\bUG\bGS\bS
+ The ticket file routines have to be called in a certain
+ order.
+
+A\bAU\bUT\bTH\bHO\bOR\bRS\bS
+ Jennifer Steiner, MIT Project Athena
+ Bill Bryant, MIT Project Athena
+
+R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIO\bON\bNS\bS
+ Copyright 1987 Massachusetts Institute of Technology
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 3
+
+
+
+
+
--- /dev/null
+
+
+
+KRB.CONF(5) BSD Programmer's Manual KRB.CONF(5)
+
+
+N\bNA\bAM\bME\bE
+ /etc/kerberosIV/krb.conf - Kerberos configuration file
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\br_\bb_\b._\bc_\bo_\bn_\bf contains configuration information describing the
+ Kerberos realm and the Kerberos key distribution center
+ (KDC) servers for known realms.
+
+ _\bk_\br_\bb_\b._\bc_\bo_\bn_\bf contains the name of the local realm in the first
+ line, followed by lines indicating realm/host entries.
+ The first token is a realm name, and the second is the
+ hostname of a host running a KDC for that realm. The
+ words "admin server" following the hostname indicate that
+ the host also provides an administrative database server.
+ For example:
+ ATHENA.MIT.EDU
+ ATHENA.MIT.EDU kerberos-1.mit.edu admin server
+ ATHENA.MIT.EDU kerberos-2.mit.edu
+ LCS.MIT.EDU kerberos.lcs.mit.edu admin server
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ krb.realms(5), krb_get_krbhst(3), krb_get_lrealm(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KRB.REALMS(5) BSD Programmer's Manual KRB.REALMS(5)
+
+
+N\bNA\bAM\bME\bE
+ /etc/kerberosIV/krb.realms - host to Kerberos realm trans-
+ lation file
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\br_\bb_\b._\br_\be_\ba_\bl_\bm_\bs provides a translation from a hostname to the
+ Kerberos realm name for the services provided by that
+ host.
+
+ Each line of the translation file is in one of the follow-
+ ing forms (domain_name should be of the form .XXX.YYY,
+ e.g. .LCS.MIT.EDU):
+ host_name kerberos_realm
+ domain_name kerberos_realm
+ If a hostname exactly matches the _\bh_\bo_\bs_\bt_\b__\bn_\ba_\bm_\be field in a
+ line of the first form, the corresponding realm is the
+ realm of the host. If a hostname does not match any
+ _\bh_\bo_\bs_\bt_\b__\bn_\ba_\bm_\be in the file, but its domain exactly matches the
+ _\bd_\bo_\bm_\ba_\bi_\bn_\b__\bn_\ba_\bm_\be field in a line of the second form, the corre-
+ sponding realm is the realm of the host.
+
+ If no translation entry applies, the host's realm is con-
+ sidered to be the hostname's domain portion converted to
+ upper case.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ krb_realmofhost(3)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+EXT_SRVTAB(8) BSD System Manager's Manual EXT_SRVTAB(8)
+
+
+N\bNA\bAM\bME\bE
+ ext_srvtab - extract service key files from Kerberos key
+ distribution center database
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ ext_srvtab [ -\b-n\bn ] [ -\b-r\br r\bre\bea\bal\blm\bm ] [ h\bho\bos\bst\btn\bna\bam\bme\be .\b..\b..\b. ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\be_\bx_\bt_\b__\bs_\br_\bv_\bt_\ba_\bb extracts service key files from the Kerberos
+ key distribution center (KDC) database.
+
+ Upon execution, it prompts the user to enter the master
+ key string for the database. If the -\b-n\bn option is speci-
+ fied, the master key is instead fetched from the master
+ key cache file.
+
+ For each _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be specified on the command line,
+ _\be_\bx_\bt_\b__\bs_\br_\bv_\bt_\ba_\bb creates the service key file _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be-new-
+ srvtab, containing all the entries in the database with an
+ instance field of _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be_\b. This new file contains all
+ the keys registered for Kerberos-mediated service provid-
+ ing programs which use the _\bk_\br_\bb_\b__\bg_\be_\bt_\b__\bp_\bh_\bo_\bs_\bt(3) principal and
+ instance conventions to run on the host _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be. If the
+ -\b-r\br option is specified, the realm fields in the extracted
+ file will match the given realm rather than the local
+ realm.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "verify_master_key: Invalid master key, does not match
+ database."
+ The master key string entered was
+ incorrect.
+
+F\bFI\bIL\bLE\bES\bS
+ _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be-new-srvtab Service key file generated for _\bh_\bo_\bs_\bt_\b-
+ _\bn_\ba_\bm_\be
+
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+ /etc/kerberosIV/master_key
+ Master key cache file.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ read_service_key(3), krb_get_phost(3)
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KDB_DESTROY(8) BSD System Manager's Manual KDB_DESTROY(8)
+
+
+N\bNA\bAM\bME\bE
+ kdb_destroy - destroy Kerberos key distribution center
+ database
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ kdb_destroy
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bd_\bb_\b__\bd_\be_\bs_\bt_\br_\bo_\by deletes a Kerberos key distribution center
+ database.
+
+ The user is prompted to verify that the database should be
+ destroyed. A response beginning with `y' or `Y' confirms
+ deletion. Any other response aborts deletion.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "Database cannot be deleted at /etc/kerberosIV/principal"
+ The attempt to delete the database
+ failed (probably due to a system or
+ access permission error).
+
+ "Database not deleted."
+ The user aborted the deletion.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kdb_init(8)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KDB_EDIT(8) BSD System Manager's Manual KDB_EDIT(8)
+
+
+N\bNA\bAM\bME\bE
+ kdb_edit - Kerberos key distribution center database
+ editing utility
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ kdb_edit [ -\b-n\bn ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bd_\bb_\b__\be_\bd_\bi_\bt is used to create or change principals stored in
+ the Kerberos key distribution center (KDC) database.
+
+ When executed, _\bk_\bd_\bb_\b__\be_\bd_\bi_\bt prompts for the master key string
+ and verifies that it matches the master key stored in the
+ database. If the -\b-n\bn option is specified, the master key
+ is instead fetched from the master key cache file.
+
+ Once the master key has been verified, _\bk_\bd_\bb_\b__\be_\bd_\bi_\bt begins a
+ prompt loop. The user is prompted for the principal and
+ instance to be modified. If the entry is not found the
+ user may create it. Once an entry is found or created,
+ the user may set the password, expiration date, maximum
+ ticket lifetime, and attributes. Default expiration
+ dates, maximum ticket lifetimes, and attributes are pre-
+ sented in brackets; if the user presses return the default
+ is selected. There is no default password. The password
+ RANDOM is interpreted specially, and if entered the user
+ may have the program select a random DES key for the prin-
+ cipal.
+
+ Upon successfully creating or changing the entry, ``Edit
+ O.K.'' is printed.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "verify_master_key: Invalid master key, does not match
+ database."
+ The master key string entered was
+ incorrect.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+ /etc/kerberosIV/master_key
+ Master key cache file.
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KDB_INIT(8) BSD System Manager's Manual KDB_INIT(8)
+
+
+N\bNA\bAM\bME\bE
+ kdb_init - initialize Kerberos key distribution center
+ database
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ kdb_init [ r\bre\bea\bal\blm\bm ]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bd_\bb_\b__\bi_\bn_\bi_\bt initializes a Kerberos key distribution center
+ database, creating the necessary principals.
+
+ If the optional _\br_\be_\ba_\bl_\bm argument is not present, _\bk_\bd_\bb_\b__\bi_\bn_\bi_\bt
+ prompts for a realm name (defaulting to the definition in
+ /usr/include/krb.h). After determining the realm to be
+ created, it prompts for a master key password. The master
+ key password is used to encrypt every encryption key
+ stored in the database.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "/etc/kerberosIV/principal: File exists"
+ An attempt was made to create a
+ database on a machine which already
+ had an existing database.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+ /usr/include/kerberosIV/krb.h
+ Include file defining default realm
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ kdb_destroy(8)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+
+
+
+KDB_UTIL(8) BSD System Manager's Manual KDB_UTIL(8)
+
+
+N\bNA\bAM\bME\bE
+ kdb_util - Kerberos key distribution center database
+ utility
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ kdb_util o\bop\bpe\ber\bra\bat\bti\bio\bon\bn f\bfi\bil\ble\ben\bna\bam\bme\be
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bd_\bb_\b__\bu_\bt_\bi_\bl allows the Kerberos key distribution center (KDC)
+ database administrator to perform utility functions on the
+ database.
+
+ _\bO_\bp_\be_\br_\ba_\bt_\bi_\bo_\bn must be one of the following:
+
+ _\bl_\bo_\ba_\bd initializes the KDC database with the records
+ described by the text contained in the file
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be. Any existing database is overwritten.
+
+ _\bd_\bu_\bm_\bp dumps the KDC database into a text representa-
+ tion in the file _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.
+
+ _\bs_\bl_\ba_\bv_\be_\b__\bd_\bu_\bm_\bp
+ performs a database dump like the _\bd_\bu_\bm_\bp opera-
+ tion, and additionally creates a semaphore file
+ signaling the propagation software that an
+ update is available for distribution to slave
+ KDC databases.
+
+ _\bn_\be_\bw_\b__\bm_\ba_\bs_\bt_\be_\br_\b__\bk_\be_\by
+ prompts for the old and new master key strings,
+ and then dumps the KDC database into a text rep-
+ resentation in the file _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be. The keys in
+ the text representation are encrypted in the new
+ master key.
+
+ _\bc_\bo_\bn_\bv_\be_\br_\bt_\b__\bo_\bl_\bd_\b__\bd_\bb
+ prompts for the master key string, and then
+ dumps the KDC database into a text representa-
+ tion in the file _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be. The existing
+ database is assumed to be encrypted using the
+ old format (encrypted by the key schedule of the
+ master key); the dumped database is encrypted
+ using the new format (encrypted directly with
+ master key).
+
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "verify_master_key: Invalid master key, does not match
+ database."
+ The master key string entered was
+ incorrect.
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
+
+
+
+KDB_UTIL(8) BSD System Manager's Manual KDB_UTIL(8)
+
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.ok semaphore file created by _\bs_\bl_\ba_\bv_\be_\b__\bd_\bu_\bm_\bp_\b.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 2
+
+
+
+
+
--- /dev/null
+
+
+
+KSTASH(8) BSD System Manager's Manual KSTASH(8)
+
+
+N\bNA\bAM\bME\bE
+ kstash - stash Kerberos key distribution center database
+ master key
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ kstash
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ _\bk_\bs_\bt_\ba_\bs_\bh saves the Kerberos key distribution center (KDC)
+ database master key in the master key cache file.
+
+ The user is prompted to enter the key, to verify the
+ authenticity of the key and the authorization to store the
+ key in the file.
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ "verify_master_key: Invalid master key, does not match
+ database."
+ The master key string entered was
+ incorrect.
+
+ "kstash: Unable to open master key file"
+ The attempt to open the cache file for
+ writing failed (probably due to a sys-
+ tem or access permission error).
+
+ "kstash: Write I/O error on master key file"
+ The w\bwr\bri\bit\bte\be(2) system call returned an
+ error while _\bk_\bs_\bt_\ba_\bs_\bh was attempting to
+ write the key to the file.
+
+F\bFI\bIL\bLE\bES\bS
+ /etc/kerberosIV/principal.pag,
+ /etc/kerberosIV/principal.dir
+ DBM files containing database
+
+ /etc/kerberosIV/master_key
+ Master key cache file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MIT Project Athena Kerberos Version 4.0 1
+
+
+
+
+
--- /dev/null
+MAKE_KEYPAIR(8) BSD System Manager's Manual MAKE_KEYPAIR(8)
+
+N\bNA\bAM\bME\bE
+ m\bma\bak\bke\be_\b_k\bke\bey\byp\bpa\bai\bir\br - generate Kerberos host key pair
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ m\bma\bak\bke\be_\b_k\bke\bey\byp\bpa\bai\bir\br _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be [_\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be _\b._\b._\b.]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ The m\bma\bak\bke\be_\b_k\bke\bey\byp\bpa\bai\bir\br command is used to create pairs of DES keys for each
+ _\bh_\bo_\bs_\bt_\bn_\ba_\bm_\be. The keys are used by privileged programs such as register(1) to
+ make remote updates to the Kerberos database without having to have first
+ acquired a Kerberos ticket granting ticket (TGT). The keys created by
+ m\bma\bak\bke\be_\b_k\bke\bey\byp\bpa\bai\bir\br are placed (by hand) in the filesystems of the kerberos
+ server in _\b/_\be_\bt_\bc_\b/_\bk_\be_\br_\bb_\be_\br_\bo_\bs_\bI_\bV_\b/_\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\bk_\be_\by_\bs, and in the root directory of the
+ clients. For example, the file _\b/_\b._\bu_\bp_\bd_\ba_\bt_\be_\b._\bk_\be_\by_\b1_\b2_\b8_\b._\b3_\b2_\b._\b1_\b3_\b0_\b._\b3 would contain a
+ copy of the key of the client with IP address 128.32.130.3. These keys
+ provide a shared secret which may be used to establish a secure channel
+ between the client hosts and the Kerberos server.
+
+F\bFI\bIL\bLE\bES\bS
+ /.update.keyxx.xx.xx.xx shared DES key with server
+ /etc/kerberosIV/register_keys server's key storage directory
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ register(1), registerd(8), kerberos(1)
+
+H\bHI\bIS\bST\bTO\bOR\bRY\bY
+ The m\bma\bak\bke\be_\b_k\bke\bey\byp\bpa\bai\bir\br utility first appeared in 4.4BSD.
+
+4.4BSD December 11, 1993 1
--- /dev/null
+REGISTERD(8) BSD System Manager's Manual REGISTERD(8)
+
+N\bNA\bAM\bME\bE
+ r\bre\beg\bgi\bis\bst\bte\ber\brd\bd - Kerberos registration daemon
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ r\bre\beg\bgi\bis\bst\bte\ber\brd\bd
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ Act as a registration agent for a Kerberos domain.
+
+F\bFI\bIL\bLE\bES\bS
+ /.update.keyxx.xx.xx.xx shared DES key with server
+ /etc/kerberosIV/principal* Kerberos database
+ /etc/kerberosIV/register_keys directory containing keys for trusted
+ hosts
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ registerd(8), kerberos(1)
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ ``Already exists'', if the user already exists in the Kerberos database.
+
+ ``Permission Denied'', if the host on which register is being run is un-
+ trusted.
+
+H\bHI\bIS\bST\bTO\bOR\bRY\bY
+ The r\bre\beg\bgi\bis\bst\bte\ber\brd\bd utility first appeared in 4.4BSD.
+
+
+4.4BSD December 11, 1993 1