home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / kerberosIV / include / krb.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-11  |  12.7 KB  |  383 lines

  1. /*
  2.  * $Source: /usr/src/kerberosIV/src/include/RCS/krb.h,v $
  3.  * $Author: kfall $
  4.  * $Header: /usr/src/kerberosIV/src/include/RCS/krb.h,v 4.27 90/05/12 00:04:07 kfall Exp $ 
  5.  *
  6.  * Copyright 1987, 1988 by the Massachusetts Institute of Technology. 
  7.  *
  8.  * For copying and distribution information, please see the file
  9.  * <mit-copyright.h>. 
  10.  *
  11.  * Include file for the Kerberos library. 
  12.  */
  13.  
  14. /* Only one time, please */
  15. #ifndef    KRB_DEFS
  16. #define KRB_DEFS
  17.  
  18. #ifdef    ATHENA
  19. #include <mit-copyright.h>
  20.  
  21. /* Need some defs from des.h     */
  22. #include <des.h>
  23. #endif
  24.  
  25. /* Text describing error codes */
  26. #define        MAX_KRB_ERRORS    256
  27. extern char *krb_err_txt[MAX_KRB_ERRORS];
  28.  
  29. /* These are not defined for at least SunOS 3.3 and Ultrix 2.2 */
  30. #if defined(ULTRIX022) || (defined(SunOS) && SunOS < 40)
  31. #define FD_ZERO(p)  ((p)->fds_bits[0] = 0)
  32. #define FD_SET(n, p)   ((p)->fds_bits[0] |= (1 << (n)))
  33. #define FD_ISSET(n, p)   ((p)->fds_bits[0] & (1 << (n)))
  34. #endif /* ULTRIX022 || SunOS */
  35.  
  36. /* General definitions */
  37. #define        KSUCCESS    0
  38. #define        KFAILURE    255
  39.  
  40. #ifdef NO_UIDGID_T
  41. typedef unsigned short uid_t;
  42. typedef unsigned short gid_t;
  43. #endif /* NO_UIDGID_T */
  44.  
  45. /*
  46.  * Kerberos specific definitions 
  47.  *
  48.  * KRBLOG is the log file for the kerberos master server. KRB_CONF is
  49.  * the configuration file where different host machines running master
  50.  * and slave servers can be found. KRB_MASTER is the name of the
  51.  * machine with the master database.  The admin_server runs on this
  52.  * machine, and all changes to the db (as opposed to read-only
  53.  * requests, which can go to slaves) must go to it. KRB_HOST is the
  54.  * default machine * when looking for a kerberos slave server.  Other
  55.  * possibilities are * in the KRB_CONF file. KRB_REALM is the name of
  56.  * the realm. 
  57.  */
  58.  
  59. #ifdef notdef
  60. this is server - only, does not belong here;
  61. #define     KRBLOG         "/etc/kerberosIV/kerberos.log"
  62. are these used anyplace '?';
  63. #define        VX_KRB_HSTFILE    "/etc/kerberosIV/krbhst"
  64. #define        PC_KRB_HSTFILE    "\\kerberos\\krbhst"
  65. #endif
  66.  
  67. #define        KRB_CONF    "/etc/kerberosIV/krb.conf"
  68. #define        KRB_RLM_TRANS    "/etc/kerberosIV/krb.realms"
  69. #define        KRB_MASTER    "kerberos"
  70. #define        KRB_HOST     KRB_MASTER
  71. #define        KRB_REALM    "CS.BERKELEY.EDU"
  72.  
  73. /* The maximum sizes for aname, realm, sname, and instance +1 */
  74. #define     ANAME_SZ    40
  75. #define        REALM_SZ    40
  76. #define        SNAME_SZ    40
  77. #define        INST_SZ        40
  78. /* include space for '.' and '@' */
  79. #define        MAX_K_NAME_SZ    (ANAME_SZ + INST_SZ + REALM_SZ + 2)
  80. #define        KKEY_SZ        100
  81. #define        VERSION_SZ    1
  82. #define        MSG_TYPE_SZ    1
  83. #define        DATE_SZ        26    /* RTI date output */
  84.  
  85. #define        MAX_HSTNM    100
  86.  
  87. #ifndef DEFAULT_TKT_LIFE        /* allow compile-time override */
  88. #define        DEFAULT_TKT_LIFE    96 /* default lifetime for krb_mk_req
  89.                           & co., 8 hrs */
  90. #endif
  91.  
  92. /* Definition of text structure used to pass text around */
  93. #define        MAX_KTXT_LEN    1250
  94.  
  95. struct ktext {
  96.     int     length;        /* Length of the text */
  97.     unsigned char dat[MAX_KTXT_LEN];    /* The data itself */
  98.     unsigned long mbz;        /* zero to catch runaway strings */
  99. };
  100.  
  101. typedef struct ktext *KTEXT;
  102. typedef struct ktext KTEXT_ST;
  103.  
  104.  
  105. /* Definitions for send_to_kdc */
  106. #define    CLIENT_KRB_TIMEOUT    4    /* time between retries */
  107. #define CLIENT_KRB_RETRY    5    /* retry this many times */
  108. #define    CLIENT_KRB_BUFLEN    512    /* max unfragmented packet */
  109.  
  110. /* Definitions for ticket file utilities */
  111. #define    R_TKT_FIL    0
  112. #define    W_TKT_FIL    1
  113.  
  114. /* Definitions for cl_get_tgt */
  115. #ifdef PC
  116. #define CL_GTGT_INIT_FILE        "\\kerberos\\k_in_tkts"
  117. #else
  118. #define CL_GTGT_INIT_FILE        "/etc/kerberosIV/k_in_tkts"
  119. #endif PC
  120.  
  121. /* Parameters for rd_ap_req */
  122. /* Maximum alloable clock skew in seconds */
  123. #define     CLOCK_SKEW    5*60
  124. /* Filename for readservkey */
  125. #define        KEYFILE        "/etc/kerberosIV/srvtab"
  126.  
  127. /* Structure definition for rd_ap_req */
  128.  
  129. struct auth_dat {
  130.     unsigned char k_flags;    /* Flags from ticket */
  131.     char    pname[ANAME_SZ];    /* Principal's name */
  132.     char    pinst[INST_SZ];    /* His Instance */
  133.     char    prealm[REALM_SZ];    /* His Realm */
  134.     unsigned long checksum;    /* Data checksum (opt) */
  135.     C_Block session;        /* Session Key */
  136.     int     life;        /* Life of ticket */
  137.     unsigned long time_sec;    /* Time ticket issued */
  138.     unsigned long address;    /* Address in ticket */
  139.     KTEXT_ST reply;        /* Auth reply (opt) */
  140. };
  141.  
  142. typedef struct auth_dat AUTH_DAT;
  143.  
  144. /* Structure definition for credentials returned by get_cred */
  145.  
  146. struct credentials {
  147.     char    service[ANAME_SZ];    /* Service name */
  148.     char    instance[INST_SZ];    /* Instance */
  149.     char    realm[REALM_SZ];    /* Auth domain */
  150.     C_Block session;        /* Session key */
  151.     int     lifetime;        /* Lifetime */
  152.     int     kvno;        /* Key version number */
  153.     KTEXT_ST ticket_st;        /* The ticket itself */
  154.     long    issue_date;        /* The issue time */
  155.     char    pname[ANAME_SZ];    /* Principal's name */
  156.     char    pinst[INST_SZ];    /* Principal's instance */
  157. };
  158.  
  159. typedef struct credentials CREDENTIALS;
  160.  
  161. /* Structure definition for rd_private_msg and rd_safe_msg */
  162.  
  163. struct msg_dat {
  164.     unsigned char *app_data;    /* pointer to appl data */
  165.     unsigned long app_length;    /* length of appl data */
  166.     unsigned long hash;        /* hash to lookup replay */
  167.     int     swap;        /* swap bytes? */
  168.     long    time_sec;        /* msg timestamp seconds */
  169.     unsigned char time_5ms;    /* msg timestamp 5ms units */
  170. };
  171.  
  172. typedef struct msg_dat MSG_DAT;
  173.  
  174.  
  175. /* Location of ticket file for save_cred and get_cred */
  176. #ifdef PC
  177. #define TKT_FILE        "\\kerberos\\ticket.ses"
  178. #else
  179. #define TKT_FILE        tkt_string()
  180. #define TKT_ROOT        "/tmp/tkt"
  181. #endif PC
  182.  
  183. /* Error codes returned from the KDC */
  184. #define        KDC_OK        0    /* Request OK */
  185. #define        KDC_NAME_EXP    1    /* Principal expired */
  186. #define        KDC_SERVICE_EXP    2    /* Service expired */
  187. #define        KDC_AUTH_EXP    3    /* Auth expired */
  188. #define        KDC_PKT_VER    4    /* Protocol version unknown */
  189. #define        KDC_P_MKEY_VER    5    /* Wrong master key version */
  190. #define        KDC_S_MKEY_VER     6    /* Wrong master key version */
  191. #define        KDC_BYTE_ORDER    7    /* Byte order unknown */
  192. #define        KDC_PR_UNKNOWN    8    /* Principal unknown */
  193. #define        KDC_PR_N_UNIQUE 9    /* Principal not unique */
  194. #define        KDC_NULL_KEY   10    /* Principal has null key */
  195. #define        KDC_GEN_ERR    20    /* Generic error from KDC */
  196.  
  197.  
  198. /* Values returned by get_credentials */
  199. #define        GC_OK        0    /* Retrieve OK */
  200. #define        RET_OK        0    /* Retrieve OK */
  201. #define        GC_TKFIL       21    /* Can't read ticket file */
  202. #define        RET_TKFIL      21    /* Can't read ticket file */
  203. #define        GC_NOTKT       22    /* Can't find ticket or TGT */
  204. #define        RET_NOTKT      22    /* Can't find ticket or TGT */
  205.  
  206.  
  207. /* Values returned by mk_ap_req     */
  208. #define        MK_AP_OK    0    /* Success */
  209. #define        MK_AP_TGTEXP   26    /* TGT Expired */
  210.  
  211. /* Values returned by rd_ap_req */
  212. #define        RD_AP_OK    0    /* Request authentic */
  213. #define        RD_AP_UNDEC    31    /* Can't decode authenticator */
  214. #define        RD_AP_EXP      32    /* Ticket expired */
  215. #define        RD_AP_NYV      33    /* Ticket not yet valid */
  216. #define        RD_AP_REPEAT   34    /* Repeated request */
  217. #define        RD_AP_NOT_US   35    /* The ticket isn't for us */
  218. #define        RD_AP_INCON    36    /* Request is inconsistent */
  219. #define        RD_AP_TIME     37    /* delta_t too big */
  220. #define        RD_AP_BADD     38    /* Incorrect net address */
  221. #define        RD_AP_VERSION  39    /* protocol version mismatch */
  222. #define        RD_AP_MSG_TYPE 40    /* invalid msg type */
  223. #define        RD_AP_MODIFIED 41    /* message stream modified */
  224. #define        RD_AP_ORDER    42    /* message out of order */
  225. #define        RD_AP_UNAUTHOR 43    /* unauthorized request */
  226.  
  227. /* Values returned by get_pw_tkt */
  228. #define        GT_PW_OK    0    /* Got password changing tkt */
  229. #define        GT_PW_NULL     51    /* Current PW is null */
  230. #define        GT_PW_BADPW    52    /* Incorrect current password */
  231. #define        GT_PW_PROT     53    /* Protocol Error */
  232. #define        GT_PW_KDCERR   54    /* Error returned by KDC */
  233. #define        GT_PW_NULLTKT  55    /* Null tkt returned by KDC */
  234.  
  235.  
  236. /* Values returned by send_to_kdc */
  237. #define        SKDC_OK        0    /* Response received */
  238. #define        SKDC_RETRY     56    /* Retry count exceeded */
  239. #define        SKDC_CANT      57    /* Can't send request */
  240.  
  241. /*
  242.  * Values returned by get_intkt
  243.  * (can also return SKDC_* and KDC errors)
  244.  */
  245.  
  246. #define        INTK_OK        0    /* Ticket obtained */
  247. #define        INTK_W_NOTALL  61    /* Not ALL tickets returned */
  248. #define        INTK_BADPW     62    /* Incorrect password */
  249. #define        INTK_PROT      63    /* Protocol Error */
  250. #define        INTK_ERR       70    /* Other error */
  251.  
  252. /* Values returned by get_adtkt */
  253. #define         AD_OK           0    /* Ticket Obtained */
  254. #define         AD_NOTGT       71    /* Don't have tgt */
  255.  
  256. /* Error codes returned by ticket file utilities */
  257. #define        NO_TKT_FIL    76    /* No ticket file found */
  258. #define        TKT_FIL_ACC    77    /* Couldn't access tkt file */
  259. #define        TKT_FIL_LCK    78    /* Couldn't lock ticket file */
  260. #define        TKT_FIL_FMT    79    /* Bad ticket file format */
  261. #define        TKT_FIL_INI    80    /* tf_init not called first */
  262.  
  263. /* Error code returned by kparse_name */
  264. #define        KNAME_FMT    81    /* Bad Kerberos name format */
  265.  
  266. /* Error code returned by krb_mk_safe */
  267. #define        SAFE_PRIV_ERROR    -1    /* syscall error */
  268.  
  269. /*
  270.  * macros for byte swapping; also scratch space
  271.  * u_quad  0-->7, 1-->6, 2-->5, 3-->4, 4-->3, 5-->2, 6-->1, 7-->0
  272.  * u_long  0-->3, 1-->2, 2-->1, 3-->0
  273.  * u_short 0-->1, 1-->0
  274.  */
  275.  
  276. #define     swap_u_16(x) {\
  277.  unsigned long   _krb_swap_tmp[4];\
  278.  swab(((char *) x) +0, ((char *)  _krb_swap_tmp) +14 ,2); \
  279.  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +12 ,2); \
  280.  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +10 ,2); \
  281.  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +8  ,2); \
  282.  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +6 ,2); \
  283.  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +4 ,2); \
  284.  swab(((char *) x) +12,((char *)  _krb_swap_tmp) +2 ,2); \
  285.  swab(((char *) x) +14,((char *)  _krb_swap_tmp) +0 ,2); \
  286.  bcopy((char *)_krb_swap_tmp,(char *)x,16);\
  287.                             }
  288.  
  289. #define     swap_u_12(x) {\
  290.  unsigned long   _krb_swap_tmp[4];\
  291.  swab(( char *) x,     ((char *)  _krb_swap_tmp) +10 ,2); \
  292.  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +8 ,2); \
  293.  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +6 ,2); \
  294.  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +4 ,2); \
  295.  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +2 ,2); \
  296.  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +0 ,2); \
  297.  bcopy((char *)_krb_swap_tmp,(char *)x,12);\
  298.                             }
  299.  
  300. #define     swap_C_Block(x) {\
  301.  unsigned long   _krb_swap_tmp[4];\
  302.  swab(( char *) x,    ((char *)  _krb_swap_tmp) +6 ,2); \
  303.  swab(((char *) x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
  304.  swab(((char *) x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
  305.  swab(((char *) x) +6,((char *)  _krb_swap_tmp)    ,2); \
  306.  bcopy((char *)_krb_swap_tmp,(char *)x,8);\
  307.                             }
  308. #define     swap_u_quad(x) {\
  309.  unsigned long   _krb_swap_tmp[4];\
  310.  swab(( char *) &x,    ((char *)  _krb_swap_tmp) +6 ,2); \
  311.  swab(((char *) &x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
  312.  swab(((char *) &x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
  313.  swab(((char *) &x) +6,((char *)  _krb_swap_tmp)    ,2); \
  314.  bcopy((char *)_krb_swap_tmp,(char *)&x,8);\
  315.                             }
  316.  
  317. #define     swap_u_long(x) {\
  318.  unsigned long   _krb_swap_tmp[4];\
  319.  swab((char *)  &x,    ((char *)  _krb_swap_tmp) +2 ,2); \
  320.  swab(((char *) &x) +2,((char *)  _krb_swap_tmp),2); \
  321.  x = _krb_swap_tmp[0];   \
  322.                            }
  323.  
  324. #define     swap_u_short(x) {\
  325.  unsigned short    _krb_swap_sh_tmp; \
  326.  swab((char *)  &x,    ( &_krb_swap_sh_tmp) ,2); \
  327.  x = (unsigned short) _krb_swap_sh_tmp; \
  328.                             }
  329.  
  330. /* Kerberos ticket flag field bit definitions */
  331. #define K_FLAG_ORDER    0       /* bit 0 --> lsb */
  332. #define K_FLAG_1                /* reserved */
  333. #define K_FLAG_2                /* reserved */
  334. #define K_FLAG_3                /* reserved */
  335. #define K_FLAG_4                /* reserved */
  336. #define K_FLAG_5                /* reserved */
  337. #define K_FLAG_6                /* reserved */
  338. #define K_FLAG_7                /* reserved, bit 7 --> msb */
  339.  
  340. #ifndef PC
  341. char *tkt_string();
  342. #endif    PC
  343.  
  344. #ifdef    OLDNAMES
  345. #define krb_mk_req    mk_ap_req
  346. #define krb_rd_req    rd_ap_req
  347. #define krb_kntoln    an_to_ln
  348. #define krb_set_key    set_serv_key
  349. #define krb_get_cred    get_credentials
  350. #define krb_mk_priv    mk_private_msg
  351. #define krb_rd_priv    rd_private_msg
  352. #define krb_mk_safe    mk_safe_msg
  353. #define krb_rd_safe    rd_safe_msg
  354. #define krb_mk_err    mk_appl_err_msg
  355. #define krb_rd_err    rd_appl_err_msg
  356. #define krb_ck_repl    check_replay
  357. #define    krb_get_pw_in_tkt    get_in_tkt
  358. #define krb_get_svc_in_tkt    get_svc_in_tkt
  359. #define krb_get_pw_tkt        get_pw_tkt
  360. #define krb_realmofhost        krb_getrealm
  361. #define krb_get_phost        get_phost
  362. #define krb_get_krbhst        get_krbhst
  363. #define krb_get_lrealm        get_krbrlm
  364. #endif    OLDNAMES
  365.  
  366. /* Defines for krb_sendauth and krb_recvauth */
  367.  
  368. #define    KOPT_DONT_MK_REQ 0x00000001 /* don't call krb_mk_req */
  369. #define    KOPT_DO_MUTUAL   0x00000002 /* do mutual auth */
  370.  
  371. #define    KOPT_DONT_CANON  0x00000004 /*
  372.                      * don't canonicalize inst as
  373.                      * a hostname
  374.                      */
  375.  
  376. #define    KRB_SENDAUTH_VLEN 8        /* length for version strings */
  377.  
  378. #ifdef ATHENA_COMPAT
  379. #define    KOPT_DO_OLDSTYLE 0x00000008 /* use the old-style protocol */
  380. #endif ATHENA_COMPAT
  381.  
  382. #endif    KRB_DEFS
  383.