]> asedeno.scripts.mit.edu Git - 1ts-debian.git/blob - zephyr/h/internal.h
import zephyr 3.0~rc2544
[1ts-debian.git] / zephyr / h / internal.h
1
2 #ifndef __INTERNAL_H__
3 #define __INTERNAL_H__
4
5 #include <sysdep.h>
6 #include <zephyr/zephyr.h>
7 #include <netdb.h>
8
9 #ifdef HAVE_KRB4
10 #include <krb.h>
11 #include <krb_err.h>
12 #endif
13
14 #ifdef HAVE_KRB5
15 #include <krb5.h>
16 #endif
17
18 #ifdef HAVE_HESIOD
19 #include <hesiod.h>
20 #endif
21
22 #ifndef HAVE_KRB4
23 #define CLOCK_SKEW      300             /* max time to cache packet ids */
24 #endif
25
26 #ifndef REALM_SZ  /* XXX */
27 #include <arpa/nameser.h>
28 #ifdef HAVE_ARPA_NAMESER_COMPAT_H
29 #include <arpa/nameser_compat.h>
30 #endif
31 #define REALM_SZ        NS_MAXDNAME
32 #endif
33 #define MAX_PRINCIPAL_SIZE      1024
34
35 #define SERVER_SVC_FALLBACK     htons((unsigned short) 2103)
36 #define HM_SVC_FALLBACK         htons((unsigned short) 2104)
37 #define HM_SRV_SVC_FALLBACK     htons((unsigned short) 2105)
38
39 #define ZAUTH_UNSET             (-3) /* Internal to client library. */
40 #define Z_MAXFRAGS              500     /* Max number of packet fragments */
41 #define Z_MAXNOTICESIZE         400000  /* Max size of incoming notice */
42 #define Z_MAXQUEUESIZE          1500000 /* Max size of input queue notices */
43 #define Z_FRAGFUDGE             13      /* Room to for multinotice field */
44 #define Z_NOTICETIMELIMIT       30      /* Time to wait for fragments */
45 #define Z_INITFILTERSIZE        30      /* Starting size of uid filter */
46
47 #define Z_AUTHMODE_NONE          0      /* no authentication */
48 #define Z_AUTHMODE_KRB4          1      /* authenticate using Kerberos V4 */
49 #define Z_AUTHMODE_KRB5          2      /* authenticate using Kerberos V5 */
50
51 #define Z_KEYUSAGE_CLT_CKSUM  1027    /* client->server notice checksum */
52 #define Z_KEYUSAGE_SRV_CKSUM  1029    /* server->client notice checksum */
53
54 struct _Z_Hole {
55     struct _Z_Hole      *next;
56     int                 first;
57     int                 last;
58 };
59
60 struct _Z_InputQ {
61     struct _Z_InputQ    *next;
62     struct _Z_InputQ    *prev;
63     ZNotice_Kind_t      kind;
64     unsigned ZEPHYR_INT32 timep;
65     int                 packet_len;
66     char                *packet;
67     int                 complete;
68     struct sockaddr_in  from;
69     struct _Z_Hole      *holelist;
70     ZUnique_Id_t        uid;
71     int                 auth;
72     int                 header_len;
73     char                *header;
74     int                 msg_len;
75     char                *msg;
76 };
77
78 extern struct _Z_InputQ *__Q_Head, *__Q_Tail;
79
80 extern int __Zephyr_open;       /* 0 if FD opened, 1 otherwise */
81 extern int __HM_set;            /* 0 if dest addr set, 1 otherwise */
82 extern int __Zephyr_server;     /* 0 if normal client, 1 if server or zhm */
83
84 #ifdef HAVE_KRB5
85 extern krb5_context Z_krb5_ctx;
86 Code_t Z_krb5_lookup_cksumtype(krb5_enctype, krb5_cksumtype *);
87 #endif
88
89 extern ZLocations_t *__locate_list;
90 extern int __locate_num;
91 extern int __locate_next;
92
93 extern ZSubscription_t *__subscriptions_list;
94 extern int __subscriptions_num;
95 extern int __subscriptions_next;
96
97 extern int __Zephyr_port;               /* Port number */
98 extern struct in_addr __My_addr;
99 extern int __Zephyr_fd;
100 extern int __Q_CompleteLength;
101 extern struct sockaddr_in __HM_addr;
102 extern char __Zephyr_realm[];
103
104 typedef Code_t (*Z_SendProc) (ZNotice_t *, char *, int, int);
105
106 struct _Z_InputQ *Z_GetFirstComplete (void);
107 struct _Z_InputQ *Z_GetNextComplete (struct _Z_InputQ *);
108 Code_t Z_XmitFragment (ZNotice_t*, char *,int,int);
109 void Z_RemQueue (struct _Z_InputQ *);
110 Code_t Z_AddNoticeToEntry (struct _Z_InputQ*, ZNotice_t*, int);
111 Code_t Z_FormatAuthHeader (ZNotice_t *, char *, int, int *, Z_AuthProc);
112 Code_t Z_FormatHeader (ZNotice_t *, char *, int, int *, Z_AuthProc);
113 Code_t Z_FormatRawHeader (ZNotice_t *, char*, int,
114                               int*, char **, char **);
115 Code_t Z_ReadEnqueue (void);
116 Code_t Z_ReadWait (void);
117 Code_t Z_SendLocation (char*, char*, Z_AuthProc, char*);
118 Code_t Z_SendFragmentedNotice (ZNotice_t *notice, int len,
119                                    Z_AuthProc cert_func,
120                                    Z_SendProc send_func);
121 Code_t Z_WaitForComplete (void);
122 Code_t Z_WaitForNotice (ZNotice_t *notice,
123                         int (*pred)(ZNotice_t *, void *), void *arg,
124                         int timeout);
125
126
127 Code_t Z_NewFormatHeader (ZNotice_t *, char *, int, int *, Z_AuthProc);
128 Code_t Z_NewFormatAuthHeader (ZNotice_t *, char *, int, int *, Z_AuthProc);
129 Code_t Z_NewFormatRawHeader (ZNotice_t *, char *, int, int *, char **,
130                                  int *, char **, char **);
131 Code_t Z_AsciiFormatRawHeader (ZNotice_t *, char *, int, int *, char **,
132                                  int *, char **, char **);
133
134 void Z_gettimeofday(struct _ZTimeval *ztv, struct timezone *tz);
135
136 #ifdef HAVE_KRB5
137 int ZGetCreds(krb5_creds **creds_out);
138 int ZGetCredsRealm(krb5_creds **creds_out, char *realm);
139 Code_t Z_Checksum(krb5_data *cksumbuf, krb5_keyblock *keyblock,
140                   krb5_cksumtype cksumtype, krb5_keyusage cksumusage,
141                   char **asn1_data, unsigned int *asn1_len);
142 Code_t Z_ExtractEncCksum(krb5_keyblock *keyblock, krb5_enctype *enctype,
143                          krb5_cksumtype *cksumtype);
144 int Z_krb5_verify_cksum(krb5_keyblock *keyblock, krb5_data *cksumbuf,
145                         krb5_cksumtype cksumtype, krb5_keyusage cksumusage,
146                         unsigned char *asn1_data, int asn1_len);
147 Code_t Z_InsertZcodeChecksum(krb5_keyblock *keyblock, ZNotice_t *notice,
148                              char *buffer,
149                              char *cksum_start, int cksum_len,
150                              char *cstart, char *cend, int buffer_len,
151                              int *length_ajdust, int from_server);
152 unsigned long z_quad_cksum(const unsigned char *, uint32_t *, long,
153                            int, unsigned char *);
154 Code_t ZFormatAuthenticNoticeV5(ZNotice_t*, char*, int, int*, krb5_keyblock *);
155 #endif
156
157 #ifdef HAVE_KRB5_CREDS_KEYBLOCK_ENCTYPE
158 #define Z_keydata(keyblock)     ((keyblock)->contents)
159 #define Z_keylen(keyblock)      ((keyblock)->length)
160 #define Z_credskey(creds)       (&(creds)->keyblock)
161 #define Z_enctype(keyblock)     ((keyblock)->enctype)
162 #else
163 #define Z_keydata(keyblock)     ((keyblock)->keyvalue.data)
164 #define Z_keylen(keyblock)      ((keyblock)->keyvalue.length)
165 #define Z_credskey(creds)       (&(creds)->session)
166 #define Z_enctype(keyblock)     ((keyblock)->keytype)
167 #endif
168
169 #ifdef HAVE_KRB5_TICKET_ENC_PART2
170 #define Z_tktprincp(tkt)        ((tkt)->enc_part2 != 0)
171 #define Z_tktprinc(tkt)         ((tkt)->enc_part2->client)
172 #else
173 #define Z_tktprincp(tkt)        ((tkt)->client != 0)
174 #define Z_tktprinc(tkt)         ((tkt)->client)
175 #endif
176
177 #endif /* __INTERNAL_H__ */