Annotation of 43BSDReno/kerberosIV/man/krb.3, revision 1.1.1.1

1.1       root        1: .\" $Source: /usr/src/kerberosIV/man/RCS/kerberos.3,v $
                      2: .\" $Author: kfall $
                      3: .\" $Header: /usr/src/kerberosIV/man/RCS/kerberos.3,v 4.10 90/06/25 21:12:11 kfall Exp $
                      4: .\" Copyright 1989 by the Massachusetts Institute of Technology.
                      5: .\"
                      6: .\" For copying and distribution information,
                      7: .\" please see the file <mit-copyright.h>.
                      8: .\"
                      9: .TH KERBEROS 3 "Kerberos Version 4.0" "MIT Project Athena"
                     10: .SH NAME
                     11: krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key, krb_get_cred,
                     12: krb_mk_priv, krb_rd_priv, krb_mk_safe, krb_rd_safe, krb_mk_err,
                     13: krb_rd_err, krb_ck_repl \- Kerberos authentication library
                     14: .SH SYNOPSIS
                     15: .nf
                     16: .nj
                     17: .ft B
                     18: #include <kerberosIV/des.h>
                     19: #include <kerberosIV/krb.h>
                     20: .PP
                     21: .ft B
                     22: extern char *krb_err_txt[];
                     23: .PP
                     24: .ft B
                     25: int krb_mk_req(authent,service,instance,realm,checksum)
                     26: KTEXT authent;
                     27: char *service;
                     28: char *instance;
                     29: char *realm;
                     30: u_long checksum;
                     31: .PP
                     32: .ft B
                     33: int krb_rd_req(authent,service,instance,from_addr,ad,fn)
                     34: KTEXT authent;
                     35: char *service;
                     36: char *instance;
                     37: u_long from_addr;
                     38: AUTH_DAT *ad;
                     39: char *fn;
                     40: .PP
                     41: .ft B
                     42: int krb_kntoln(ad,lname)
                     43: AUTH_DAT *ad;
                     44: char *lname;
                     45: .PP
                     46: .ft B
                     47: int krb_set_key(key,cvt)
                     48: char *key;
                     49: int cvt;
                     50: .PP
                     51: .ft B
                     52: int krb_get_cred(service,instance,realm,c)
                     53: char *service;
                     54: char *instance;
                     55: char *realm;
                     56: CREDENTIALS *c;
                     57: .PP
                     58: .ft B
                     59: long krb_mk_priv(in,out,in_length,schedule,key,sender,receiver)
                     60: u_char *in;
                     61: u_char *out;
                     62: u_long in_length;
                     63: des_cblock key;
                     64: des_key_schedule schedule;
                     65: struct sockaddr_in *sender;
                     66: struct sockaddr_in *receiver;
                     67: .PP
                     68: .ft B
                     69: long krb_rd_priv(in,in_length,schedule,key,sender,receiver,msg_data)
                     70: u_char *in;
                     71: u_long in_length;
                     72: Key_schedule schedule;
                     73: des_cblock key;
                     74: struct sockaddr_in *sender;
                     75: struct sockaddr_in *receiver;
                     76: MSG_DAT *msg_data;
                     77: .PP
                     78: .ft B
                     79: long krb_mk_safe(in,out,in_length,key,sender,receiver)
                     80: u_char *in;
                     81: u_char *out;
                     82: u_long in_length;
                     83: des_cblock key;
                     84: struct sockaddr_in *sender;
                     85: struct sockaddr_in *receiver;
                     86: .PP
                     87: .ft B
                     88: long krb_rd_safe(in,length,key,sender,receiver,msg_data)
                     89: u_char *in;
                     90: u_long length;
                     91: des_cblock key;
                     92: struct sockaddr_in *sender;
                     93: struct sockaddr_in *receiver;
                     94: MSG_DAT *msg_data;
                     95: .PP
                     96: .ft B
                     97: long krb_mk_err(out,code,string)
                     98: u_char *out;
                     99: long code;
                    100: char *string;
                    101: .PP
                    102: .ft B
                    103: long krb_rd_err(in,length,code,msg_data)
                    104: u_char *in;
                    105: u_long length;
                    106: long code;
                    107: MSG_DAT *msg_data;
                    108: .fi
                    109: .ft R
                    110: .SH DESCRIPTION
                    111: This library supports network authentication and various related
                    112: operations.  The library contains many routines beyond those described
                    113: in this man page, but they are not intended to be used directly.
                    114: Instead, they are called by the routines that are described, the
                    115: authentication server and the login program.
                    116: .PP
                    117: .I krb_err_txt[]
                    118: contains text string descriptions of various Kerberos error codes returned
                    119: by some of the routines below.
                    120: .PP
                    121: .I krb_mk_req
                    122: takes a pointer to a text structure in which an authenticator is to be
                    123: built.  It also takes the name, instance, and realm of the service to be
                    124: used and an optional checksum.  It is up to the application to decide
                    125: how to generate the checksum.
                    126: .I krb_mk_req
                    127: then retrieves a ticket for the desired service and creates an
                    128: authenticator.  The authenticator is built in
                    129: .I authent
                    130: and is accessible
                    131: to the calling procedure.
                    132: .PP
                    133: It is up to the application to get the authenticator to the service
                    134: where it will be read by
                    135: .I krb_rd_req.
                    136: Unless an attacker posesses the session key contained in the ticket, it
                    137: will be unable to modify the authenticator.  Thus, the checksum can be
                    138: used to verify the authenticity of the other data that will pass through
                    139: a connection.
                    140: .PP
                    141: .I krb_rd_req
                    142: takes an authenticator of type
                    143: .B KTEXT,
                    144: a service name, an instance, the address of the
                    145: host originating the request, and a pointer to a structure of type
                    146: .B AUTH_DAT
                    147: which is filled in with information obtained from the authenticator.
                    148: It also optionally takes the name of the file in which it will find the
                    149: secret key(s) for the service.
                    150: If the supplied
                    151: .I instance
                    152: contains "*", then the first service key with the same service name
                    153: found in the service key file will be used, and the
                    154: .I instance
                    155: argument will be filled in with the chosen instance.  This means that
                    156: the caller must provide space for such an instance name.
                    157: .PP
                    158: It is used to find out information about the principal when a request
                    159: has been made to a service.  It is up to the application protocol to get
                    160: the authenticator from the client to the service.  The authenticator is
                    161: then passed to
                    162: .I krb_rd_req
                    163: to extract the desired information.
                    164: .PP
                    165: .I krb_rd_req
                    166: returns zero (RD_AP_OK) upon successful authentication.  If a packet was
                    167: forged, modified, or replayed, authentication will fail.  If the
                    168: authentication fails, a non-zero value is returned indicating the
                    169: particular problem encountered.  See
                    170: .I krb.h
                    171: for the list of error codes.
                    172: .PP
                    173: If the last argument is the null string (""), krb_rd_req will use the
                    174: file /etc/srvtab to find its keys.  If the last argument is NULL, it
                    175: will assume that the key has been set by
                    176: .I krb_set_key
                    177: and will not bother looking further.
                    178: .PP
                    179: .I krb_kntoln
                    180: converts a Kerberos name to a local name.  It takes a structure
                    181: of type AUTH_DAT and uses the name and instance to look in the database
                    182: /etc/aname to find the corresponding local name.  The local name is
                    183: returned and can be used by an application to change uids, directories,
                    184: or other parameters.  It is not an integral part of Kerberos, but is
                    185: instead provided to support the use of Kerberos in existing utilities.
                    186: .PP
                    187: .I krb_set_key
                    188: takes as an argument a des key.  It then creates
                    189: a key schedule from it and saves the original key to be used as an
                    190: initialization vector.
                    191: It is used to set the server's key which
                    192: must be used to decrypt tickets.
                    193: .PP
                    194: If called with a non-zero second argument,
                    195: .I krb_set_key
                    196: will first convert the input from a string of arbitrary length to a DES
                    197: key by encrypting it with a one-way function.
                    198: .PP
                    199: In most cases it should not be necessary to call
                    200: .I krb_set_key.
                    201: The necessary keys will usually be obtained and set inside
                    202: .I krb_rd_req.  krb_set_key
                    203: is provided for those applications that do not wish to place the
                    204: application keys on disk.
                    205: .PP
                    206: .I krb_get_cred
                    207: searches the caller's ticket file for a ticket for the given service, instance,
                    208: and realm; and, if a ticket is found, fills in the given CREDENTIALS structure
                    209: with the ticket information.
                    210: .PP
                    211: If the ticket was found,
                    212: .I krb_get_cred
                    213: returns GC_OK.
                    214: If the ticket file can't be found, can't be read, doesn't belong to
                    215: the user (other than root), isn't a regular file, or is in the wrong
                    216: mode, the error GC_TKFIL is returned.
                    217: .PP
                    218: .I krb_mk_priv
                    219: creates an encrypted, authenticated
                    220: message from any arbitrary application data, pointed to by
                    221: .I in
                    222: and
                    223: .I in_length
                    224: bytes long.
                    225: The private session key, pointed to by
                    226: .I key
                    227: and the key schedule,
                    228: .I schedule,
                    229: are used to encrypt the data and some header information using
                    230: .I pcbc_encrypt.
                    231: .I sender
                    232: and
                    233: .I receiver
                    234: point to the Internet address of the two parties.
                    235: In addition to providing privacy, this protocol message protects
                    236: against modifications, insertions or replays.  The encapsulated message and
                    237: header are placed in the area pointed to by
                    238: .I out
                    239: and the routine returns the length of the output, or -1 indicating
                    240: an error.
                    241: .PP
                    242: .I krb_rd_priv
                    243: decrypts and authenticates a received
                    244: .I krb_mk_priv
                    245: message.
                    246: .I in
                    247: points to the beginning of the received message, whose length
                    248: is specified in
                    249: .I in_length.
                    250: The private session key, pointed to by
                    251: .I key,
                    252: and the key schedule,
                    253: .I schedule,
                    254: are used to decrypt and verify the received message.
                    255: .I msg_data
                    256: is a pointer to a
                    257: .I MSG_DAT
                    258: struct, defined in
                    259: .I krb.h.
                    260: The routine fills in the
                    261: .I app_data
                    262: field with a pointer to the decrypted application data,
                    263: .I app_length
                    264: with the length of the
                    265: .I app_data
                    266: field,
                    267: .I time_sec
                    268: and
                    269: .I time_5ms
                    270: with the timestamps in the message, and
                    271: .I swap
                    272: with a 1 if the byte order of the receiver is different than that of
                    273: the sender.  (The application must still determine if it is appropriate
                    274: to byte-swap application data; the Kerberos protocol fields are already taken
                    275: care of).  The
                    276: .I hash
                    277: field returns a value useful as input to the
                    278: .I krb_ck_repl
                    279: routine.
                    280: 
                    281: The routine returns zero if ok, or a Kerberos error code. Modified messages
                    282: and old messages cause errors, but it is up to the caller to
                    283: check the time sequence of messages, and to check against recently replayed
                    284: messages using
                    285: .I krb_ck_repl
                    286: if so desired.
                    287: .PP
                    288: .I krb_mk_safe
                    289: creates an authenticated, but unencrypted message from any arbitrary
                    290: application data,
                    291: pointed to by
                    292: .I in
                    293: and
                    294: .I in_length
                    295: bytes long.
                    296: The private session key, pointed to by
                    297: .I key,
                    298: is used to seed the
                    299: .I quad_cksum()
                    300: checksum algorithm used as part of the authentication.
                    301: .I sender
                    302: and
                    303: .I receiver
                    304: point to the Internet address of the two parties.
                    305: This message does not provide privacy, but does protect (via detection)
                    306: against modifications, insertions or replays.  The encapsulated message and
                    307: header are placed in the area pointed to by
                    308: .I out
                    309: and the routine returns the length of the output, or -1 indicating
                    310: an error.
                    311: The authentication provided by this routine is not as strong as that
                    312: provided by
                    313: .I krb_mk_priv
                    314: or by computing the checksum using
                    315: .I cbc_cksum
                    316: instead, both of which authenticate via DES.
                    317: .PP
                    318: 
                    319: .I krb_rd_safe
                    320: authenticates a received
                    321: .I krb_mk_safe
                    322: message.
                    323: .I in
                    324: points to the beginning of the received message, whose length
                    325: is specified in
                    326: .I in_length.
                    327: The private session key, pointed to by
                    328: .I key,
                    329: is used to seed the quad_cksum() routine as part of the authentication.
                    330: .I msg_data
                    331: is a pointer to a
                    332: .I MSG_DAT
                    333: struct, defined in
                    334: .I krb.h .
                    335: The routine fills in these
                    336: .I MSG_DAT
                    337: fields:
                    338: the
                    339: .I app_data
                    340: field with a pointer to the application data,
                    341: .I app_length
                    342: with the length of the
                    343: .I app_data
                    344: field,
                    345: .I time_sec
                    346: and
                    347: .I time_5ms
                    348: with the timestamps in the message, and
                    349: .I swap
                    350: with a 1 if the byte order of the receiver is different than that of
                    351: the sender.
                    352: (The application must still determine if it is appropriate
                    353: to byte-swap application data; the Kerberos protocol fields are already taken
                    354: care of).  The
                    355: .I hash
                    356: field returns a value useful as input to the
                    357: .I krb_ck_repl
                    358: routine.
                    359: 
                    360: The routine returns zero if ok, or a Kerberos error code. Modified messages
                    361: and old messages cause errors, but it is up to the caller to
                    362: check the time sequence of messages, and to check against recently replayed
                    363: messages using
                    364: .I krb_ck_repl
                    365: if so desired.
                    366: .PP
                    367: .I krb_mk_err
                    368: constructs an application level error message that may be used along
                    369: with
                    370: .I krb_mk_priv
                    371: or
                    372: .I krb_mk_safe.
                    373: .I out
                    374: is a pointer to the output buffer,
                    375: .I code
                    376: is an application specific error code, and
                    377: .I string
                    378: is an application specific error string.
                    379: 
                    380: .PP
                    381: .I krb_rd_err
                    382: unpacks a received
                    383: .I krb_mk_err
                    384: message.
                    385: .I in
                    386: points to the beginning of the received message, whose length
                    387: is specified in
                    388: .I in_length.
                    389: .I code
                    390: is a pointer to a value to be filled in with the error
                    391: value provided by the application.
                    392: .I msg_data
                    393: is a pointer to a
                    394: .I MSG_DAT
                    395: struct, defined in
                    396: .I krb.h .
                    397: The routine fills in these
                    398: .I MSG_DAT
                    399: fields: the
                    400: .I app_data
                    401: field with a pointer to the application error text,
                    402: .I app_length
                    403: with the length of the
                    404: .I app_data
                    405: field, and
                    406: .I swap
                    407: with a 1 if the byte order of the receiver is different than that of
                    408: the sender.  (The application must still determine if it is appropriate
                    409: to byte-swap application data; the Kerberos protocol fields are already taken
                    410: care of).
                    411: 
                    412: The routine returns zero if the error message has been successfully received,
                    413: or a Kerberos error code.
                    414: .PP
                    415: The
                    416: .I KTEXT
                    417: structure is used to pass around text of varying lengths.  It consists
                    418: of a buffer for the data, and a length.  krb_rd_req takes an argument of this
                    419: type containing the authenticator, and krb_mk_req returns the
                    420: authenticator in a structure of this type.  KTEXT itself is really a
                    421: pointer to the structure.   The actual structure is of type KTEXT_ST.
                    422: .PP
                    423: The
                    424: .I AUTH_DAT
                    425: structure is filled in by krb_rd_req.  It must be allocated before
                    426: calling krb_rd_req, and a pointer to it is passed.  The structure is
                    427: filled in with data obtained from Kerberos.
                    428: .I MSG_DAT
                    429: structure is filled in by either krb_rd_priv, krb_rd_safe, or
                    430: krb_rd_err.  It must be allocated before the call and a pointer to it
                    431: is passed.  The structure is
                    432: filled in with data obtained from Kerberos.
                    433: .PP
                    434: .SH FILES
                    435: /usr/include/kerberosIV/krb.h
                    436: .br
                    437: /usr/lib/libkrb.a
                    438: .br
                    439: /usr/include/kerberosIV/des.h
                    440: .br
                    441: /usr/lib/libdes.a
                    442: .br
                    443: /etc/kerberosIV/aname
                    444: .br
                    445: /etc/kerberosIV/srvtab
                    446: .br
                    447: /tmp/tkt[uid]
                    448: .SH "SEE ALSO"
                    449: kerberos(1), des_crypt(3)
                    450: .SH DIAGNOSTICS
                    451: .SH BUGS
                    452: The caller of
                    453: .I krb_rd_req, krb_rd_priv, and krb_rd_safe
                    454: must check time order and for replay attempts.
                    455: .I krb_ck_repl
                    456: is not implemented yet.
                    457: .SH AUTHORS
                    458: Clifford Neuman, MIT Project Athena
                    459: .br
                    460: Steve Miller, MIT Project Athena/Digital Equipment Corporation
                    461: .SH RESTRICTIONS
                    462: COPYRIGHT 1985,1986,1989 Massachusetts Institute of Technology

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.