--- cygnus/src/include/k5-int.h	Tue Jul  1 14:06:56 1997
+++ kerbnet-1.2/include/k5-int.h	Tue May 27 21:57:42 1997
@@ -48,219 +48,44 @@
 
 #include "osconf.h"
 
+#if (defined(__MWERKS__) || defined(applec) || defined(THINK_C)) && !defined(_MACINTOSH)
+#define _MACINTOSH
+#endif
+
+#if defined(_MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)) || defined(_MACINTOSH)
+#include "win-mac.h"
+#endif
+
+#ifndef KRB5_CALLCONV
+#define KRB5_CALLCONV
+#define KRB5_CALLCONV_C
+#define KRB5_DLLIMP
+#endif
+#ifndef FAR
+#define FAR
+#endif
+#ifndef NEAR
+#define NEAR
+#endif
+
 /*
  * Begin "k5-config.h"
  */
 #ifndef KRB5_CONFIG__
 #define KRB5_CONFIG__
 
-#ifdef _MSDOS
-/* 
- * Machine-type definitions: PC Clone 386 running Microloss Windows
- */
-
+#if (defined(_MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
 /* Kerberos Windows initialization file */
 #define KERBEROS_INI    "kerberos.ini"
 #define INI_FILES       "Files"
 #define INI_KRB_CCACHE  "krb5cc"       /* Location of the ccache */
 #define INI_KRB5_CONF   "krb5.ini"		/* Location of krb5.conf file */
+#endif /* _MSDOS || _WIN32 */
 
-#define BITS16
-#define SIZEOF_INT      2
-#define SIZEOF_SHORT    2
-#define SIZEOF_LONG     4
-#define MAXHOSTNAMELEN  512
-#define MAXPATHLEN      256            /* Also for Windows temp files */
-
-#define KRB5_USE_INET
-#define MSDOS_FILESYSTEM
-#define USE_STRING_H 
-#define HAVE_SRAND
-#define HAVE_ERRNO
-#define HAS_STRDUP
-#define NO_USERID
-#define NOFCHMOD
-#define NOCHMOD
-#define NO_PASSWORD
-#define WM_KERBEROS5_CHANGED "Kerberos5 Changed"
-
-#define HAS_ANSI_VOLATILE
-#define HAS_VOID_TYPE
-#define	KRB5_PROVIDE_PROTOTYPES
-#define HAVE_STDARG_H
-#define HAVE_SYS_TYPES_H
-
-/* This controls which encryption routines libcrypto will provide */
-#define PROVIDE_DES_CBC_MD5
-#define PROVIDE_DES_CBC_CRC
-#define PROVIDE_DES_CBC_RAW
-#define PROVIDE_DES_CBC_CKSUM
-#define PROVIDE_CRC32
-#define PROVIDE_RSA_MD4
-#define PROVIDE_RSA_MD5
-
-#ifndef _SIZE_T_DEFINED
-typedef unsigned int size_t;
-#define _SIZE_T_DEFINED
-#endif 
-
-#ifndef KRB5_SYSTYPES__
-#define KRB5_SYSTYPES__
-#include <sys/types.h>
-typedef unsigned long u_long;      /* Not part of sys/types.h on the pc */
-typedef unsigned int	u_int;
-typedef unsigned short	u_short;
-typedef unsigned char	u_char;
-#endif /* KRB5_SYSTYPES__ */
-
-#ifndef INTERFACE
-#define INTERFACE   __far __export __pascal
-#define INTERFACE_C __far __export __cdecl
-#endif
-
-/*
- * The following defines are needed to make <windows.h> work
- * in stdc mode (/Za flag). Winsock.h needs <windows.h>.
- */
-#define FAR     _far
-#define NEAR    _near
-#define _far    __far
-#define _near   __near
-#define _pascal __pascal
-#define _cdecl  __cdecl
-#define _huge   __huge
-
-#ifdef NEED_WINDOWS
-#include <windows.h>
-#endif
-
-#ifdef NEED_LOWLEVEL_IO
-/* Ugly. Microsoft, in stdc mode, doesn't support the low-level i/o
- * routines directly. Rather, they only export the _<function> version.
- * The following defines works around this problem. 
- */
-#include <sys\types.h>
-#include <sys\stat.h>
-#include <fcntl.h>
-#include <io.h>
-#include <process.h>
+#if !defined(_MSDOS) && !defined(_WIN32) && !defined(_MACINTOSH)
 #define THREEPARAMOPEN(x,y,z) open(x,y,z)
-#define O_RDONLY        _O_RDONLY
-#define O_WRONLY        _O_WRONLY
-#define O_RDWR          _O_RDWR
-#define O_APPEND        _O_APPEND
-#define O_CREAT         _O_CREAT
-#define O_TRUNC         _O_TRUNC
-#define O_EXCL          _O_EXCL
-#define O_TEXT          _O_TEXT
-#define O_BINARY        _O_BINARY
-#define O_NOINHERIT     _O_NOINHERIT
-#define stat            _stat
-#define unlink          _unlink
-#define lseek           _lseek
-#define write           _write
-#define open            _open
-#define close           _close
-#define read            _read
-#define fstat           _fstat
-#define mktemp          _mktemp
-#define dup             _dup
-
-#define getpid          _getpid
-#endif
-
-#ifdef NEED_SYSERROR
-/* Only needed by util/et/error_message.c but let's keep the source clean */
-#define sys_nerr        _sys_nerr
-#define sys_errlist     _sys_errlist
-#endif
-
-#define DEFAULT_PWD_STRING1 "Enter password:"
-#define DEFAULT_PWD_STRING2 "Re-enter password for verification:"
-
-/* Functions with slightly different names on the PC
-*/                   
-#define strcasecmp   _stricmp
-#define strncasecmp  _strnicmp
-#define strdup       _strdup
-#define off_t        _off_t
-int sscanf(const char *str, char const *fmt0, ...);
-
-#else 		/* Rest of include file is for non-Microloss-Windows */
-
-#ifndef _MACINTOSH
-#if defined(__MWERKS__) || defined(applec) || defined(THINK_C)
-#define _MACINTOSH
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define HAVE_SRAND
-#define NO_PASSWORD
-#define HAS_LABS
-#define ENOMEM -1
-#define ANSI_STDIO
-#ifndef _SIZET
-typedef unsigned int size_t;
-#define _SIZET
-#endif
-#include <unix.h>
-#include <ctype.h>
-#endif
-#endif
-
-#if defined(_MACINTOSH)
-
-#ifdef NEED_LOWLEVEL_IO
-#include <fcntl.h>
 #endif
 
-/*
- * Which encryption routines libcrypto will provide is controlled by
- * mac/libraries/KerberosHeaders.h.
- */
-
-/* there is no <stat.h> for mpw */
-typedef unsigned long	mode_t;
-typedef unsigned long	ino_t;
-typedef unsigned long	dev_t;
-typedef short			nlink_t;
-typedef unsigned long	uid_t;
-typedef unsigned long	gid_t;
-typedef long			off_t;
-
-#ifndef __MWERKS__
-struct stat
-{
-	mode_t		st_mode;		/* File mode; see #define's below */
-	ino_t		st_ino;			/* File serial number */
-	dev_t		st_dev;			/* ID of device containing this file */
-	nlink_t		st_nlink;		/* Number of links */
-	uid_t		st_uid;			/* User ID of the file's owner */
-	gid_t		st_gid;			/* Group ID of the file's group */
-	dev_t		st_rdev;		/* Device type */
-	off_t		st_size;		/* File size in bytes */
-	unsigned long		st_atime;		/* Time of last access */
-	unsigned long		st_mtime;		/* Time of last data modification */
-	unsigned long		st_ctime;		/* Time of last file status change */
-	long		st_blksize;		/* Optimal blocksize */
-	long		st_blocks;		/* blocks allocated for file */
-};
-
-int stat(const char *path, struct stat *buf);
-#endif
-
-int fstat(int fildes, struct stat *buf);
-
-#define EFBIG 1000
-
-#define NOFCHMOD 1
-#define NOCHMOD 1
-#define _MACSOCKAPI_
-
-#define THREEPARAMOPEN(x,y,z) open(x,y)
-#else /* _MACINTOSH */
-#define THREEPARAMOPEN(x,y,z) open(x,y,z)
-#endif /* _MACINTOSH */
-
 #ifndef KRB5_AUTOCONF__
 #define KRB5_AUTOCONF__
 #include "autoconf.h"
@@ -298,23 +123,16 @@
 #define	KRB5_KDB_MAX_RLIFE	(60*60*24*7) /* one week */
 #define	KRB5_KDB_EXPIRATION	2145830400 /* Thu Jan  1 00:00:00 2038 UTC */
 
-/* 
- * Windows requires a different api interface to each function. Here
- * just define it as NULL.
- */
-#define INTERFACE
-#define INTERFACE_C
-#define FAR
-#define NEAR
 #ifndef O_BINARY
+#ifndef __CYGWIN32__		/* isn't defined until fcntl.h gets included */
 #define O_BINARY 0
+#endif /* __CYGWIN32__ */
 #endif
 
 #ifndef HAS_LABS
 #define labs(x) abs(x)
 #endif
 
-#endif /* _MSDOS */
 #endif /* KRB5_CONFIG__ */
 
 /*
@@ -327,85 +145,7 @@
 #include "krb5.h"
 
 #ifdef NEED_SOCKETS
-/*
- * Begin "k5-sockets.h"
- */
-#ifdef _MSDOS
-
-#include <winsock.h>
-
-/* Some of our own infrastructure where the WinSock stuff was too hairy
-   to dump into a clean Unix program...  */
-
-#define SOCKET_INITIALIZE()     win_socket_initialize()
-#define SOCKET_CLEANUP()        WSACleanup()
-#define SOCKET_ERRNO            (WSAGetLastError())
-#define SOCKET_SET_ERRNO(x)     (WSASetLastError (x))
-#define SOCKET_NFDS(f)          (0)     /* select()'s first arg is ignored */
-#define SOCKET_READ(fd, b, l)   (recv(fd, b, l, 0))
-#define SOCKET_WRITE(fd, b, l)  (send(fd, b, l, 0))
-#define SOCKET_EINTR            WSAEINTR
-
-int win_socket_initialize();
-
-#else /* not _MSDOS */
-
-/* If this source file requires it, define struct sockaddr_in
-   (and possibly other things related to network I/O).  */
-
-#ifdef HAVE_MACSOCK_H		/* Sockets stuff differs on Mac */
-#include "macsock.h"		/* Macintosh sockets emulation library */
-
-/* Some of our own infrastructure where the WinSock stuff was too hairy
-   to dump into a clean Unix program...  */
-
-#define	SOCKET_INITIALIZE()	(WSAStartup(0x0101, (WSADATA *)0))
-#define	SOCKET_CLEANUP()	(WSACleanup())
-#define	SOCKET_ERRNO		(WSAGetLastError())
-#define	SOCKET_SET_ERRNO(x)	(WSASetLastError(x))
-#define	SOCKET_NFDS(f)		(0)	/* select()'s first arg is ignored */
-#define SOCKET_READ(fd, b, l)	(recv(fd, b, l, 0))
-#define SOCKET_WRITE(fd, b, l)	(send(fd, b, l, 0))
-#define SOCKET_EINTR		WSAEINTR
-
-#else  /* ! HAVE_MACSOCK_H */	/* Sockets stuff for Unix machines */
-
-#include <netinet/in.h>		/* For struct sockaddr_in and in_addr */
-#include <arpa/inet.h>		/* For inet_ntoa */
-#include <netdb.h>		/* For struct hostent, gethostbyname, etc */
-#include <sys/param.h>		/* For MAXHOSTNAMELEN */
-#include <sys/socket.h>		/* For SOCK_*, AF_*, etc */
-#include <sys/time.h>		/* For struct timeval */
-#include <net/if.h>		/* For struct ifconf, for localaddr.c */
-
-/*
- * Compatability with WinSock calls on MS-Windows...
- */
-#define	SOCKET		unsigned int
-#define	INVALID_SOCKET	((SOCKET)~0)
-#define	closesocket	close
-#define	ioctlsocket	ioctl
-#define	SOCKET_ERROR	(-1)
-
-/* Some of our own infrastructure where the WinSock stuff was too hairy
-   to dump into a clean Unix program...  */
-
-#define	SOCKET_INITIALIZE()	(0)	/* No error (or anything else) */
-#define	SOCKET_CLEANUP()	/* nothing */
-#define	SOCKET_ERRNO		errno
-#define	SOCKET_SET_ERRNO(x)	(errno = (x))
-#define SOCKET_NFDS(f)		((f)+1)	/* select() arg for a single fd */
-#define SOCKET_READ		read
-#define SOCKET_WRITE		write
-#define SOCKET_EINTR		EINTR
-
-#endif /* HAVE_MACSOCK_H */
-
-#endif /* _MSDOS */
-
-/*
- * End "k5-sockets.h"
- */
+#include "port-sockets.h"
 #endif
 
 /* krb5/krb5.h includes many other .h files in the krb5 subdirectory.
@@ -542,7 +282,12 @@
 #define PA_SAM_TYPE_SKEY_K0    3   /*  S/key where  KDC has key 0 */
 #define PA_SAM_TYPE_SKEY       4   /*  Traditional S/Key */
 #define PA_SAM_TYPE_SECURID    5   /*  Security Dynamics */
-#define PA_SAM_TYPE_GRAIL    128 /* experimental */
+#define PA_SAM_TYPE_ACTIVCARD_DEC  6   /*  ActivCard decimal mode */
+#define PA_SAM_TYPE_ACTIVCARD_HEX  7   /*  ActivCard hex mode */
+#define PA_SAM_TYPE_DIGI_PATH_HEX  8   /*  Digital Pathways hex mode */
+#define PA_SAM_TYPE_EXP_BASE    128 /* experimental */
+#define PA_SAM_TYPE_GRAIL		(PA_SAM_TYPE_EXP_BASE+0) /* testing */
+#define PA_SAM_TYPE_SECURID_PREDICT	(PA_SAM_TYPE_EXP_BASE+1) /* special */
 
 typedef struct _krb5_predicted_sam_response {
 	krb5_magic	magic;
@@ -591,39 +336,19 @@
 /*
  * Begin "dbm.h"
  */
-#if !defined(_MACINTOSH) && !defined(_MSDOS)
+#if !defined(_MACINTOSH) && !defined(_MSDOS) && (!defined(_WIN32) || (defined(_WIN32) && defined(__CYGWIN32__)))
+
+/*
+ * Since we are always using db, use the db-ndbm include header file.
+ */	
 
-#ifndef ODBM
-#include <ndbm.h>
-#else /* ODBM */
-#ifdef unicos61
-#include <rpcsvc/dbm.h>
+#ifndef USE_OCI_KDB
+#include "db-ndbm.h"
 #else
-#include <dbm.h>
+/* OCI (Oracle) compatibility functions */
+#include "kdb_oci_dbm.h"
 #endif
-#endif /*ODBM */
-
-#ifndef ODBM
-#define dbm_next(db,key) dbm_nextkey(db)
-#else /* OLD DBM */
-typedef char DBM;
-
-/* Macros to convert ndbm names to dbm names.
- * Note that dbm_nextkey() cannot be simply converted using a macro, since
- * it is invoked giving the database, and nextkey() needs the previous key.
- *
- * Instead, all routines call "dbm_next" instead.
- */
-
-#define dbm_open(file, flags, mode) ((dbminit(file) == 0)?"":((char *)0))
-#define dbm_fetch(db, key) fetch(key)
-#define dbm_store(db, key, content, flag) store(key, content)
-#define dbm_delete(db, key) delete(key)
-#define dbm_firstkey(db) firstkey()
-#define dbm_next(db,key) nextkey(key)
-#define dbm_close(db) dbmclose()
-#endif /* OLD DBM */
-
+	
 #endif /* !MSDOS && !MACINTOSH */
 /*
  * End "dbm.h"
@@ -638,7 +363,7 @@
 #ifdef HAS_STDLIB_H
 #include <stdlib.h>
 #else
-#if defined(__STDC__) || defined(_WINDOWS)
+#if defined(__STDC__) || defined(_MSDOS)
 #ifdef NO_STDLIB_H
 #include <fake-stdlib.h>
 #else
@@ -689,6 +414,11 @@
 #else
 #include <time.h>
 #endif
+#ifdef KRB5_GETTIMEOFDAY_TWOARGS
+#define krb5_gettimeofday(a,b) gettimeofday((a),(b))
+#else
+#define krb5_gettimeofday(a,b) gettimeofday(a)
+#endif
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>			/* struct stat, stat() */
@@ -741,7 +471,8 @@
 	KRB5_PROTOTYPE((krb5_context,
 		   const krb5_data *,
 		   const krb5_data *,
-		   krb5_data * ));
+		   krb5_data *,
+		   int *));
 krb5_error_code krb5_get_krbhst
 	KRB5_PROTOTYPE((krb5_context,
 		   const krb5_data *,
@@ -804,7 +535,11 @@
  * Include the KDB definitions.
  */
 #include "kdb.h"
+#ifdef USE_OCI_KDB
+#include "kdb_oci.h"
+#else
 #include "kdb_dbm.h"
+#endif
 
 /*
  * Begin "libos.h"
@@ -973,6 +708,39 @@
  * End "preauth.h"
  */
 
+typedef krb5_error_code (*krb5_gic_get_as_key_fct)
+    KRB5_NPROTOTYPE((krb5_context,
+		     krb5_principal,
+		     krb5_enctype,
+		     krb5_prompter_fct,
+		     void *prompter_data,
+		     krb5_data *salt,
+		     krb5_keyblock *as_key,
+		     void *gak_data));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+krb5_get_init_creds
+KRB5_PROTOTYPE((krb5_context context,
+		krb5_creds *creds,
+		krb5_principal client,
+		krb5_prompter_fct prompter,
+		void *prompter_data,
+		krb5_deltat start_time,
+		char *in_tkt_service,
+		krb5_get_init_creds_opt *options,
+		krb5_gic_get_as_key_fct gak,
+		void *gak_data,
+		int *master,
+		krb5_kdc_rep **as_reply));
+
+
+krb5_error_code krb5_do_preauth
+KRB5_PROTOTYPE((krb5_context, krb5_kdc_req *,
+		krb5_pa_data **, krb5_pa_data ***,
+		krb5_data *, krb5_keyblock *,
+		krb5_prompter_fct, void *,
+		krb5_gic_get_as_key_fct, void *));
+
 /* #include "krb5/wordsize.h" -- comes in through base-defs.h. */
 #include "profile.h"
 
@@ -990,6 +758,8 @@
 	void	      	FAR *ser_ctx;
 	krb5_deltat 	clockskew; /* allowable clock skew */
 	krb5_cksumtype	kdc_req_sumtype;
+	krb5_cksumtype	default_ap_req_sumtype;
+	krb5_cksumtype	default_safe_sumtype;
 	krb5_flags 	kdc_default_options;
 	krb5_flags	library_options;
 	krb5_boolean	profile_secure;
@@ -1191,15 +961,48 @@
 krb5_error_code encode_krb5_predicted_sam_response
 	KRB5_PROTOTYPE((const krb5_predicted_sam_response * , krb5_data **));
 
+krb5_error_code encode_krb5_sam_challenge
+       KRB5_PROTOTYPE((const krb5_sam_challenge * , krb5_data **));
+
+krb5_error_code encode_krb5_sam_key
+       KRB5_PROTOTYPE((const krb5_sam_key * , krb5_data **));
+
+krb5_error_code encode_krb5_enc_sam_response_enc
+       KRB5_PROTOTYPE((const krb5_enc_sam_response_enc * , krb5_data **));
+
+krb5_error_code encode_krb5_sam_response
+       KRB5_PROTOTYPE((const krb5_sam_response * , krb5_data **));
+
+krb5_error_code encode_krb5_predicted_sam_response
+       KRB5_PROTOTYPE((const krb5_predicted_sam_response * , krb5_data **));
+
 /*************************************************************************
  * End of prototypes for krb5_encode.c
  *************************************************************************/
 
+krb5_error_code decode_krb5_sam_challenge
+       KRB5_PROTOTYPE((const krb5_data *, krb5_sam_challenge **));
+
+krb5_error_code decode_krb5_sam_key
+       KRB5_PROTOTYPE((const krb5_data *, krb5_sam_key **));
+
+krb5_error_code decode_krb5_enc_sam_response_enc
+       KRB5_PROTOTYPE((const krb5_data *, krb5_enc_sam_response_enc **));
+
+krb5_error_code decode_krb5_sam_response
+       KRB5_PROTOTYPE((const krb5_data *, krb5_sam_response **));
+
+krb5_error_code decode_krb5_predicted_sam_response
+       KRB5_PROTOTYPE((const krb5_data *, krb5_predicted_sam_response **));
+
 
 /*************************************************************************
  * Prototypes for krb5_decode.c
  *************************************************************************/
 
+krb5_error_code krb5_validate_times
+       KRB5_PROTOTYPE((krb5_context, 
+		       krb5_ticket_times *));
 /*
    krb5_error_code decode_krb5_structure(const krb5_data *code,
                                          krb5_structure **rep);
@@ -1214,7 +1017,8 @@
 krb5_error_code decode_krb5_authenticator
 	KRB5_PROTOTYPE((const krb5_data *code, krb5_authenticator **rep));
 
-krb5_error_code decode_krb5_ticket
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+ decode_krb5_ticket
 	KRB5_PROTOTYPE((const krb5_data *code, krb5_ticket **rep));
 
 krb5_error_code decode_krb5_encryption_key
@@ -1421,4 +1225,20 @@
 						      size_t,
 						      krb5_octet **,
 						      size_t *));
+/* some cygwin32 stuff */
+#ifdef __CYGWIN32__
+#define MSDOS_FILESYSTEM
+#endif /* __CYGWIN32__ */
+
+/*
+ * Convenience function for structure magic number
+ */
+#define KRB5_VERIFY_MAGIC(structure,magic_number) \
+    if ((structure)->magic != (magic_number)) return (magic_number);
+
+int krb5_seteuid  KRB5_PROTOTYPE((int));
+
+int krb5_setenv  KRB5_PROTOTYPE((const char *, const char *, int));
+
+void krb5_unsetenv  KRB5_PROTOTYPE((const char *));
 #endif /* _KRB5_INT_H */
