|
|
1.1 ! root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.