#ifndef __INTERNAL_H__ #define __INTERNAL_H__ #include #include #include #ifdef HAVE_KRB4 #include #include #endif #ifdef HAVE_KRB5 #include #endif #ifdef HAVE_HESIOD #include #endif #ifndef HAVE_KRB4 #define REALM_SZ MAXHOSTNAMELEN #define INST_SZ 0 /* no instances w/o Kerberos */ #define ANAME_SZ 9 /* size of a username + null */ #define CLOCK_SKEW 300 /* max time to cache packet ids */ #endif #define SERVER_SVC_FALLBACK htons((unsigned short) 2103) #define HM_SVC_FALLBACK htons((unsigned short) 2104) #define HM_SRV_SVC_FALLBACK htons((unsigned short) 2105) #define ZAUTH_UNSET (-3) /* Internal to client library. */ #define Z_MAXFRAGS 500 /* Max number of packet fragments */ #define Z_MAXNOTICESIZE 400000 /* Max size of incoming notice */ #define Z_MAXQUEUESIZE 1500000 /* Max size of input queue notices */ #define Z_FRAGFUDGE 13 /* Room to for multinotice field */ #define Z_NOTICETIMELIMIT 30 /* Time to wait for fragments */ #define Z_INITFILTERSIZE 30 /* Starting size of uid filter */ #define Z_AUTHMODE_NONE 0 /* no authentication */ #define Z_AUTHMODE_KRB4 1 /* authenticate using Kerberos V4 */ #define Z_AUTHMODE_KRB5 2 /* authenticate using Kerberos V5 */ #define Z_KEYUSAGE_CLT_CKSUM 1027 /* client->server notice checksum */ #define Z_KEYUSAGE_SRV_CKSUM 1029 /* server->client notice checksum */ struct _Z_Hole { struct _Z_Hole *next; int first; int last; }; struct _Z_InputQ { struct _Z_InputQ *next; struct _Z_InputQ *prev; ZNotice_Kind_t kind; unsigned ZEPHYR_INT32 timep; int packet_len; char *packet; int complete; struct sockaddr_in from; struct _Z_Hole *holelist; ZUnique_Id_t uid; int auth; int header_len; char *header; int msg_len; char *msg; }; extern struct _Z_InputQ *__Q_Head, *__Q_Tail; extern int __Zephyr_open; /* 0 if FD opened, 1 otherwise */ extern int __HM_set; /* 0 if dest addr set, 1 otherwise */ extern int __Zephyr_server; /* 0 if normal client, 1 if server or zhm */ #ifdef HAVE_KRB5 extern krb5_context Z_krb5_ctx; Code_t Z_krb5_lookup_cksumtype(krb5_enctype, krb5_cksumtype *); #endif extern ZLocations_t *__locate_list; extern int __locate_num; extern int __locate_next; extern ZSubscription_t *__subscriptions_list; extern int __subscriptions_num; extern int __subscriptions_next; extern int __Zephyr_port; /* Port number */ extern struct in_addr __My_addr; typedef Code_t (*Z_SendProc) __P((ZNotice_t *, char *, int, int)); struct _Z_InputQ *Z_GetFirstComplete __P((void)); struct _Z_InputQ *Z_GetNextComplete __P((struct _Z_InputQ *)); Code_t Z_XmitFragment __P((ZNotice_t*, char *,int,int)); void Z_RemQueue __P((struct _Z_InputQ *)); Code_t Z_AddNoticeToEntry __P((struct _Z_InputQ*, ZNotice_t*, int)); Code_t Z_FormatAuthHeader __P((ZNotice_t *, char *, int, int *, Z_AuthProc)); Code_t Z_FormatHeader __P((ZNotice_t *, char *, int, int *, Z_AuthProc)); Code_t Z_FormatRawHeader __P((ZNotice_t *, char*, int, int*, char **, char **)); Code_t Z_ReadEnqueue __P((void)); Code_t Z_ReadWait __P((void)); Code_t Z_SendLocation __P((char*, char*, Z_AuthProc, char*)); Code_t Z_SendFragmentedNotice __P((ZNotice_t *notice, int len, Z_AuthProc cert_func, Z_SendProc send_func)); Code_t Z_WaitForComplete __P((void)); Code_t Z_WaitForNotice __P((ZNotice_t *notice, int (*pred) __P((ZNotice_t *, void *)), void *arg, int timeout)); Code_t Z_NewFormatHeader __P((ZNotice_t *, char *, int, int *, Z_AuthProc)); Code_t Z_NewFormatAuthHeader __P((ZNotice_t *, char *, int, int *, Z_AuthProc)); Code_t Z_NewFormatRawHeader __P((ZNotice_t *, char *, int, int *, char **, int *, char **, char **)); Code_t Z_AsciiFormatRawHeader __P((ZNotice_t *, char *, int, int *, char **, int *, char **, char **)); void Z_gettimeofday(struct _ZTimeval *ztv, struct timezone *tz); #ifdef HAVE_KRB5 int ZGetCreds(krb5_creds **creds_out); int ZGetCredsRealm(krb5_creds **creds_out, char *realm); Code_t Z_Checksum(krb5_data *cksumbuf, krb5_keyblock *keyblock, krb5_cksumtype cksumtype, char **asn1_data, int *asn1_len); Code_t Z_ExtractEncCksum(krb5_keyblock *keyblock, krb5_enctype *enctype, krb5_cksumtype *cksumtype); int Z_krb5_verify_cksum(krb5_keyblock *keyblock, krb5_data *cksumbuf, krb5_cksumtype cksumtype, char *asn1_data, int asn1_len); Code_t Z_InsertZcodeChecksum(krb5_keyblock *keyblock, ZNotice_t *notice, char *buffer, char *cksum_start, int cksum_len, char *cstart, char *cend, int buffer_len, int *length_ajdust); #endif #ifdef HAVE_KRB5_CREDS_KEYBLOCK_ENCTYPE #define Z_keydata(keyblock) ((keyblock)->contents) #define Z_keylen(keyblock) ((keyblock)->length) #define Z_credskey(creds) (&(creds)->keyblock) #define Z_enctype(keyblock) ((keyblock)->enctype) #else #define Z_keydata(keyblock) ((keyblock)->keyvalue.data) #define Z_keylen(keyblock) ((keyblock)->keyvalue.length) #define Z_credskey(creds) (&(creds)->session) #define Z_enctype(keyblock) ((keyblock)->keytype) #endif #ifdef HAVE_KRB5_TICKET_ENC_PART2 #define Z_tktprincp(tkt) ((tkt)->enc_part2 != 0) #define Z_tktprinc(tkt) ((tkt)->enc_part2->client) #else #define Z_tktprincp(tkt) ((tkt)->client != 0) #define Z_tktprinc(tkt) ((tkt)->client) #endif #endif /* __INTERNAL_H__ */