diff options
Diffstat (limited to 'lib/Zinternal.c')
-rw-r--r-- | lib/Zinternal.c | 150 |
1 files changed, 56 insertions, 94 deletions
diff --git a/lib/Zinternal.c b/lib/Zinternal.c index 7cd24cc..019bafd 100644 --- a/lib/Zinternal.c +++ b/lib/Zinternal.c @@ -13,30 +13,16 @@ */ /* $Header$ */ -#ifndef lint -static char rcsid_Zinternal_c[] = - "$Id$"; -static char copyright[] = - "Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology."; -#endif - -#include <zephyr/zephyr_internal.h> -#include <netdb.h> +#include <internal.h> #include <arpa/inet.h> -#include <sys/param.h> #include <sys/socket.h> -#include <sys/ioctl.h> #include <utmp.h> -#include <krb.h> -#ifdef SOLARIS -#include <sys/filio.h> -#endif - -#ifdef __STDC__ -typedef void *pointer; -#else -typedef char *pointer; +#ifndef lint +static const char rcsid_Zinternal_c[] = + "$Id$"; +static const char copyright[] = + "Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology."; #endif extern char *inet_ntoa (); @@ -60,17 +46,21 @@ ZSubscription_t *__subscriptions_list; int __subscriptions_num; int __subscriptions_next; -#ifdef Z_HaveKerberos +#ifdef ZEPHYR_USES_KERBEROS C_Block __Zephyr_session; char __Zephyr_realm[REALM_SZ]; #endif #ifdef Z_DEBUG -void (*__Z_debug_print) Zproto((const char *fmt, va_list args, void *closure)); +void (*__Z_debug_print) __P((const char *fmt, va_list args, void *closure)); +void *__Z_debug_print_closure; #endif #define min(a,b) ((a)<(b)?(a):(b)) +static int Z_AddField __P((char **ptr, char *field, char *end)); +static int find_or_insert_uid __P((ZUnique_Id_t *uid, ZNotice_Kind_t kind)); + /* Find or insert uid in the old uids buffer. The buffer is a sorted * circular queue. We make the assumption that most packets arrive in * order, so we can usually search for a uid or insert it into the buffer @@ -177,12 +167,13 @@ Code_t Z_GetMyAddr() int Z_PacketWaiting() { - int bytes; - - if (ioctl(ZGetFD(), FIONREAD, (char *)&bytes) < 0) - return (0); + struct timeval tv; + fd_set read; - return (bytes > 0); + tv.tv_sec = tv.tv_usec = 0; + FD_ZERO(&read); + FD_SET(ZGetFD(), &read); + return (select(ZGetFD() + 1, &read, NULL, NULL, &tv)); } @@ -266,7 +257,6 @@ Code_t Z_ReadWait() int from_len, packet_len, part, partof; char *slash; Code_t retval; - static int filter_idx = -1; register int i; if (ZGetFD() < 0) @@ -288,7 +278,7 @@ Code_t Z_ReadWait() if (packet[i]) goto not_all_null; #ifdef Z_DEBUG - Z_debug ("got null packet from %s", inet_ntoa (from.sin_addr.s_addr)); + Z_debug ("got null packet from %s", inet_ntoa (from.sin_addr)); #endif return ZERR_NONE; not_all_null: @@ -613,7 +603,7 @@ Code_t Z_FormatHeader(notice, buffer, buffer_len, len, cert_routine) char *buffer; int buffer_len; int *len; - int (*cert_routine)(); + Z_AuthProc cert_routine; { Code_t retval; static char version[BUFSIZ]; /* default init should be all \0 */ @@ -661,7 +651,7 @@ Code_t Z_FormatAuthHeader(notice, buffer, buffer_len, len, cert_routine) char *buffer; int buffer_len; int *len; - int (*cert_routine)(); + Z_AuthProc cert_routine; { if (!cert_routine) { notice->z_auth = 0; @@ -682,10 +672,6 @@ Code_t Z_FormatRawHeader(notice, buffer, buffer_len, len, cstart, cend) int *len; char **cstart, **cend; { - union { - int i; - ZChecksum_t sum; - } temp; char newrecip[BUFSIZ]; char *ptr, *end; int i; @@ -714,36 +700,29 @@ Code_t Z_FormatRawHeader(notice, buffer, buffer_len, len, cstart, cend) (void) strcpy(ptr, notice->z_version); ptr += strlen(ptr)+1; - temp.i = htonl((u_long) (ZNUMFIELDS+notice->z_num_other_fields)); - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&temp.i, - sizeof(temp.i)) == ZERR_FIELDLEN) + if (ZMakeAscii32(ptr, end-ptr, Z_NUMFIELDS + notice->z_num_other_fields) + == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; - - temp.i = htonl((u_long) notice->z_kind); - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&temp.i, - sizeof(temp.i)) == ZERR_FIELDLEN) + + if (ZMakeAscii32(ptr, end-ptr, notice->z_kind) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; - + if (ZMakeAscii(ptr, end-ptr, (unsigned char *)¬ice->z_uid, sizeof(ZUnique_Id_t)) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; - - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)¬ice->z_port, - sizeof(u_short)) == ZERR_FIELDLEN) + + if (ZMakeAscii16(ptr, end-ptr, ntohs(notice->z_port)) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)¬ice->z_auth, - sizeof(int)) == ZERR_FIELDLEN) + if (ZMakeAscii32(ptr, end-ptr, notice->z_auth) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; - temp.i = htonl((u_long) notice->z_authent_len); - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&temp.i, - sizeof(temp.i)) == ZERR_FIELDLEN) + if (ZMakeAscii32(ptr, end-ptr, notice->z_authent_len) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; @@ -762,8 +741,7 @@ Code_t Z_FormatRawHeader(notice, buffer, buffer_len, len, cstart, cend) return (ZERR_HEADERLEN); } else { - (void) sprintf(newrecip, "%s@%s", notice->z_recipient, - __Zephyr_realm); + (void) sprintf(newrecip, "%s@%s", notice->z_recipient, __Zephyr_realm); if (Z_AddField(&ptr, newrecip, end)) return (ZERR_HEADERLEN); } @@ -773,9 +751,7 @@ Code_t Z_FormatRawHeader(notice, buffer, buffer_len, len, cstart, cend) /* copy back the end pointer location for crypto checksum */ if (cstart) *cstart = ptr; - temp.sum = htonl(notice->z_checksum); - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&temp.sum, - sizeof(temp.sum)) == ZERR_FIELDLEN) + if (ZMakeAscii32(ptr, end-ptr, notice->z_checksum) == ZERR_FIELDLEN) return (ZERR_HEADERLEN); ptr += strlen(ptr)+1; if (cend) @@ -793,19 +769,12 @@ Code_t Z_FormatRawHeader(notice, buffer, buffer_len, len, cstart, cend) if (Z_AddField(&ptr, notice->z_other_fields[i], end)) return (ZERR_HEADERLEN); -#ifdef notdef - temp = htonl(notice->z_checksum); - if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&temp, - sizeof(ZChecksum_t)) == ZERR_FIELDLEN) - return (ZERR_HEADERLEN); - ptr += strlen(ptr)+1; -#endif - *len = ptr-buffer; return (ZERR_NONE); } +static int Z_AddField(ptr, field, end) char **ptr, *field, *end; { @@ -904,8 +873,8 @@ void Z_RemQueue(qptr) Code_t Z_SendFragmentedNotice(notice, len, cert_func, send_func) ZNotice_t *notice; int len; - Code_t (*cert_func)(); - Code_t (*send_func)(); + Z_AuthProc cert_func; + Z_SendProc send_func; { ZNotice_t partnotice; ZPacket_t buffer; @@ -970,56 +939,50 @@ int wait; #ifdef Z_DEBUG /* For debugging printing */ -Zconst char *Zconst ZNoticeKinds[] = { "UNSAFE", "UNACKED", "ACKED", "HMACK", - "HMCTL", "SERVACK", "SERVNAK", - "CLIENTACK", "STAT"}; +const char *const ZNoticeKinds[] = { + "UNSAFE", "UNACKED", "ACKED", "HMACK", "HMCTL", "SERVACK", "SERVNAK", + "CLIENTACK", "STAT" +}; #endif #ifdef Z_DEBUG #undef Z_debug -#ifdef Z_varargs -void Z_debug (va_alist) va_dcl +#ifdef HAVE_STDARG_H +void Z_debug (const char *format, ...) { va_list pvar; - char *format; if (!__Z_debug_print) return; - va_start (pvar); - format = va_arg (pvar, char *); + va_start (pvar, format); (*__Z_debug_print) (format, pvar, __Z_debug_print_closure); va_end (pvar); } #else /* stdarg */ -void Z_debug (const char *format, ...) +void Z_debug (va_alist) va_dcl { va_list pvar; + char *format; if (!__Z_debug_print) return; - va_start (pvar, format); + va_start (pvar); + format = va_arg (pvar, char *); (*__Z_debug_print) (format, pvar, __Z_debug_print_closure); va_end (pvar); } #endif void Z_debug_stderr (format, args, closure) -#ifdef __STDC__ - const -#endif - char *format; + const char *format; va_list args; -#ifdef __STDC__ void *closure; -#else - char *closure; -#endif { -#ifndef NO_VPRINTF - vfprintf (stderr, format, args); +#ifdef HAVE_VPRINTF + vfprintf (stderr, format, args); #else - _doprnt (format, args, stderr); + _doprnt (format, args, stderr); #endif - putc ('\n', stderr); + putc ('\n', stderr); } #undef ZGetFD @@ -1034,14 +997,13 @@ struct sockaddr_in ZGetDestAddr () { return __HM_addr; } #undef ZGetRealm Zconst char * ZGetRealm () { return __Zephyr_realm; } -#ifdef __STDC__ -#define ARGS (void (*proc)(const char *,va_list,void *), void *arg) -#else -#define ARGS (proc, arg) void (*proc)(); char *arg; -#endif #undef ZSetDebug -void ZSetDebug ARGS { +void ZSetDebug(proc, arg) + void (*proc) __P((const char *, va_list, void *)); + char *arg; +{ __Z_debug_print = proc; __Z_debug_print_closure = arg; } #endif /* Z_DEBUG */ + |