2 * $Id: krb-archaeology.h,v 1.2 1997/12/05 02:04:44 joda Exp $
4 * Most of the cruft in this file is probably:
6 * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
9 * For copying and distribution information, please see the file
13 #ifndef __KRB_ARCHAEOLOGY_H__
14 #define __KRB_ARCHAEOLOGY_H__
16 /* Compare x and y in VAX byte order, result is -1, 0 or 1. */
18 #define krb_lsb_antinet_ulong_less(x, y) (((x) == (y)) ? 0 : krb_lsb_antinet_ulong_cmp(x, y))
20 #define krb_lsb_antinet_ushort_less(x, y) (((x) == (y)) ? 0 : krb_lsb_antinet_ushort_cmp(x, y))
22 int krb_lsb_antinet_ulong_cmp(u_int32_t x, u_int32_t y);
23 int krb_lsb_antinet_ushort_cmp(u_int16_t x, u_int16_t y);
24 u_int32_t lsb_time(time_t t, struct sockaddr_in *src, struct sockaddr_in *dst);
26 /* Macro's to obtain various fields from a packet */
28 #define pkt_version(packet) (unsigned int) *(packet->dat)
29 #define pkt_msg_type(packet) (unsigned int) *(packet->dat+1)
30 #define pkt_a_name(packet) (packet->dat+2)
31 #define pkt_a_inst(packet) \
32 (packet->dat+3+strlen((char *)pkt_a_name(packet)))
33 #define pkt_a_realm(packet) \
34 (pkt_a_inst(packet)+1+strlen((char *)pkt_a_inst(packet)))
36 /* Macro to obtain realm from application request */
37 #define apreq_realm(auth) (auth->dat + 3)
39 #define pkt_time_ws(packet) (char *) \
40 (packet->dat+5+strlen((char *)pkt_a_name(packet)) + \
41 strlen((char *)pkt_a_inst(packet)) + \
42 strlen((char *)pkt_a_realm(packet)))
44 #define pkt_no_req(packet) (unsigned short) \
45 *(packet->dat+9+strlen((char *)pkt_a_name(packet)) + \
46 strlen((char *)pkt_a_inst(packet)) + \
47 strlen((char *)pkt_a_realm(packet)))
48 #define pkt_x_date(packet) (char *) \
49 (packet->dat+10+strlen((char *)pkt_a_name(packet)) + \
50 strlen((char *)pkt_a_inst(packet)) + \
51 strlen((char *)pkt_a_realm(packet)))
52 #define pkt_err_code(packet) ( (char *) \
53 (packet->dat+9+strlen((char *)pkt_a_name(packet)) + \
54 strlen((char *)pkt_a_inst(packet)) + \
55 strlen((char *)pkt_a_realm(packet))))
56 #define pkt_err_text(packet) \
57 (packet->dat+13+strlen((char *)pkt_a_name(packet)) + \
58 strlen((char *)pkt_a_inst(packet)) + \
59 strlen((char *)pkt_a_realm(packet)))
62 * macros for byte swapping; also scratch space
63 * u_quad 0-->7, 1-->6, 2-->5, 3-->4, 4-->3, 5-->2, 6-->1, 7-->0
64 * u_int32_t 0-->3, 1-->2, 2-->1, 3-->0
65 * u_int16_t 0-->1, 1-->0
68 #define swap_u_16(x) {\
69 u_int32_t _krb_swap_tmp[4];\
70 swab(((char *) x) +0, ((char *) _krb_swap_tmp) +14 ,2); \
71 swab(((char *) x) +2, ((char *) _krb_swap_tmp) +12 ,2); \
72 swab(((char *) x) +4, ((char *) _krb_swap_tmp) +10 ,2); \
73 swab(((char *) x) +6, ((char *) _krb_swap_tmp) +8 ,2); \
74 swab(((char *) x) +8, ((char *) _krb_swap_tmp) +6 ,2); \
75 swab(((char *) x) +10,((char *) _krb_swap_tmp) +4 ,2); \
76 swab(((char *) x) +12,((char *) _krb_swap_tmp) +2 ,2); \
77 swab(((char *) x) +14,((char *) _krb_swap_tmp) +0 ,2); \
78 memcpy(x, _krb_swap_tmp, 16);\
81 #define swap_u_12(x) {\
82 u_int32_t _krb_swap_tmp[4];\
83 swab(( char *) x, ((char *) _krb_swap_tmp) +10 ,2); \
84 swab(((char *) x) +2, ((char *) _krb_swap_tmp) +8 ,2); \
85 swab(((char *) x) +4, ((char *) _krb_swap_tmp) +6 ,2); \
86 swab(((char *) x) +6, ((char *) _krb_swap_tmp) +4 ,2); \
87 swab(((char *) x) +8, ((char *) _krb_swap_tmp) +2 ,2); \
88 swab(((char *) x) +10,((char *) _krb_swap_tmp) +0 ,2); \
89 memcpy(x, _krb_swap_tmp, 12);\
92 #define swap_C_Block(x) {\
93 u_int32_t _krb_swap_tmp[4];\
94 swab(( char *) x, ((char *) _krb_swap_tmp) +6 ,2); \
95 swab(((char *) x) +2,((char *) _krb_swap_tmp) +4 ,2); \
96 swab(((char *) x) +4,((char *) _krb_swap_tmp) +2 ,2); \
97 swab(((char *) x) +6,((char *) _krb_swap_tmp) ,2); \
98 memcpy(x, _krb_swap_tmp, 8);\
100 #define swap_u_quad(x) {\
101 u_int32_t _krb_swap_tmp[4];\
102 swab(( char *) &x, ((char *) _krb_swap_tmp) +6 ,2); \
103 swab(((char *) &x) +2,((char *) _krb_swap_tmp) +4 ,2); \
104 swab(((char *) &x) +4,((char *) _krb_swap_tmp) +2 ,2); \
105 swab(((char *) &x) +6,((char *) _krb_swap_tmp) ,2); \
106 memcpy(x, _krb_swap_tmp, 8);\
109 #define swap_u_long(x) {\
110 u_int32_t _krb_swap_tmp[4];\
111 swab((char *) &x, ((char *) _krb_swap_tmp) +2 ,2); \
112 swab(((char *) &x) +2,((char *) _krb_swap_tmp),2); \
113 x = _krb_swap_tmp[0]; \
116 #define swap_u_short(x) {\
117 u_int16_t _krb_swap_sh_tmp; \
118 swab((char *) &x, ( &_krb_swap_sh_tmp) ,2); \
119 x = (u_int16_t) _krb_swap_sh_tmp; \
121 /* Kerberos ticket flag field bit definitions */
122 #define K_FLAG_ORDER 0 /* bit 0 --> lsb */
123 #define K_FLAG_1 /* reserved */
124 #define K_FLAG_2 /* reserved */
125 #define K_FLAG_3 /* reserved */
126 #define K_FLAG_4 /* reserved */
127 #define K_FLAG_5 /* reserved */
128 #define K_FLAG_6 /* reserved */
129 #define K_FLAG_7 /* reserved, bit 7 --> msb */
131 #endif /* __KRB_ARCHAEOLOGY_H__ */