Windows/NT integration
authorRichard Basch <probe@mit.edu>
Thu, 6 Feb 1997 02:19:29 +0000 (02:19 +0000)
committerRichard Basch <probe@mit.edu>
Thu, 6 Feb 1997 02:19:29 +0000 (02:19 +0000)
krb5.hin k5-int.h: Functionalized the crypto layer and made the crypto
structures private

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9785 dc483132-0cff-0310-8789-dd5450dbe970

src/include/ChangeLog
src/include/Makefile.in
src/include/k5-int.h
src/include/krb5.hin
src/include/port-sockets.h
src/include/win-mac.h [new file with mode: 0644]

index 8ff29d5b0847be6b1b4de684453cdebc6bfcfd74..7a64966bc6cb2035ebebece2be123d7e6a3b60c7 100644 (file)
@@ -1,7 +1,41 @@
-Sat Nov 23 00:16:46 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>
+Tue Feb  4 15:57:18 1997  Richard Basch  <basch@lehman.com>
 
-       * k5-int.h: Remove DES3 and SHA support, since what's there isn't
-               fully correct.  [PR#231]
+       * krb5.hin: Do not bother to define INTERFACE or INTERFACE_C
+
+Sun Feb  2 20:58:40 1997  Richard Basch  <basch@lehman.com>
+
+       * k5-int.h:
+               All pointers to KRB5_DLLIMP functions must be declared FAR.
+
+Fri Jan 31 23:10:09 1997  Richard Basch  <basch@lehman.com>
+
+       * krb5.hin:
+               Fixed improper declaration of krb5_eblock_enctype;
+               it returns a krb5_enctype, not a krb5_error_code.
+
+Thu Jan 30 21:22:28 1997  Richard Basch  <basch@lehman.com>
+
+       * krb5.hin
+               Functionalized remaining cryptosystem entrypoints
+               Made the cryptosystem structures private
+       * k5-int.h
+               Made the cryptosystem structures private
+       * win-mac.h
+               Win32 - compile with /MD to link with the runtime C library
+       * Makefile.in
+               Remove profile.h in clean-windows
+
+Thu Nov 21 11:55:16 EST 1996    Richard Basch   <basch@lehman.com>
+
+        * Makefile.in: win32 build
+       * krb5.hin: Moved windows/mac stuff to win-mac.h
+               Really, we should have krb5_os.h and utilize that file
+                 even when we don't include krb5.h, such as with the building
+                 of the crypto or util libs.
+               Declared various functions as DLL exports (win16/win32)
+               Major whitespace adjustment for consistency...
+       * k5-int.h: Re-structured accordingly to accomodate win-mac.h
+       * win-mac.h: New file containing the Windows/Mac definitions
 
 Wed Nov 13 14:28:08 1996  Tom Yu  <tlyu@mit.edu>
 
index 9f9ba9d445c889aee438f82ed486ec2c144c9f94..f9bbbb45f431e90faa1b1efa3b15d4557d9421b8 100644 (file)
@@ -59,14 +59,14 @@ clean-unix::
 clean-mac::
 
 clean-windows::
-       $(RM) com_err.h
-       $(RM) gssapi\gssapi.h gssapi\gssapi_generic.h
+       $(RM) com_err.h profile.h
+       $(RM) gssapi\gssapi.h gssapi\gssapi_generic.h gssapi\gssapi_krb5.h
        if exist gssapi\nul rmdir gssapi
        cd krb5
        @echo Making clean in include\krb5
        -$(MAKE) -$(MFLAGS) clean
        cd ..
-       @echo Making clean locally
+       @echo Making clean in include
 
 install:: krb5.h
        $(INSTALL_DATA) $(C)krb5.h $(DESTDIR)$(KRB5_INCDIR)$(S)krb5.h
index 02cb5c22ffc4f80f856fc6bc874fc0f7a2bf3274..ca81ecd3ff08aaa561efb7dd4ce7ccae20d45034 100644 (file)
 #ifndef KRB5_CONFIG__
 #define KRB5_CONFIG__
 
-#if (defined(_MSDOS) || defined(_WIN32))
 /* 
  * Machine-type definitions: PC Clone 386 running Microloss Windows
  */
 
-#if defined(_MSDOS)
-       /* Windows 16 specific */
-#define BITS16
-#define SIZEOF_INT      2
-#define SIZEOF_SHORT    2
-#define SIZEOF_LONG     4
-
-#ifndef KRB5_CALLCONV
-#define KRB5_CALLCONV __far __export __pascal
-#define KRB5_CALLCONV_C __far __export __cdecl
-#define KRB5_DLLIMP
-#define INTERFACE   KRB5_CALLCONV
-#define INTERFACE_C KRB5_CALLCONV_C
-#endif /* !KRB5_CALLCONV */
-
-/*
- * 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>
+#if defined(_MSDOS) || defined(_WIN32) || defined(_MACINTOSH)
+#include "win-mac.h"
 #endif
-       
-#else 
-       /* Windows 32 specific */
-#define SIZEOF_INT      4
-#define SIZEOF_SHORT    2
-#define SIZEOF_LONG     4
 
-#ifndef KRB5_CALLCONV
-#ifdef KRB5_DLL_FILE
-#define KRB5_DECLSPEC dllexport
-#else
-#define KRB5_DECLSPEC dllimport
-#endif
-#define KRB5_DLLIMP __declspec(KRB5_DECLSPEC)
-#define KRB5_CALLCONV __stdcall
-#define KRB5_CALLCONV_C __cdecl
-#define INTERFACE   KRB5_DLLIMP KRB5_CALLCONV
-#define INTERFACE_C KRB5_DLLIMP KRB5_CALLCONV_C
-#endif /* !KRB5_CALLCONV */
-
-#include <windows.h>
-#endif
-       
+#if defined(_MSDOS) || defined(_WIN32)
 /* 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 */
-
-#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
-#define HAS_STDLIB_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_DES3_CBC_SHA */
-/* #define PROVIDE_DES3_CBC_RAW */
-#define PROVIDE_CRC32
-#define PROVIDE_RSA_MD4
-#define PROVIDE_RSA_MD5
-/* #define PROVIDE_NIST_SHA */
-
-#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__ */
-
-
-#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>
-#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
+#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 */
+#define HAS_LABS
 #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)
@@ -240,59 +91,6 @@ typedef unsigned int size_t;
 #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__
@@ -339,8 +137,6 @@ typedef unsigned char       u_char;
 #define KRB5_CALLCONV
 #define KRB5_CALLCONV_C
 #define KRB5_DLLIMP
-#define INTERFACE
-#define INTERFACE_C
 #define FAR
 #define NEAR
 #endif
@@ -352,7 +148,6 @@ typedef unsigned char       u_char;
 #define labs(x) abs(x)
 #endif
 
-#endif /* _MSDOS */
 #endif /* KRB5_CONFIG__ */
 
 /*
@@ -657,47 +452,44 @@ extern char *strdup KRB5_PROTOTYPE((const char *));
 /* libos.spec */
 krb5_error_code krb5_lock_file
        KRB5_PROTOTYPE((krb5_context,
-                       int,
-                       int));
+               int,
+               int));
 krb5_error_code krb5_unlock_file
        KRB5_PROTOTYPE((krb5_context,
-                       int));
+               int));
 int krb5_net_read
        KRB5_PROTOTYPE((krb5_context,
-                  int ,
-                  char *,
-                  int  ));
+               int ,
+               char *,
+               int  ));
 int krb5_net_write
        KRB5_PROTOTYPE((krb5_context,
-                  int ,
-                  const char *,
-                  int  ));
+               int ,
+               const char *,
+               int  ));
 krb5_error_code krb5_sendto_kdc
        KRB5_PROTOTYPE((krb5_context,
-                  const krb5_data *,
-                  const krb5_data *,
-                  krb5_data * ));
+               const krb5_data *,
+               const krb5_data *,
+               krb5_data * ));
 krb5_error_code krb5_get_krbhst
        KRB5_PROTOTYPE((krb5_context,
-                  const krb5_data *,
-                  char *** ));
+               const krb5_data *,
+               char *** ));
 krb5_error_code krb5_free_krbhst
        KRB5_PROTOTYPE((krb5_context,
-                  char * const * ));
-krb5_error_code krb5_random_confounder
-       KRB5_PROTOTYPE((int,
-                  krb5_pointer ));
+               char * const * ));
 krb5_error_code krb5_gen_replay_name
-    KRB5_PROTOTYPE((krb5_context,
-                  const krb5_address *,
-              const char *,
-              char **));
+       KRB5_PROTOTYPE((krb5_context,
+               const krb5_address *,
+               const char *,
+               char **));
 krb5_error_code krb5_create_secure_file
        KRB5_PROTOTYPE((krb5_context,
                   const char * pathname));
 krb5_error_code krb5_sync_disk_file
        KRB5_PROTOTYPE((krb5_context,
-                  FILE *fp));
+               FILE *fp));
 
 
 krb5_error_code krb5_read_message 
@@ -706,8 +498,8 @@ krb5_error_code krb5_read_message
                   krb5_data *));
 krb5_error_code krb5_write_message 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_pointer, 
-                  krb5_data *));
+               krb5_pointer, 
+               krb5_data *));
 
 krb5_error_code krb5_os_init_context
         KRB5_PROTOTYPE((krb5_context));
@@ -719,14 +511,101 @@ krb5_error_code krb5_find_config_files
         KRB5_PROTOTYPE(());
 
 
-/* in here to deal with stuff from lib/crypto/os */
+/*
+ * in here to deal with stuff from lib/crypto/os
+ */
+
+typedef struct _krb5_cryptosystem_entry {
+    krb5_magic magic;
+    krb5_error_code (*encrypt_func) KRB5_NPROTOTYPE(( krb5_const_pointer /* in */,
+                                              krb5_pointer /* out */,
+                                              krb5_const size_t,
+                                              krb5_encrypt_block FAR *,
+                                              krb5_pointer));
+    krb5_error_code (*decrypt_func) KRB5_NPROTOTYPE(( krb5_const_pointer /* in */,
+                                              krb5_pointer /* out */,
+                                              krb5_const size_t,
+                                              krb5_encrypt_block FAR *,
+                                              krb5_pointer));
+    krb5_error_code (*process_key) KRB5_NPROTOTYPE(( krb5_encrypt_block FAR *,
+                                             krb5_const krb5_keyblock FAR *));
+    krb5_error_code (*finish_key) KRB5_NPROTOTYPE(( krb5_encrypt_block FAR *));
+    krb5_error_code (*string_to_key) KRB5_NPROTOTYPE((krb5_const krb5_encrypt_block FAR *,
+                                               krb5_keyblock FAR *,
+                                               krb5_const krb5_data FAR *,
+                                               krb5_const krb5_data FAR *));
+    krb5_error_code (*init_random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
+                                               krb5_const krb5_keyblock FAR *,
+                                               krb5_pointer FAR *));
+    krb5_error_code (*finish_random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
+                                               krb5_pointer FAR *));
+    krb5_error_code (*random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
+                                             krb5_pointer,
+                                             krb5_keyblock FAR * FAR *));
+    int block_length;
+    int pad_minimum;                   /* needed for cksum size computation */
+    int keysize;
+    krb5_enctype proto_enctype;                /* key type,
+                                          (assigned protocol number AND
+                                           table index) */
+} krb5_cryptosystem_entry;
+
+typedef struct _krb5_cs_table_entry {
+    krb5_magic magic;
+    krb5_cryptosystem_entry FAR * system;
+    krb5_pointer random_sequence;      /* from init_random_key() */
+} krb5_cs_table_entry;
+
+
+/* could be used in a table to find a sumtype */
+typedef krb5_error_code
+       (*SUM_FUNC) KRB5_NPROTOTYPE ((
+               krb5_const krb5_pointer /* in */,
+               krb5_const size_t /* in_length */,
+               krb5_const krb5_pointer /* key/seed */,
+               krb5_const size_t /* key/seed size */,
+               krb5_checksum FAR * /* out_cksum */));
+
+typedef krb5_error_code
+       (*SUM_VERF_FUNC) KRB5_NPROTOTYPE ((
+               krb5_const krb5_checksum FAR * /* out_cksum */,
+               krb5_const krb5_pointer /* in */,
+               krb5_const size_t /* in_length */,
+               krb5_const krb5_pointer /* key/seed */,
+               krb5_const size_t /* key/seed size */));
+
+typedef struct _krb5_checksum_entry {
+    krb5_magic magic;
+    SUM_FUNC sum_func;                 /* Checksum generator */
+    SUM_VERF_FUNC sum_verf_func;       /* Verifier of checksum */
+    int checksum_length;               /* length returned by sum_func */
+    unsigned int is_collision_proof:1;
+    unsigned int uses_key:1;
+} krb5_checksum_entry;
+
+
+/* This array is indexed by encryption type */
+extern krb5_cs_table_entry * NEAR krb5_csarray[];
+extern int krb5_max_cryptosystem;
+
+/* This array is indexed by key type */
+extern krb5_cs_table_entry * NEAR krb5_enctype_array[];
+extern krb5_enctype krb5_max_enctype;
+
+/* This array is indexed by checksum type */
+extern krb5_checksum_entry * NEAR krb5_cksumarray[];
+extern krb5_cksumtype krb5_max_cksum;
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_random_confounder
+       KRB5_PROTOTYPE((size_t,
+               krb5_pointer ));
 
 krb5_error_code krb5_crypto_os_localaddr
-    KRB5_PROTOTYPE((krb5_address ***));
+       KRB5_PROTOTYPE((krb5_address ***));
 
 krb5_error_code krb5_crypto_us_timeofday
-    KRB5_PROTOTYPE((krb5_int32 *,
-                   krb5_int32 *));
+       KRB5_PROTOTYPE((krb5_int32 *,
+               krb5_int32 *));
 
 time_t gmt_mktime KRB5_PROTOTYPE((struct tm *));
 
@@ -928,6 +807,9 @@ struct _krb5_context {
        int             scc_default_format;
 };
 
+/* could be used in a table to find an etype and initialize a block */
+
+
 #define KRB5_LIBOPT_SYNC_KDCTIME       0x0001
 
 /*
@@ -1253,21 +1135,21 @@ krb5_error_code decode_krb5_predicted_sam_response
  */
 krb5_error_code krb5_encrypt_tkt_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *,
-                  krb5_ticket * ));
+               krb5_const krb5_keyblock *,
+               krb5_ticket * ));
 
 
 krb5_error_code krb5_encode_kdc_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_msgtype,
-                  krb5_const krb5_enc_kdc_rep_part *,
-                  krb5_const krb5_keyblock *,
-                  krb5_kdc_rep *,
-                  krb5_data ** ));
+               krb5_const krb5_msgtype,
+               krb5_const krb5_enc_kdc_rep_part *,
+               krb5_const krb5_keyblock *,
+               krb5_kdc_rep *,
+               krb5_data ** ));
 
 krb5_error_code krb5_validate_times
        KRB5_PROTOTYPE((krb5_context, 
-                       krb5_ticket_times *));
+               krb5_ticket_times *));
 /*
  * [De]Serialization Handle and operations.
  */
@@ -1288,70 +1170,87 @@ struct __krb5_serializer {
 typedef struct __krb5_serializer * krb5_ser_handle;
 typedef struct __krb5_serializer krb5_ser_entry;
 
-krb5_ser_handle krb5_find_serializer KRB5_PROTOTYPE((krb5_context,
-                                                    krb5_magic));
+krb5_ser_handle krb5_find_serializer
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_magic));
 krb5_error_code krb5_register_serializer
        KRB5_PROTOTYPE((krb5_context,
                        const krb5_ser_entry *));
 
 /* Determine the external size of a particular opaque structure */
-krb5_error_code krb5_size_opaque KRB5_PROTOTYPE((krb5_context,
-                                                krb5_magic,
-                                                krb5_pointer,
-                                                size_t *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_size_opaque
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_magic,
+               krb5_pointer,
+               size_t FAR *));
+
 /* Serialize the structure into a buffer */
-krb5_error_code krb5_externalize_opaque KRB5_PROTOTYPE((krb5_context,
-                                                       krb5_magic,
-                                                       krb5_pointer,
-                                                       krb5_octet **,
-                                                       size_t *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_externalize_opaque
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_magic,
+               krb5_pointer,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
+
 /* Deserialize the structure from a buffer */
-krb5_error_code krb5_internalize_opaque KRB5_PROTOTYPE((krb5_context,
-                                                       krb5_magic,
-                                                       krb5_pointer *,
-                                                       krb5_octet **,
-                                                       size_t *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_internalize_opaque
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_magic,
+               krb5_pointer FAR *,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
 
 /* Serialize data into a buffer */
-krb5_error_code krb5_externalize_data KRB5_PROTOTYPE((krb5_context,
-                                                     krb5_pointer,
-                                                     krb5_octet **,
-                                                     size_t *));
+krb5_error_code krb5_externalize_data
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_pointer,
+               krb5_octet **,
+               size_t *));
 /*
  * Initialization routines.
  */
 
 /* Initialize serialization for krb5_[os_]context */
-krb5_error_code krb5_ser_context_init KRB5_PROTOTYPE((krb5_context));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_context_init
+       KRB5_PROTOTYPE((krb5_context));
 
 /* Initialize serialization for krb5_auth_context */
-krb5_error_code krb5_ser_auth_context_init KRB5_PROTOTYPE((krb5_context));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_auth_context_init
+       KRB5_PROTOTYPE((krb5_context));
 
 /* Initialize serialization for krb5_keytab */
-krb5_error_code krb5_ser_keytab_init KRB5_PROTOTYPE((krb5_context));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_keytab_init
+       KRB5_PROTOTYPE((krb5_context));
 
 /* Initialize serialization for krb5_ccache */
-krb5_error_code krb5_ser_ccache_init KRB5_PROTOTYPE((krb5_context));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_ccache_init
+       KRB5_PROTOTYPE((krb5_context));
 
 /* Initialize serialization for krb5_rcache */
-krb5_error_code krb5_ser_rcache_init KRB5_PROTOTYPE((krb5_context));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_rcache_init
+       KRB5_PROTOTYPE((krb5_context));
 
 /* [De]serialize 4-byte integer */
-krb5_error_code krb5_ser_pack_int32 KRB5_PROTOTYPE((krb5_int32,
-                                                   krb5_octet **,
-                                                   size_t *));
-krb5_error_code krb5_ser_unpack_int32 KRB5_PROTOTYPE((krb5_int32 *,
-                                                     krb5_octet **,
-                                                     size_t *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_pack_int32
+       KRB5_PROTOTYPE((krb5_int32,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_unpack_int32
+       KRB5_PROTOTYPE((krb5_int32 *,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
 /* [De]serialize byte string */
-krb5_error_code krb5_ser_pack_bytes KRB5_PROTOTYPE((krb5_octet *,
-                                                   size_t,
-                                                   krb5_octet **,
-                                                   size_t *));
-krb5_error_code krb5_ser_unpack_bytes KRB5_PROTOTYPE((krb5_octet *,
-                                                     size_t,
-                                                     krb5_octet **,
-                                                     size_t *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_pack_bytes
+       KRB5_PROTOTYPE((krb5_octet FAR *,
+               size_t,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_ser_unpack_bytes
+       KRB5_PROTOTYPE((krb5_octet FAR *,
+               size_t,
+               krb5_octet FAR * FAR *,
+               size_t FAR *));
+
 /*
  * Convenience function for structure magic number
  */
index 8696e94d84c346581062be714462f4d525be8f50..0bac066ae808aac4dac02424cdb92d18380f6953 100644 (file)
@@ -16,7 +16,7 @@
  * this permission notice appear in supporting documentation, and that
  * the name of M.I.T. not be used in advertising or publicity pertaining
  * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
+ * permission. M.I.T. makes no representations about the suitability of
  * this software for any purpose.  It is provided "as is" without express
  * or implied warranty.
  * 
 #ifndef KRB5_GENERAL__
 #define KRB5_GENERAL__
 
-#if (defined(_MSDOS) || defined(_WIN32))
-
-#if defined(_MSDOS)   /* Win 16 vs. Win32 */
-
-       /* Windows 16 specific */
-#define SIZEOF_INT      2
-#define SIZEOF_SHORT    2
-#define SIZEOF_LONG     4
-
-#ifndef KRB5_CALLCONV
-#define KRB5_CALLCONV __far __export __pascal
-#define KRB5_CALLCONV_C __far __export __cdecl
-#define KRB5_DLLIMP
-#define INTERFACE   KRB5_CALLCONV
-#define INTERFACE_C KRB5_CALLCONV_C
-#endif /* !KRB5_CALLCONV */
-
-#define FAR     _far
-#define NEAR    _near
-
-#else          /* Windows 32 specific */
-
-#define SIZEOF_INT      4
-#define SIZEOF_SHORT    2
-#define SIZEOF_LONG     4
-
-#ifndef KRB5_CALLCONV
-#ifdef KRB5_DLL_FILE
-#define KRB5_DECLSPEC dllexport
-#else
-#define KRB5_DECLSPEC dllimport
+#if defined(__MWERKS__) || defined(applec) || defined(THINK_C)
+#define _MACINTOSH
 #endif
-#define KRB5_DLLIMP __declspec(KRB5_DECLSPEC)
-#define KRB5_CALLCONV __stdcall
-#define KRB5_CALLCONV_C __cdecl
-#define INTERFACE   KRB5_DLLIMP KRB5_CALLCONV
-#define INTERFACE_C KRB5_DLLIMP KRB5_CALLCONV_C
-#endif /* !KRB5_CALLCONV */
-
-#include <windows.h>
 
-#endif /* Win 16 vs Win32 */
+#if defined(_MSDOS) || defined(_WIN32) || defined(_MACINTOSH)
+#include <win-mac.h>
+#endif
 
-#ifndef KRB5_CONFIG__
-#define KRB5_PROVIDE_PROTOTYPES
-#define HAS_VOID_TYPE
-#define HAVE_STDARG_H
-#ifndef _SIZE_T_DEFINED
-typedef unsigned int size_t;
-#define _SIZE_T_DEFINED
-#endif /* !_SIZE_T_DEFINED */
-#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__ */
-
-#endif /* !KRB5_CONFIG */
-#else /* !_MSDOS */
 #ifndef KRB5_CONFIG__
 #ifndef KRB5_CALLCONV
 #define KRB5_CALLCONV
 #define KRB5_CALLCONV_C
 #define KRB5_DLLIMP
-#define INTERFACE
-#define INTERFACE_C
+#define KRB5_EXPORTVAR
 #define FAR
 #define NEAR
 #endif /* !KRB5_CALLCONV */
 #endif /* !KRB5_CONFIG__ */
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#endif /* _MSDOS */
 
-/*
- * figure if we're on a macintosh
- */
-
-#if defined(__MWERKS__) || defined(applec) || defined(THINK_C)
-#define _MACINTOSH
+#ifndef THREEPARAMOPEN
+#define THREEPARAMOPEN(x,y,z) open(x,y,z)
 #endif
 
-#ifdef _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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
 #endif
-#include <unix.h>
-#include <ctype.h>
-#endif /* _MACINTOSH */
 
 /*
  * begin wordsize.h
@@ -143,8 +69,8 @@ typedef      unsigned char   krb5_ui_1;
 #if (SIZEOF_INT == 2)
 typedef        int     krb5_int16;
 typedef        unsigned int    krb5_ui_2;
-#define VALID_INT_BITS    0x7fff
-#define VALID_UINT_BITS   0xffff
+#define VALID_INT_BITS   0x7fff
+#define VALID_UINT_BITS          0xffff
 #elif (SIZEOF_SHORT == 2)
 typedef        short   krb5_int16;
 typedef        unsigned short  krb5_ui_2;
@@ -155,8 +81,8 @@ typedef      unsigned short  krb5_ui_2;
 #if (SIZEOF_INT == 4)
 typedef        int     krb5_int32;
 typedef        unsigned int    krb5_ui_4;
-#define VALID_INT_BITS    0x7fffffff
-#define VALID_UINT_BITS   0xffffffff
+#define VALID_INT_BITS   0x7fffffff
+#define VALID_UINT_BITS          0xffffffff
 #elif (SIZEOF_LONG == 4)
 typedef        long    krb5_int32;
 typedef        unsigned long   krb5_ui_4;
@@ -214,9 +140,9 @@ typedef krb5_int32  krb5_deltat;
 typedef krb5_error_code        krb5_magic;
 
 typedef struct _krb5_data {
-    krb5_magic magic;
-    int length;
-    char FAR *data;
+       krb5_magic magic;
+       int length;
+       char FAR *data;
 } krb5_data;
 
 /* Define krb5_const as necessary */
@@ -342,6 +268,8 @@ typedef struct _krb5_context FAR * krb5_context;
 struct _krb5_auth_context;
 typedef struct _krb5_auth_context FAR * krb5_auth_context;
 
+struct _krb5_cryptosystem_entry;
+
 /*
  * begin "encryption.h"
  */
@@ -362,7 +290,7 @@ typedef struct _krb5_checksum {
 
 typedef struct _krb5_encrypt_block {
     krb5_magic magic;
-    struct _krb5_cryptosystem_entry FAR *crypto_entry;
+    struct _krb5_cryptosystem_entry FAR * crypto_entry;
     krb5_keyblock FAR *key;
     krb5_pointer priv;                 /* for private use, e.g. DES
                                           key schedules */
@@ -376,79 +304,12 @@ typedef struct _krb5_enc_data {
     krb5_data ciphertext;
 } krb5_enc_data;
 
-/* could be used in a table to find an etype and initialize a block */
-typedef struct _krb5_cryptosystem_entry {
-    krb5_magic magic;
-    krb5_error_code (*encrypt_func) KRB5_NPROTOTYPE(( krb5_const_pointer /* in */,
-                                              krb5_pointer /* out */,
-                                              krb5_const size_t,
-                                              krb5_encrypt_block FAR *,
-                                              krb5_pointer));
-    krb5_error_code (*decrypt_func) KRB5_NPROTOTYPE(( krb5_const_pointer /* in */,
-                                              krb5_pointer /* out */,
-                                              krb5_const size_t,
-                                              krb5_encrypt_block FAR *,
-                                              krb5_pointer));
-    krb5_error_code (*process_key) KRB5_NPROTOTYPE(( krb5_encrypt_block FAR *,
-                                             krb5_const krb5_keyblock FAR *));
-    krb5_error_code (*finish_key) KRB5_NPROTOTYPE(( krb5_encrypt_block FAR *));
-    krb5_error_code (*string_to_key) KRB5_NPROTOTYPE((krb5_const krb5_encrypt_block FAR *,
-                                               krb5_keyblock FAR *,
-                                               krb5_const krb5_data FAR *,
-                                               krb5_const krb5_data FAR *));
-    krb5_error_code (*init_random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
-                                               krb5_const krb5_keyblock FAR *,
-                                               krb5_pointer FAR *));
-    krb5_error_code (*finish_random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
-                                               krb5_pointer FAR *));
-    krb5_error_code (*random_key) KRB5_NPROTOTYPE(( krb5_const krb5_encrypt_block FAR *,
-                                             krb5_pointer,
-                                             krb5_keyblock FAR * FAR *));
-    int block_length;
-    int pad_minimum;                   /* needed for cksum size computation */
-    int keysize;
-    krb5_enctype proto_enctype;                /* key type,
-                                          (assigned protocol number AND
-                                           table index) */
-} krb5_cryptosystem_entry;
-
-typedef struct _krb5_cs_table_entry {
-    krb5_magic magic;
-    krb5_cryptosystem_entry FAR *system;
-    krb5_pointer random_sequence;      /* from init_random_key() */
-} krb5_cs_table_entry;
-
-/* could be used in a table to find a sumtype */
-typedef krb5_error_code  (*SUM_FUNC) KRB5_NPROTOTYPE (
-                       (krb5_pointer /* in */,
-                       size_t /* in_length */,
-                       krb5_pointer /* key/seed */,
-                       size_t /* key/seed size */,
-                       krb5_checksum FAR * /* out_cksum */));
-
-typedef krb5_error_code  (*SUM_VERF_FUNC) KRB5_NPROTOTYPE (
-                       (krb5_checksum FAR * /* out_cksum */,
-                       krb5_pointer /* in */,
-                       size_t /* in_length */,
-                       krb5_pointer /* key/seed */,
-                       size_t /* key/seed size */));
-
-typedef struct _krb5_checksum_entry {
-    krb5_magic magic;
-    SUM_FUNC sum_func;                 /* Checksum generator */
-    SUM_VERF_FUNC sum_verf_func;       /* Verifier of checksum */
-    int checksum_length;               /* length of stuff returned by
-                                          sum_func */
-    unsigned int is_collision_proof:1;
-    unsigned int uses_key:1;
-} krb5_checksum_entry;
-
 /* per Kerberos v5 protocol spec */
 #define        ENCTYPE_NULL            0x0000
 #define        ENCTYPE_DES_CBC_CRC     0x0001  /* DES cbc mode with CRC-32 */
 #define        ENCTYPE_DES_CBC_MD4     0x0002  /* DES cbc mode with RSA-MD4 */
 #define        ENCTYPE_DES_CBC_MD5     0x0003  /* DES cbc mode with RSA-MD5 */
-#define        ENCTYPE_DES_CBC_RAW     0x0004  /* DES cbc mode raw */
+#define        ENCTYPE_DES_CBC_RAW     0x0004  /* DES cbc mode raw */
 #define        ENCTYPE_DES3_CBC_SHA    0x0005  /* DES-3 cbc mode with NIST-SHA */
 #define        ENCTYPE_DES3_CBC_RAW    0x0006  /* DES-3 cbc mode raw */
 #define ENCTYPE_UNKNOWN                0x01ff
@@ -470,31 +331,6 @@ typedef struct _krb5_checksum_entry {
 #endif /* roundup */
 
 /* macro function definitions to help clean up code */
-#define        krb5_encrypt_size(length, crypto) \
-     krb5_roundup((length)+(crypto)->pad_minimum, (crypto)->block_length)
-
-/* This array is indexed by encryption type */
-extern krb5_cs_table_entry * NEAR krb5_csarray[];
-extern int krb5_max_cryptosystem;              /* max entry in array */
-
-/* This array is indexed by key type, and has (should have) pointers to
-   the same entries as krb5_csarray */
-extern krb5_cs_table_entry * NEAR krb5_enctype_array[];
-extern krb5_enctype krb5_max_enctype;          /* max entry in array */
-
-/* This array is indexed by checksum type */
-extern krb5_checksum_entry * NEAR krb5_cksumarray[];
-extern krb5_cksumtype krb5_max_cksum;          /* max entry in array */
-
-#define valid_enctype(ktype)     ((((ktype)) <= krb5_max_enctype) && ((ktype) > 0) && krb5_enctype_array[ktype])
-
-#define valid_cksumtype(cktype)     ((((cktype)) <= krb5_max_cksum) && ((cktype) > 0) && krb5_cksumarray[cktype])
-
-#define is_coll_proof_cksum(cktype) (krb5_cksumarray[cktype]->is_collision_proof)
-#define is_keyed_cksum(cktype) (krb5_cksumarray[cktype]->uses_key)
-
-/* set up *eblockp to use etype */
-#define krb5_use_enctype(context, eblockp, enctype) (eblockp)->crypto_entry = krb5_enctype_array[(enctype)]->system
 
 #if 1
 #define krb5_x(ptr,args) ((ptr)?((*(ptr)) args):(abort(),1))
@@ -503,36 +339,98 @@ extern krb5_cksumtype krb5_max_cksum;             /* max entry in array */
 #define krb5_x(ptr,args) ((*(ptr)) args)
 #define krb5_xc(ptr,args) ((*(ptr)) args)
 #endif
-#define krb5_encrypt(context, inptr, outptr, size, eblock, ivec) krb5_x((eblock)->crypto_entry->encrypt_func,(inptr, outptr, size, eblock, ivec))
-#define krb5_decrypt(context, inptr, outptr, size, eblock, ivec) krb5_x((eblock)->crypto_entry->decrypt_func,(inptr, outptr, size, eblock, ivec))
-#define krb5_process_key(context, eblock, key) krb5_x((eblock)->crypto_entry->process_key,(eblock, key))
-#define krb5_finish_key(context, eblock) krb5_x((eblock)->crypto_entry->finish_key,(eblock))
-#define krb5_string_to_key(context, eblock, keyblock, data, princ) krb5_x((eblock)->crypto_entry->string_to_key,(eblock, keyblock, data, princ))
-#define krb5_init_random_key(context, eblock, keyblock, ptr) krb5_x((eblock)->crypto_entry->init_random_key,(eblock, keyblock, ptr))
-#define krb5_finish_random_key(context, eblock, ptr) krb5_x((eblock)->crypto_entry->finish_random_key,(eblock, ptr))
-#define krb5_random_key(context, eblock, ptr, keyblock) krb5_x((eblock)->crypto_entry->random_key,(eblock, ptr, keyblock))
-
-#define krb5_eblock_enctype(context, eblockp) ((eblockp)->crypto_entry->proto_enctype)
 
 /*
- * Here's the stuff for the checksum switch:
+ * cryptosystem routine prototypes
  */
-#define krb5_checksum_size(context, ctype)  (krb5_cksumarray[ctype]->checksum_length)
-#define krb5_calculate_checksum(context, ctype, in, in_length, seed, seed_length, outcksum) krb5_x(((*krb5_cksumarray[ctype]->sum_func)),(in, in_length, seed, seed_length, outcksum))
-#define krb5_verify_checksum(context, ctype, cksum, in, in_length, seed, seed_length) krb5_x((*krb5_cksumarray[ctype]->sum_verf_func),(cksum, in, in_length, seed, seed_length))
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_encrypt
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_pointer inptr,
+               krb5_pointer outptr,
+               krb5_const size_t size,
+               krb5_encrypt_block FAR * eblock,
+               krb5_pointer ivec));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_decrypt
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_pointer inptr,
+               krb5_pointer outptr,
+               krb5_const size_t size,
+               krb5_encrypt_block FAR * eblock,
+               krb5_pointer ivec));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_process_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_encrypt_block FAR * eblock,
+               krb5_const krb5_keyblock FAR * key));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_finish_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_encrypt_block FAR * eblock));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_encrypt_block FAR * eblock,
+               krb5_keyblock FAR * keyblock,
+               krb5_const krb5_data FAR * data,
+               krb5_const krb5_data FAR * salt));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_init_random_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_encrypt_block FAR * eblock,
+               krb5_const krb5_keyblock FAR * keyblock,
+               krb5_pointer FAR * ptr));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_finish_random_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_encrypt_block FAR * eblock,
+               krb5_pointer FAR * ptr));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_random_key
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_encrypt_block FAR * eblock,
+               krb5_pointer ptr,
+               krb5_keyblock FAR * FAR * keyblock));
+KRB5_DLLIMP krb5_enctype KRB5_CALLCONV krb5_eblock_enctype
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_encrypt_block FAR * eblock));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_use_enctype
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_encrypt_block FAR * eblock,
+               krb5_const krb5_enctype enctype));
+KRB5_DLLIMP size_t KRB5_CALLCONV krb5_encrypt_size
+       KRB5_PROTOTYPE((krb5_const size_t length,
+               krb5_const struct _krb5_cryptosystem_entry FAR * crypto));
+KRB5_DLLIMP size_t KRB5_CALLCONV krb5_checksum_size
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_cksumtype ctype));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_calculate_checksum
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_cksumtype ctype,
+               krb5_const krb5_pointer in, krb5_const size_t in_length,
+               krb5_const krb5_pointer seed, krb5_const size_t seed_length,
+               krb5_checksum FAR * outcksum));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_verify_checksum
+       KRB5_PROTOTYPE((krb5_context context,
+               krb5_const krb5_cksumtype ctype,
+               krb5_const krb5_checksum FAR * cksum,
+               krb5_const krb5_pointer in, krb5_const size_t in_length,
+               krb5_const krb5_pointer seed, krb5_const size_t seed_length));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_random_confounder
+       KRB5_PROTOTYPE((size_t, krb5_pointer));
+
+krb5_boolean KRB5_CALLCONV valid_enctype
+       KRB5_PROTOTYPE((krb5_const krb5_enctype ktype));
+krb5_boolean KRB5_CALLCONV valid_cksumtype
+       KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));
+krb5_boolean KRB5_CALLCONV is_coll_proof_cksum
+       KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));
+krb5_boolean KRB5_CALLCONV is_keyed_cksum
+       KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));
 
-/*
- * encryption routine prototypes
- */
 krb5_error_code krb5_encrypt_data
        KRB5_PROTOTYPE((krb5_context context, krb5_keyblock *key, 
-                  krb5_pointer ivec, krb5_data *data, 
-                  krb5_enc_data *enc_data));
+               krb5_pointer ivec, krb5_data *data, 
+               krb5_enc_data *enc_data));
 
 krb5_error_code krb5_decrypt_data
        KRB5_PROTOTYPE((krb5_context context, krb5_keyblock *key, 
-                  krb5_pointer ivec, krb5_enc_data *data, 
-                  krb5_data *enc_data));
+               krb5_pointer ivec, krb5_enc_data *data, 
+               krb5_data *enc_data));
 
 /*
  * end "encryption.h"
@@ -583,7 +481,7 @@ krb5_error_code krb5_decrypt_data
  * options when using the TGT to get derivitive tickets.
  * 
  *  New mask = KDC_OPT_FORWARDABLE | KDC_OPT_PROXIABLE |
- *             KDC_OPT_ALLOW_POSTDATE | KDC_OPT_RENEWABLE
+ *            KDC_OPT_ALLOW_POSTDATE | KDC_OPT_RENEWABLE
  */
 #define KDC_TKT_COMMON_MASK            0x54800000
 
@@ -621,7 +519,7 @@ krb5_error_code krb5_decrypt_data
 /* #define     AP_OPTS_RESERVED        0x00000008 */
 /* #define     AP_OPTS_RESERVED        0x00000004 */
 /* #define     AP_OPTS_RESERVED        0x00000002 */
-#define AP_OPTS_USE_SUBKEY      0x00000001
+#define AP_OPTS_USE_SUBKEY     0x00000001
 
 #define AP_OPTS_WIRE_MASK      0xfffffff0
 
@@ -722,16 +620,16 @@ krb5_error_code krb5_decrypt_data
 #define KRB5_LRQ_ONE_LAST_REQ          (-5)
 
 /* PADATA types */
-#define KRB5_PADATA_NONE                0
+#define KRB5_PADATA_NONE               0
 #define        KRB5_PADATA_AP_REQ              1
 #define        KRB5_PADATA_TGS_REQ             KRB5_PADATA_AP_REQ
 #define KRB5_PADATA_ENC_TIMESTAMP      2
 #define        KRB5_PADATA_PW_SALT             3
 #if 0                          /* Not used */
-#define KRB5_PADATA_ENC_ENCKEY          4  /* Key encrypted within itself */
+#define KRB5_PADATA_ENC_ENCKEY         4  /* Key encrypted within itself */
 #endif
-#define KRB5_PADATA_ENC_UNIX_TIME       5  /* timestamp encrypted in key */
-#define KRB5_PADATA_ENC_SANDIA_SECURID  6  /* SecurId passcode */
+#define KRB5_PADATA_ENC_UNIX_TIME      5  /* timestamp encrypted in key */
+#define KRB5_PADATA_ENC_SANDIA_SECURID 6  /* SecurId passcode */
 #define KRB5_PADATA_SESAME             7  /* Sesame project */
 #define KRB5_PADATA_OSF_DCE            8  /* OSF DCE */
 #define KRB5_CYBERSAFE_SECUREID                9  /* Cybersafe */
@@ -765,6 +663,7 @@ krb5_error_code krb5_decrypt_data
  * begin "error_def.h"
  */
 
+#include <profile.h>
 #include <errno.h>
 
 /*
@@ -837,7 +736,7 @@ typedef struct _krb5_tkt_authent {
     krb5_flags ap_options;
 } krb5_tkt_authent;
 
-/* credentials:  Ticket, session key, etc. */
+/* credentials:         Ticket, session key, etc. */
 typedef struct _krb5_creds {
     krb5_magic magic;
     krb5_principal client;             /* client's principal identifier */
@@ -992,31 +891,31 @@ typedef struct _krb5_priv_enc_part {
 
 typedef struct _krb5_cred_info {
     krb5_magic magic;
-    krb5_keyblock FAR *session;         /* session key used to encrypt */
+    krb5_keyblock FAR *session;                /* session key used to encrypt */
                                        /* ticket */
-    krb5_principal client;              /* client name/realm, optional */
-    krb5_principal server;              /* server name/realm, optional */
+    krb5_principal client;             /* client name/realm, optional */
+    krb5_principal server;             /* server name/realm, optional */
     krb5_flags flags;                  /* ticket flags, optional */
     krb5_ticket_times times;           /* auth, start, end, renew_till, */
-                                        /* optional */
+                                       /* optional */
     krb5_address FAR * FAR *caddrs;    /* array of ptrs to addresses */
 } krb5_cred_info;
 
 typedef struct _krb5_cred_enc_part {
     krb5_magic magic;
-    krb5_int32 nonce;                   /* nonce, optional */
-    krb5_timestamp timestamp;           /* client time */
-    krb5_int32 usec;                    /* microsecond portion of time */
-    krb5_address FAR *s_address;        /* sender address, optional */
-    krb5_address FAR *r_address;        /* recipient address, optional */
+    krb5_int32 nonce;                  /* nonce, optional */
+    krb5_timestamp timestamp;          /* client time */
+    krb5_int32 usec;                   /* microsecond portion of time */
+    krb5_address FAR *s_address;       /* sender address, optional */
+    krb5_address FAR *r_address;       /* recipient address, optional */
     krb5_cred_info FAR * FAR *ticket_info;
-} krb5_cred_enc_part;    
+} krb5_cred_enc_part;   
 
 typedef struct _krb5_cred {
     krb5_magic magic;
     krb5_ticket FAR * FAR *tickets;    /* tickets */
     krb5_enc_data enc_part;            /* encrypted part */
-    krb5_cred_enc_part FAR *enc_part2;         /* unencrypted version, if available*/
+    krb5_cred_enc_part FAR *enc_part2; /* unencrypted version, if available*/
 } krb5_cred;
 
 /* Sandia password generation structures */
@@ -1038,22 +937,22 @@ typedef struct _krb5_pwd_data {
  * begin "safepriv.h"
  */
 
-#define KRB5_AUTH_CONTEXT_DO_TIME       0x00000001
-#define KRB5_AUTH_CONTEXT_RET_TIME      0x00000002
-#define KRB5_AUTH_CONTEXT_DO_SEQUENCE   0x00000004
-#define KRB5_AUTH_CONTEXT_RET_SEQUENCE  0x00000008
+#define KRB5_AUTH_CONTEXT_DO_TIME      0x00000001
+#define KRB5_AUTH_CONTEXT_RET_TIME     0x00000002
+#define KRB5_AUTH_CONTEXT_DO_SEQUENCE  0x00000004
+#define KRB5_AUTH_CONTEXT_RET_SEQUENCE 0x00000008
  
 typedef struct krb5_replay_data { 
-    krb5_timestamp      timestamp; 
-    krb5_int32          usec;
-    krb5_int32          seq; 
+    krb5_timestamp     timestamp; 
+    krb5_int32         usec;
+    krb5_int32         seq; 
 } krb5_replay_data;
 
 /* flags for krb5_auth_con_genaddrs() */
-#define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR           0x00000001
-#define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR          0x00000002
-#define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR      0x00000004
-#define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR     0x00000008
+#define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR          0x00000001
+#define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR         0x00000002
+#define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR     0x00000004
+#define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR    0x00000008
 
 /*
  * end "safepriv.h"
@@ -1131,7 +1030,7 @@ typedef struct _krb5_cc_ops {
 #define krb5_cc_get_name(context, cache) krb5_xc((cache)->ops->get_name,(context, cache))
 #define krb5_cc_get_type(context, cache) ((cache)->ops->prefix)
 
-extern krb5_cc_ops FAR *krb5_cc_dfl_ops;
+extern krb5_cc_ops *krb5_cc_dfl_ops;
 
 /*
  * end "ccache.h"
@@ -1158,40 +1057,49 @@ typedef struct _krb5_donot_replay {
 typedef struct _krb5_rc_ops {
     krb5_magic magic;
     char FAR *type;
-    krb5_error_code (*init)KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_deltat)); /* create */
-    krb5_error_code (*recover)KRB5_NPROTOTYPE((krb5_context, krb5_rcache)); /* open */
-    krb5_error_code (*destroy)KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
-    krb5_error_code (*close)KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
-    krb5_error_code (*store)KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_donot_replay FAR *));
-    krb5_error_code (*expunge)KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
-    krb5_error_code (*get_span)KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_deltat FAR *));
-    char FAR *(*get_name)KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
-    krb5_error_code (*resolve)KRB5_NPROTOTYPE((krb5_context, krb5_rcache, char FAR *));
+    krb5_error_code (KRB5_CALLCONV *init)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_deltat)); /* create */
+    krb5_error_code (KRB5_CALLCONV *recover)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache)); /* open */
+    krb5_error_code (KRB5_CALLCONV *destroy)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
+    krb5_error_code (KRB5_CALLCONV *close)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
+    krb5_error_code (KRB5_CALLCONV *store)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_donot_replay FAR *));
+    krb5_error_code (KRB5_CALLCONV *expunge)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
+    krb5_error_code (KRB5_CALLCONV *get_span)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache,krb5_deltat FAR *));
+    char FAR *(KRB5_CALLCONV *get_name)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache));
+    krb5_error_code (KRB5_CALLCONV *resolve)
+       KRB5_NPROTOTYPE((krb5_context, krb5_rcache, char FAR *));
 } krb5_rc_ops;
 
 krb5_error_code krb5_rc_default 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_rcache FAR *));
+               krb5_rcache FAR *));
 krb5_error_code krb5_rc_register_type 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_rc_ops FAR *));
+               krb5_rc_ops FAR *));
 krb5_error_code krb5_rc_resolve_type 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_rcache FAR *,char FAR *));
+               krb5_rcache FAR *,char FAR *));
 krb5_error_code krb5_rc_resolve_full 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_rcache FAR *,char FAR *));
+               krb5_rcache FAR *,char FAR *));
 char FAR * krb5_rc_get_type 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_rcache));
+               krb5_rcache));
 char FAR * krb5_rc_default_type 
        KRB5_PROTOTYPE((krb5_context));
 char FAR * krb5_rc_default_name 
        KRB5_PROTOTYPE((krb5_context));
 krb5_error_code krb5_auth_to_rep 
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_tkt_authent FAR *,
-                  krb5_donot_replay FAR *));
+               krb5_tkt_authent FAR *,
+               krb5_donot_replay FAR *));
 
 #define krb5_rc_initialize(context, id, span) krb5_x((id)->ops->init,(context, id, span))
 #define krb5_rc_recover(context, id) krb5_x((id)->ops->recover,(context, id))
@@ -1222,7 +1130,7 @@ typedef krb5_pointer krb5_kt_cursor;      /* XXX */
 typedef struct krb5_keytab_entry_st {
     krb5_magic magic;
     krb5_principal principal;  /* principal of this key */
-    krb5_timestamp timestamp;   /* time entry written to keytable */
+    krb5_timestamp timestamp;  /* time entry written to keytable */
     krb5_kvno vno;             /* key version number */
     krb5_keyblock key;         /* the secret key */
 } krb5_keytab_entry;
@@ -1239,46 +1147,46 @@ typedef struct _krb5_kt_ops {
     krb5_magic magic;
     char FAR *prefix;
     /* routines always present */
-    krb5_error_code (*resolve) 
+    krb5_error_code (KRB5_CALLCONV *resolve) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_const char FAR *,
-                   krb5_keytab FAR *));
-    krb5_error_code (*get_name) 
+                krb5_const char FAR *,
+                krb5_keytab FAR *));
+    krb5_error_code (KRB5_CALLCONV *get_name) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   char FAR *,
-                   int));
-    krb5_error_code (*close) 
+                krb5_keytab,
+                char FAR *,
+                int));
+    krb5_error_code (KRB5_CALLCONV *close) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab));
-    krb5_error_code (*get) 
+                krb5_keytab));
+    krb5_error_code (KRB5_CALLCONV *get) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   krb5_principal,
-                   krb5_kvno,
-                   krb5_enctype,
-                   krb5_keytab_entry FAR *));
-    krb5_error_code (*start_seq_get) 
+                krb5_keytab,
+                krb5_principal,
+                krb5_kvno,
+                krb5_enctype,
+                krb5_keytab_entry FAR *));
+    krb5_error_code (KRB5_CALLCONV *start_seq_get) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   krb5_kt_cursor FAR *));     
-    krb5_error_code (*get_next) 
+                krb5_keytab,
+                krb5_kt_cursor FAR *));        
+    krb5_error_code (KRB5_CALLCONV *get_next) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   krb5_keytab_entry FAR *,
-                   krb5_kt_cursor FAR *));
-    krb5_error_code (*end_get) 
+                krb5_keytab,
+                krb5_keytab_entry FAR *,
+                krb5_kt_cursor FAR *));
+    krb5_error_code (KRB5_CALLCONV *end_get) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   krb5_kt_cursor FAR *));
+                krb5_keytab,
+                krb5_kt_cursor FAR *));
     /* routines to be included on extended version (write routines) */
-    krb5_error_code (*add) 
+    krb5_error_code (KRB5_CALLCONV *add) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
-                   krb5_keytab_entry FAR *));
-    krb5_error_code (*remove) 
+                krb5_keytab,
+                krb5_keytab_entry FAR *));
+    krb5_error_code (KRB5_CALLCONV *remove) 
        KRB5_NPROTOTYPE((krb5_context,
-                   krb5_keytab,
+                krb5_keytab,
                  krb5_keytab_entry FAR *));
 
     /* Handle for serializer */
@@ -1308,723 +1216,724 @@ extern krb5_kt_ops krb5_kt_dfl_ops;
 
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_init_context
        KRB5_PROTOTYPE((krb5_context FAR *));
-void krb5_free_context
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_context
        KRB5_PROTOTYPE((krb5_context));
 
 krb5_error_code krb5_set_default_in_tkt_ktypes
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_enctype *));
+               krb5_const krb5_enctype *));
 krb5_error_code krb5_get_default_in_tkt_ktypes
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_enctype **));
+               krb5_enctype **));
 
 krb5_error_code krb5_set_default_tgs_ktypes
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_enctype *));
+               krb5_const krb5_enctype *));
 krb5_error_code krb5_get_tgs_ktypes
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  krb5_enctype **));
+               krb5_const_principal,
+               krb5_enctype **));
 
 /* libkrb.spec */
 krb5_error_code krb5_kdc_rep_decrypt_proc
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *,
-                  krb5_const_pointer,
-                  krb5_kdc_rep * ));
-krb5_error_code krb5_decrypt_tkt_part
+               krb5_const krb5_keyblock *,
+               krb5_const_pointer,
+               krb5_kdc_rep * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_decrypt_tkt_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *,
-                  krb5_ticket * ));
+               krb5_const krb5_keyblock FAR *,
+               krb5_ticket FAR * ));
 krb5_error_code krb5_get_cred_from_kdc
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ccache,         /* not const, as reading may save
+               krb5_ccache,            /* not const, as reading may save
                                           state */
-                  krb5_creds *,
-                  krb5_creds **,
-                  krb5_creds *** ));
+               krb5_creds *,
+               krb5_creds **,
+               krb5_creds *** ));
 krb5_error_code krb5_get_cred_from_kdc_validate
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ccache,         /* not const, as reading may save
+               krb5_ccache,            /* not const, as reading may save
                                           state */
-                  krb5_creds *,
-                  krb5_creds **,
-                  krb5_creds *** ));
+               krb5_creds *,
+               krb5_creds **,
+               krb5_creds *** ));
 krb5_error_code krb5_get_cred_from_kdc_renew
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ccache,         /* not const, as reading may save
+               krb5_ccache,            /* not const, as reading may save
                                           state */
-                  krb5_creds *,
-                  krb5_creds **,
-                  krb5_creds *** ));
-void krb5_free_tgt_creds
+               krb5_creds *,
+               krb5_creds **,
+               krb5_creds *** ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_tgt_creds
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_creds ** ));    /* XXX too hard to do with const */
+               krb5_creds FAR * FAR* )); /* XXX too hard to do with const */
 
 #define        KRB5_GC_USER_USER       1       /* want user-user ticket */
 #define        KRB5_GC_CACHED          2       /* want cached ticket only */
 
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_credentials
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_ccache,
-                  krb5_creds FAR *,
-                  krb5_creds FAR * FAR *));
-KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_credentials_validate
+               krb5_const krb5_flags,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_creds FAR * FAR *));
+krb5_error_code krb5_get_credentials_validate
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_ccache,
-                  krb5_creds FAR *,
-                  krb5_creds FAR * FAR *));
-KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_credentials_renew
+               krb5_const krb5_flags,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_creds FAR * FAR *));
+krb5_error_code krb5_get_credentials_renew
        KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_flags,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_creds FAR * FAR *));
+krb5_error_code krb5_get_cred_via_tkt
+       KRB5_PROTOTYPE((krb5_context,
+                  krb5_creds *,
                   krb5_const krb5_flags,
-                  krb5_ccache,
-                  krb5_creds FAR *,
-                  krb5_creds FAR * FAR *));
-KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_cred_via_tkt
-        KRB5_PROTOTYPE((krb5_context,
-                   krb5_creds *,
-                   krb5_const krb5_flags,
-                   krb5_address * krb5_const *,
-                   krb5_creds *,
-                   krb5_creds **));
-krb5_error_code krb5_mk_req
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_const krb5_flags,
-                  char *,
-                  char *,
-                  krb5_data *,
-                  krb5_ccache,
-                  krb5_data * ));
+                  krb5_address * krb5_const *,
+                  krb5_creds *,
+                  krb5_creds **));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_req
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context FAR *,
+               krb5_const krb5_flags,
+               char FAR *,
+               char FAR *,
+               krb5_data FAR *,
+               krb5_ccache,
+               krb5_data FAR * ));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_req_extended
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context FAR *,
-                  krb5_const krb5_flags,
-                  krb5_data FAR *,
-                  krb5_creds FAR *,
-                  krb5_data FAR * ));
-krb5_error_code krb5_mk_rep
+               krb5_auth_context FAR *,
+               krb5_const krb5_flags,
+               krb5_data FAR *,
+               krb5_creds FAR *,
+               krb5_data FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_data *));
+               krb5_auth_context,
+               krb5_data FAR *));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_const krb5_data FAR *,
-                  krb5_ap_rep_enc_part FAR * FAR *));
-krb5_error_code krb5_mk_error
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_error *,
-                  krb5_data * ));
-krb5_error_code krb5_rd_error
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_data *,
-                  krb5_error ** ));
-krb5_error_code krb5_rd_safe
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_const krb5_data *,
-                  krb5_data *,
-                  krb5_replay_data *));
-krb5_error_code krb5_rd_priv
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_const krb5_data *,
-                  krb5_data *,
-                  krb5_replay_data *));
+               krb5_auth_context,
+               krb5_const krb5_data FAR *,
+               krb5_ap_rep_enc_part FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_error
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_error FAR *,
+               krb5_data FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_error
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_data FAR *,
+               krb5_error FAR * FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_safe
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_const krb5_data FAR *,
+               krb5_data FAR *,
+               krb5_replay_data FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_priv
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_const krb5_data FAR *,
+               krb5_data FAR *,
+               krb5_replay_data FAR *));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_parse_name
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const char FAR *,
-                  krb5_principal FAR * ));
+               krb5_const char FAR *,
+               krb5_principal FAR * ));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_unparse_name
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  char FAR * FAR * ));
-krb5_error_code krb5_unparse_name_ext
+               krb5_const_principal,
+               char FAR * FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_unparse_name_ext
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  char **,
-                  int *));
+               krb5_const_principal,
+               char FAR * FAR *,
+               int FAR *));
 krb5_boolean krb5_address_search
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_address *,
-                  krb5_address * krb5_const *));
+               krb5_const krb5_address *,
+               krb5_address * krb5_const *));
 krb5_boolean krb5_address_compare
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_address *,
-                  krb5_const krb5_address *));
+               krb5_const krb5_address *,
+               krb5_const krb5_address *));
 int krb5_address_order
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_address *,
-                  krb5_const krb5_address *));
+               krb5_const krb5_address *,
+               krb5_const krb5_address *));
 krb5_boolean krb5_realm_compare
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  krb5_const_principal));
-krb5_boolean krb5_principal_compare
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  krb5_const_principal));
-krb5_error_code krb5_copy_keyblock
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *,
-              krb5_keyblock **));
-krb5_error_code krb5_copy_keyblock_contents
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *,
-              krb5_keyblock *));
-krb5_error_code krb5_copy_creds
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_creds *,
-              krb5_creds **));
-krb5_error_code krb5_copy_data
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_data *,
-              krb5_data **));
-krb5_error_code krb5_copy_principal
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-              krb5_principal *));
-krb5_error_code krb5_copy_addr
-       KRB5_PROTOTYPE((krb5_context, const krb5_address *, krb5_address **));
-krb5_error_code krb5_copy_addresses
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_address * krb5_const *,
-              krb5_address ***));
-krb5_error_code krb5_copy_ticket
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_ticket *, krb5_ticket **));
-krb5_error_code krb5_copy_authdata
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_authdata * krb5_const *,
-              krb5_authdata ***));
-krb5_error_code krb5_copy_authenticator
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_authenticator *,
-              krb5_authenticator **));
-krb5_error_code krb5_copy_checksum
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_checksum *,
-              krb5_checksum **));
-KRB5_DLLIMP void KRB5_CALLCONV krb5_init_ets KRB5_PROTOTYPE((krb5_context));
+               krb5_const_principal,
+               krb5_const_principal));
+KRB5_DLLIMP krb5_boolean KRB5_CALLCONV krb5_principal_compare
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const_principal,
+               krb5_const_principal));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_keyblock
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_keyblock FAR *,
+               krb5_keyblock FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_keyblock_contents
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_keyblock FAR *,
+               krb5_keyblock FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_creds
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_creds FAR *,
+               krb5_creds FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_data
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_data FAR *,
+               krb5_data FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_principal
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const_principal,
+               krb5_principal FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_addr
+       KRB5_PROTOTYPE((krb5_context,
+               const krb5_address FAR *,
+               krb5_address FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_addresses
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_address FAR * krb5_const FAR *,
+               krb5_address FAR * FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_ticket
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_ticket FAR *,
+               krb5_ticket FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_authdata
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_authdata FAR * krb5_const FAR *,
+               krb5_authdata FAR * FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_authenticator
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_authenticator FAR *,
+               krb5_authenticator FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_copy_checksum
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_checksum FAR *,
+               krb5_checksum FAR * FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_init_ets
+       KRB5_PROTOTYPE((krb5_context));
 krb5_error_code krb5_generate_subkey
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *, krb5_keyblock **));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_keyblock *, krb5_keyblock **));
 krb5_error_code krb5_generate_seq_number
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_keyblock *, krb5_int32 *));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_keyblock *, krb5_int32 *));
 krb5_error_code krb5_get_server_rcache
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_data *, krb5_rcache *));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_data *, krb5_rcache *));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV_C krb5_build_principal_ext
-       KRB5_STDARG_P((krb5_context, krb5_principal FAR *, int, krb5_const char FAR *, ...));
-krb5_error_code krb5_build_principal
-       KRB5_STDARG_P((krb5_context, krb5_principal *, int, krb5_const char *, ...));
+       KRB5_STDARG_P((krb5_context, krb5_principal FAR *, int, krb5_const char FAR *, ...));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV_C krb5_build_principal
+       KRB5_STDARG_P((krb5_context, krb5_principal FAR *, int, krb5_const char FAR *, ...));
 #ifdef va_start
 /* XXX depending on varargs include file defining va_start... */
 krb5_error_code krb5_build_principal_va
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_principal *, int, krb5_const char *, va_list));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_principal *, int, krb5_const char *, va_list));
 #endif
 
-krb5_error_code krb5_425_conv_principal
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_425_conv_principal
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const char *name, krb5_const char *instance, krb5_const char *realm,
-                  krb5_principal *princ));
+               krb5_const char FAR *name,
+               krb5_const char FAR *instance, krb5_const char FAR *realm,
+               krb5_principal FAR *princ));
 
-krb5_error_code
-krb5_524_conv_principal
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_524_conv_principal
        KRB5_PROTOTYPE((krb5_context context, krb5_const krb5_principal princ, 
-                  char *name, char *inst, char *realm));
+               char FAR *name, char FAR *inst, char FAR *realm));
 
 /* libkt.spec */
-krb5_error_code krb5_kt_register
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_register
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_kt_ops * ));
-krb5_error_code krb5_kt_resolve
+               krb5_kt_ops FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_resolve
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const char *,
-                  krb5_keytab * ));
-krb5_error_code krb5_kt_default_name
+               krb5_const char FAR *,
+               krb5_keytab FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_default_name
        KRB5_PROTOTYPE((krb5_context,
-                  char *,
-                  int ));
-krb5_error_code krb5_kt_default
+               char FAR *,
+               int ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_default
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keytab * ));
-krb5_error_code krb5_kt_free_entry
+               krb5_keytab FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_free_entry
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keytab_entry * ));
+               krb5_keytab_entry FAR * ));
 /* remove and add are functions, so that they can return NOWRITE
    if not a writable keytab */
-krb5_error_code krb5_kt_remove_entry
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_remove_entry
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keytab,
-                  krb5_keytab_entry * ));
-krb5_error_code krb5_kt_add_entry
+               krb5_keytab,
+               krb5_keytab_entry FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_add_entry
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keytab,
-                  krb5_keytab_entry * ));
+               krb5_keytab,
+               krb5_keytab_entry FAR * ));
 krb5_error_code krb5_principal2salt
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal, krb5_data *));
+               krb5_const_principal, krb5_data *));
 krb5_error_code krb5_principal2salt_norealm
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal, krb5_data *));
+               krb5_const_principal, krb5_data *));
 
 /* librc.spec--see rcache.h */
 
 /* libcc.spec */
-krb5_error_code krb5_cc_resolve
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_cc_resolve
        KRB5_PROTOTYPE((krb5_context,
-                  char *,
-                  krb5_ccache * ));
-krb5_error_code krb5_cc_generate_new
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_cc_ops *,
-                  krb5_ccache * ));
-char * krb5_cc_default_name
+               char FAR *,
+               krb5_ccache FAR * ));
+KRB5_DLLIMP char FAR * KRB5_CALLCONV krb5_cc_default_name
        KRB5_PROTOTYPE((krb5_context));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_cc_default
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ccache FAR *));
+               krb5_ccache FAR *));
 KRB5_DLLIMP unsigned int KRB5_CALLCONV krb5_get_notification_message
-   KRB5_PROTOTYPE((void));
+       KRB5_PROTOTYPE((void));
 
 /* chk_trans.c */
 krb5_error_code krb5_check_transited_list
-    KRB5_PROTOTYPE((krb5_context,
-                  krb5_data *trans, krb5_data *realm1, krb5_data *realm2));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_data *trans, krb5_data *realm1, krb5_data *realm2));
 
 /* free_rtree.c */
 void krb5_free_realm_tree
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_principal *));
+               krb5_principal *));
 
 /* krb5_free.c */
 KRB5_DLLIMP void KRB5_CALLCONV krb5_free_principal
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_principal ));
-void krb5_free_authenticator
+               krb5_principal ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_authenticator
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_authenticator * ));
-void krb5_free_authenticator_contents
+               krb5_authenticator FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_authenticator_contents
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_authenticator * ));
+               krb5_authenticator FAR * ));
 KRB5_DLLIMP void KRB5_CALLCONV krb5_free_addresses
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_address FAR * FAR * ));
-void krb5_free_address
+               krb5_address FAR * FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_address
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_address * ));
-void krb5_free_authdata
+               krb5_address FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_authdata
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_authdata ** ));
-void krb5_free_enc_tkt_part
+               krb5_authdata FAR * FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_enc_tkt_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_enc_tkt_part * ));
-void krb5_free_ticket
+               krb5_enc_tkt_part FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_ticket
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ticket * ));
-void krb5_free_tickets
+               krb5_ticket FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_tickets
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ticket ** ));
-void krb5_free_kdc_req
+               krb5_ticket FAR * FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_kdc_req
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_kdc_req * ));
-void krb5_free_kdc_rep
+               krb5_kdc_req FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_kdc_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_kdc_rep * ));
-void krb5_free_last_req
+               krb5_kdc_rep FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_last_req
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_last_req_entry ** ));
-void krb5_free_enc_kdc_rep_part
+               krb5_last_req_entry FAR * FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_enc_kdc_rep_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_enc_kdc_rep_part * ));
-void krb5_free_error
+               krb5_enc_kdc_rep_part FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_error
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_error * ));
-void krb5_free_ap_req
+               krb5_error FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_ap_req
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ap_req * ));
-void krb5_free_ap_rep
+               krb5_ap_req FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_ap_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ap_rep * ));
-void krb5_free_safe
+               krb5_ap_rep FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_safe
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_safe * ));
-void krb5_free_priv
+               krb5_safe FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_priv
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_priv * ));
-void krb5_free_priv_enc_part
+               krb5_priv FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_priv_enc_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_priv_enc_part * ));
-void krb5_free_cred
-   KRB5_PROTOTYPE((krb5_context, 
-         krb5_cred *));
+               krb5_priv_enc_part FAR * ));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_cred
+       KRB5_PROTOTYPE((krb5_context, 
+               krb5_cred FAR *));
 KRB5_DLLIMP void KRB5_CALLCONV krb5_free_creds
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_creds FAR *));
+               krb5_creds FAR *));
 KRB5_DLLIMP void KRB5_CALLCONV krb5_free_cred_contents
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_creds FAR *));
-void krb5_free_cred_enc_part
-   KRB5_PROTOTYPE((krb5_context,
-         krb5_cred_enc_part *));
-void krb5_free_checksum
+               krb5_creds FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_cred_enc_part
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_cred_enc_part FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_checksum
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_checksum *));
-void krb5_free_keyblock
+               krb5_checksum FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_keyblock
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keyblock *));
-void krb5_free_keyblock_contents
+               krb5_keyblock FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_keyblock_contents
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_keyblock *));
-void krb5_free_pa_data
+               krb5_keyblock FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_pa_data
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_pa_data **));
+               krb5_pa_data FAR * FAR *));
 KRB5_DLLIMP void KRB5_CALLCONV krb5_free_ap_rep_enc_part
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_ap_rep_enc_part FAR *));
-void krb5_free_tkt_authent
+               krb5_ap_rep_enc_part FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_tkt_authent
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_tkt_authent FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_pwd_data
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_pwd_data FAR *));
+KRB5_DLLIMP void KRB5_CALLCONV krb5_free_pwd_sequences
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_tkt_authent *));
-void krb5_free_pwd_data
-   KRB5_PROTOTYPE((krb5_context,
-         krb5_pwd_data *));
-void krb5_free_pwd_sequences
-   KRB5_PROTOTYPE((krb5_context,
-         passwd_phrase_element **));
+               passwd_phrase_element FAR * FAR *));
 
 /* From krb5/os but needed but by the outside world */
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_us_timeofday
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_int32 FAR *,
-                  krb5_int32 FAR * ));
+               krb5_int32 FAR *,
+               krb5_int32 FAR * ));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_timeofday
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_int32 FAR * ));
+               krb5_int32 FAR * ));
                 /* get all the addresses of this host */
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_os_localaddr
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_address FAR * FAR * FAR *));
+               krb5_address FAR * FAR * FAR *));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_default_realm
        KRB5_PROTOTYPE((krb5_context,
-                   char FAR * FAR * ));
+                char FAR * FAR * ));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_set_default_realm
        KRB5_PROTOTYPE((krb5_context,
-                   krb5_const char FAR * ));
+                  krb5_const char FAR * ));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_sname_to_principal
-        KRB5_PROTOTYPE((krb5_context,
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const char FAR *,
                   krb5_const char FAR *,
-                   krb5_const char FAR *,
-                   krb5_int32,
-                   krb5_principal FAR *));
+                  krb5_int32,
+                  krb5_principal FAR *));
 
-KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_set_config_files
-       KRB5_PROTOTYPE ((krb5_context, krb5_const char **));
+krb5_error_code krb5_set_config_files
+       KRB5_PROTOTYPE ((krb5_context, krb5_const char FAR * FAR *));
 
-KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_secure_config_files
+krb5_error_code krb5_secure_config_files
        KRB5_PROTOTYPE ((krb5_context));
 
 krb5_error_code krb5_send_tgs
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_const krb5_ticket_times *,
-                  krb5_const krb5_enctype *,
-                  krb5_const_principal,
-                  krb5_address * krb5_const *,
-                  krb5_authdata * krb5_const *,
-                  krb5_pa_data * krb5_const *,
-                  krb5_const krb5_data *,
-                  krb5_creds *,
-                  krb5_response * ));
-
-krb5_error_code krb5_get_in_tkt
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_address * krb5_const *,
-                  krb5_enctype *,
-                  krb5_preauthtype *,
-                  krb5_error_code ( * )(krb5_context,
+               krb5_const krb5_flags,
+               krb5_const krb5_ticket_times *,
+               krb5_const krb5_enctype *,
+               krb5_const_principal,
+               krb5_address * krb5_const *,
+               krb5_authdata * krb5_const *,
+               krb5_pa_data * krb5_const *,
+               krb5_const krb5_data *,
+               krb5_creds *,
+               krb5_response * ));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_in_tkt
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_flags,
+               krb5_address FAR * krb5_const FAR *,
+               krb5_enctype FAR *,
+               krb5_preauthtype FAR *,
+               krb5_error_code ( FAR * )(krb5_context,
                                        krb5_const krb5_enctype,
-                                        krb5_data *,
-                                        krb5_const_pointer,
-                                        krb5_keyblock **),
-                  krb5_const_pointer,
-                  krb5_error_code ( * )(krb5_context,
-                                       krb5_const krb5_keyblock *,
+                                       krb5_data FAR *,
                                        krb5_const_pointer,
-                                       krb5_kdc_rep * ),
-                  krb5_const_pointer,
-                  krb5_creds *,
-                  krb5_ccache,
-                  krb5_kdc_rep ** ));
+                                       krb5_keyblock FAR * FAR *),
+               krb5_const_pointer,
+               krb5_error_code ( FAR * )(krb5_context,
+                                       krb5_const krb5_keyblock FAR *,
+                                       krb5_const_pointer,
+                                       krb5_kdc_rep FAR * ),
+               krb5_const_pointer,
+               krb5_creds FAR *,
+               krb5_ccache,
+               krb5_kdc_rep FAR * FAR * ));
 
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_password
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_address FAR * krb5_const FAR *,
-                  krb5_enctype FAR *,
-                  krb5_preauthtype FAR *,
-                  krb5_const char FAR *,
-                  krb5_ccache,
-                  krb5_creds FAR *,
-                  krb5_kdc_rep FAR * FAR * ));
-
-krb5_error_code krb5_get_in_tkt_with_skey
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_address * krb5_const *,
-                  krb5_enctype *,
-                  krb5_preauthtype *,
-                  krb5_const krb5_keyblock *,
-                  krb5_ccache,
-                  krb5_creds *,
-                  krb5_kdc_rep ** ));
-
-krb5_error_code krb5_get_in_tkt_with_keytab
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_flags,
-                  krb5_address * krb5_const *,
-                  krb5_enctype *,
-                  krb5_preauthtype *,
-                  krb5_const krb5_keytab,
-                  krb5_ccache,
-                  krb5_creds *,
-                  krb5_kdc_rep ** ));
+               krb5_const krb5_flags,
+               krb5_address FAR * krb5_const FAR *,
+               krb5_enctype FAR *,
+               krb5_preauthtype FAR *,
+               krb5_const char FAR *,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_kdc_rep FAR * FAR * ));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_skey
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_flags,
+               krb5_address FAR * krb5_const FAR *,
+               krb5_enctype FAR *,
+               krb5_preauthtype FAR *,
+               krb5_const krb5_keyblock FAR *,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_kdc_rep FAR * FAR * ));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_keytab
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_flags,
+               krb5_address FAR * krb5_const FAR *,
+               krb5_enctype FAR *,
+               krb5_preauthtype FAR *,
+               krb5_const krb5_keytab,
+               krb5_ccache,
+               krb5_creds FAR *,
+               krb5_kdc_rep FAR * FAR * ));
 
 
 krb5_error_code krb5_decode_kdc_rep
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_data *,
-                  krb5_const krb5_keyblock *,
-                  krb5_kdc_rep ** ));
+               krb5_data *,
+               krb5_const krb5_keyblock *,
+               krb5_kdc_rep ** ));
 
-krb5_error_code krb5_rd_req
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_req
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_const krb5_data *,
-                  krb5_const_principal,
-                  krb5_keytab,
-                  krb5_flags *,
-                  krb5_ticket **));
+               krb5_auth_context FAR *,
+               krb5_const krb5_data FAR *,
+               krb5_const_principal,
+               krb5_keytab,
+               krb5_flags FAR *,
+               krb5_ticket FAR * FAR *));
 
 krb5_error_code krb5_rd_req_decoded
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_const krb5_ap_req *,
-                  krb5_const_principal,
-                  krb5_keytab,
-                  krb5_flags *,
-                  krb5_ticket **));
+               krb5_auth_context *,
+               krb5_const krb5_ap_req *,
+               krb5_const_principal,
+               krb5_keytab,
+               krb5_flags *,
+               krb5_ticket **));
 
 krb5_error_code krb5_rd_req_decoded_anyflag
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_const krb5_ap_req *,
-                  krb5_const_principal,
-                  krb5_keytab,
-                  krb5_flags *,
-                  krb5_ticket **));
-
-krb5_error_code krb5_kt_read_service_key
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_pointer,
-                  krb5_principal,
-                  krb5_kvno,
-                  krb5_enctype,
-                  krb5_keyblock **));
-krb5_error_code krb5_mk_safe
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_const krb5_data *,
-                  krb5_data *,
-                  krb5_replay_data *));
-krb5_error_code krb5_mk_priv
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_const krb5_data *,
-                  krb5_data *,
-                  krb5_replay_data *));
-krb5_error_code krb5_cc_register
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_cc_ops *,
-                  krb5_boolean ));
-
-krb5_error_code krb5_sendauth 
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_pointer,
-                  char *,
-                  krb5_principal,
-                  krb5_principal,
-                  krb5_flags,
-                  krb5_data *,
-                  krb5_creds *,
-                  krb5_ccache,
-                  krb5_error **,
-                  krb5_ap_rep_enc_part **,
-                  krb5_creds **));
+               krb5_auth_context *,
+               krb5_const krb5_ap_req *,
+               krb5_const_principal,
+               krb5_keytab,
+               krb5_flags *,
+               krb5_ticket **));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_kt_read_service_key
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_pointer,
+               krb5_principal,
+               krb5_kvno,
+               krb5_enctype,
+               krb5_keyblock FAR * FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_safe
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_const krb5_data FAR *,
+               krb5_data FAR *,
+               krb5_replay_data FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_priv
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_const krb5_data FAR *,
+               krb5_data FAR *,
+               krb5_replay_data FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_cc_register
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_cc_ops FAR *,
+               krb5_boolean ));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_sendauth 
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context FAR *,
+               krb5_pointer,
+               char FAR *,
+               krb5_principal,
+               krb5_principal,
+               krb5_flags,
+               krb5_data FAR *,
+               krb5_creds FAR *,
+               krb5_ccache,
+               krb5_error FAR * FAR *,
+               krb5_ap_rep_enc_part FAR * FAR *,
+               krb5_creds FAR * FAR *));
        
-krb5_error_code krb5_recvauth KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *,
-                  krb5_pointer,
-                  char *,
-                  krb5_principal,
-                  krb5_int32, 
-                  krb5_keytab,
-                  krb5_ticket **));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_recvauth
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context FAR *,
+               krb5_pointer,
+               char FAR *,
+               krb5_principal,
+               krb5_int32, 
+               krb5_keytab,
+               krb5_ticket FAR * FAR *));
 
 krb5_error_code krb5_walk_realm_tree
-       KRB5_PROTOTYPE((krb5_context,
-                  krb5_const krb5_data *,
-              krb5_const krb5_data *,
-              krb5_principal **,
-              int));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_const krb5_data *,
+               krb5_const krb5_data *,
+               krb5_principal **,
+               int));
 
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_ncred
-       KRB5_PROTOTYPE((krb5_context,
-                   krb5_auth_context,
-                   krb5_creds **,
-                   krb5_data **,
-                   krb5_replay_data *));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_creds FAR * FAR *,
+               krb5_data FAR * FAR *,
+               krb5_replay_data FAR *));
 
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_mk_1cred
-        KRB5_PROTOTYPE((krb5_context,
-                   krb5_auth_context,
-                   krb5_creds *,
-                   krb5_data **,
-                   krb5_replay_data *));
-
-krb5_error_code krb5_rd_cred
-        KRB5_PROTOTYPE((krb5_context,
-                   krb5_auth_context,
-                  krb5_data *,
-                   krb5_creds ***,
-                   krb5_replay_data *));
-
-krb5_error_code krb5_fwd_tgt_creds
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_creds FAR *,
+               krb5_data FAR * FAR *,
+               krb5_replay_data FAR *));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_rd_cred
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_data FAR *,
+               krb5_creds FAR * FAR * FAR *,
+               krb5_replay_data FAR *));
+
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_fwd_tgt_creds
        KRB5_PROTOTYPE((krb5_context, 
-                       krb5_auth_context,
-                       char *,
-                       krb5_principal, 
-                       krb5_principal, 
-                       krb5_ccache,
-                       int forwardable,
-                       krb5_data *));  
+               krb5_auth_context,
+               char FAR *,
+               krb5_principal, 
+               krb5_principal, 
+               krb5_ccache,
+               int forwardable,
+               krb5_data FAR *));      
 
-krb5_error_code krb5_auth_con_init
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_init
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context *));
+               krb5_auth_context FAR *));
 
-krb5_error_code krb5_auth_con_free
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_free
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context));
+               krb5_auth_context));
 
-krb5_error_code krb5_auth_con_setflags
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_setflags
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_int32));
+               krb5_auth_context,
+               krb5_int32));
 
-krb5_error_code krb5_auth_con_getflags
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getflags
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_int32 *));
+               krb5_auth_context,
+               krb5_int32 FAR *));
 
 krb5_error_code krb5_auth_con_setaddrs
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_address *,
-                  krb5_address *));
+               krb5_auth_context,
+               krb5_address *,
+               krb5_address *));
 
 krb5_error_code krb5_auth_con_getaddrs
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_address **,
-                  krb5_address **));
+               krb5_auth_context,
+               krb5_address **,
+               krb5_address **));
 
 krb5_error_code krb5_auth_con_setports
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_address *,
-                  krb5_address *));
+               krb5_auth_context,
+               krb5_address *,
+               krb5_address *));
 
-krb5_error_code krb5_auth_con_setuseruserkey
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_setuseruserkey
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_keyblock *));
+               krb5_auth_context,
+               krb5_keyblock FAR *));
 
-krb5_error_code krb5_auth_con_getkey
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getkey
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_keyblock **));
+               krb5_auth_context,
+               krb5_keyblock **));
 
-krb5_error_code krb5_auth_con_getlocalsubkey
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getlocalsubkey
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_keyblock **));
+               krb5_auth_context,
+               krb5_keyblock FAR * FAR *));
 
-krb5_error_code krb5_auth_con_set_req_cksumtype
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_set_req_cksumtype
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_cksumtype));
+               krb5_auth_context,
+               krb5_cksumtype));
 
 krb5_error_code krb5_auth_con_set_safe_cksumtype
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_cksumtype));
+               krb5_auth_context,
+               krb5_cksumtype));
 
 krb5_error_code krb5_auth_con_getcksumtype
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_cksumtype *));
+               krb5_auth_context,
+               krb5_cksumtype *));
 
-krb5_error_code krb5_auth_con_getlocalseqnumber
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getlocalseqnumber
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_int32 *));
+               krb5_auth_context,
+               krb5_int32 FAR *));
 
-krb5_error_code krb5_auth_con_getremoteseqnumber
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getremoteseqnumber
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_int32 *));
+               krb5_auth_context,
+               krb5_int32 FAR *));
 
 krb5_error_code krb5_auth_con_initivector
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context));
+               krb5_auth_context));
 
 krb5_error_code krb5_auth_con_setivector
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_pointer));
+               krb5_auth_context,
+               krb5_pointer));
 
 krb5_error_code krb5_auth_con_getivector
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_pointer *));
+               krb5_auth_context,
+               krb5_pointer *));
 
 krb5_error_code krb5_auth_con_setrcache
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_rcache));
+               krb5_auth_context,
+               krb5_rcache));
 
 krb5_error_code krb5_auth_con_getrcache
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-                  krb5_rcache *));
+               krb5_auth_context,
+               krb5_rcache *));
 
-krb5_error_code krb5_auth_con_getauthenticator
-   KRB5_PROTOTYPE((krb5_context,
-         krb5_auth_context,
-         krb5_authenticator **));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getauthenticator
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_authenticator FAR * FAR *));
 
-krb5_error_code krb5_auth_con_getremotesubkey
-   KRB5_PROTOTYPE((krb5_context,
-         krb5_auth_context,
-         krb5_keyblock **));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_getremotesubkey
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               krb5_keyblock FAR * FAR *));
 
 #define KRB5_REALM_BRANCH_CHAR '.'
 
@@ -2038,84 +1947,81 @@ krb5_error_code krb5_auth_con_getremotesubkey
 
 krb5_error_code krb5_read_password
        KRB5_PROTOTYPE((krb5_context,
-                       const char *,
-                       const char *,
-                       char *,
-                       int * ));
+               const char *,
+               const char *,
+               char *,
+               int * ));
 krb5_error_code krb5_aname_to_localname
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_const_principal,
-                  const int,
-                  char * ));
-krb5_error_code krb5_get_host_realm
+               krb5_const_principal,
+               const int,
+               char * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_get_host_realm
        KRB5_PROTOTYPE((krb5_context,
-                  const char *,
-                  char *** ));
-krb5_error_code krb5_free_host_realm
+               const char FAR *,
+               char FAR * FAR * FAR * ));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_free_host_realm
        KRB5_PROTOTYPE((krb5_context,
-                  char * const * ));
+               char FAR * const FAR * ));
 krb5_error_code krb5_get_realm_domain
        KRB5_PROTOTYPE((krb5_context,
-                  const char *,
-                  char ** ));
+               const char *,
+               char ** ));
 krb5_boolean krb5_kuserok
        KRB5_PROTOTYPE((krb5_context,
-                  krb5_principal, const char *));
+               krb5_principal, const char *));
 KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_genaddrs
-    KRB5_PROTOTYPE((krb5_context,
-                  krb5_auth_context,
-              int, int));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_auth_context,
+               int, int));
 krb5_error_code krb5_gen_portaddr
-    KRB5_PROTOTYPE((krb5_context,
-                  const krb5_address *,
-              krb5_const_pointer,
-              krb5_address **));
+       KRB5_PROTOTYPE((krb5_context,
+               const krb5_address *,
+               krb5_const_pointer,
+               krb5_address **));
 krb5_error_code krb5_make_fulladdr
-    KRB5_PROTOTYPE((krb5_context,
-              krb5_address *,
-              krb5_address *,
-              krb5_address *));
+       KRB5_PROTOTYPE((krb5_context,
+               krb5_address *,
+               krb5_address *,
+               krb5_address *));
 
 krb5_error_code krb5_os_hostaddr
-    KRB5_PROTOTYPE((krb5_context, const char *, krb5_address ***));
+       KRB5_PROTOTYPE((krb5_context, const char *, krb5_address ***));
 
 krb5_error_code krb5_set_real_time
-    KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
+       KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
 krb5_error_code krb5_set_debugging_time
-    KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
+       KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
 krb5_error_code krb5_use_natural_time
-    KRB5_PROTOTYPE((krb5_context));
+       KRB5_PROTOTYPE((krb5_context));
 krb5_error_code krb5_get_time_offsets
-    KRB5_PROTOTYPE((krb5_context, krb5_int32 *, krb5_int32 *));
+       KRB5_PROTOTYPE((krb5_context, krb5_int32 *, krb5_int32 *));
 krb5_error_code krb5_set_time_offsets
-    KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
+       KRB5_PROTOTYPE((krb5_context, krb5_int32, krb5_int32));
 
 /* str_conv.c */
-krb5_error_code
-krb5_string_to_enctype KRB5_PROTOTYPE((char *, krb5_enctype *));
-krb5_error_code
-krb5_string_to_salttype KRB5_PROTOTYPE((char *, krb5_int32 *));
-krb5_error_code
-krb5_string_to_cksumtype KRB5_PROTOTYPE((char *, krb5_cksumtype *));
-krb5_error_code
-krb5_string_to_timestamp KRB5_PROTOTYPE((char *, krb5_timestamp *));
-krb5_error_code
-krb5_string_to_deltat KRB5_PROTOTYPE((char *, krb5_deltat *));
-krb5_error_code
-krb5_enctype_to_string KRB5_PROTOTYPE((krb5_enctype, char *, size_t));
-krb5_error_code
-krb5_salttype_to_string KRB5_PROTOTYPE((krb5_int32, char *, size_t));
-krb5_error_code
-krb5_cksumtype_to_string KRB5_PROTOTYPE((krb5_cksumtype, char *, size_t));
-krb5_error_code
-krb5_timestamp_to_string KRB5_PROTOTYPE((krb5_timestamp, char *, size_t));
-krb5_error_code
-krb5_timestamp_to_sfstring KRB5_PROTOTYPE((krb5_timestamp,
-                                          char *,
-                                          size_t,
-                                          char *));
-krb5_error_code
-krb5_deltat_to_string KRB5_PROTOTYPE((krb5_deltat, char *, size_t));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_enctype
+       KRB5_PROTOTYPE((char FAR *, krb5_enctype FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_salttype
+       KRB5_PROTOTYPE((char FAR *, krb5_int32 FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_cksumtype
+       KRB5_PROTOTYPE((char FAR *, krb5_cksumtype FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_timestamp
+       KRB5_PROTOTYPE((char FAR *, krb5_timestamp FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_deltat
+       KRB5_PROTOTYPE((char FAR *, krb5_deltat FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_enctype_to_string
+       KRB5_PROTOTYPE((krb5_enctype, char FAR *, size_t));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_salttype_to_string
+       KRB5_PROTOTYPE((krb5_int32, char FAR *, size_t));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_cksumtype_to_string
+       KRB5_PROTOTYPE((krb5_cksumtype, char FAR *, size_t));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_timestamp_to_string
+       KRB5_PROTOTYPE((krb5_timestamp, char FAR *, size_t));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_timestamp_to_sfstring
+       KRB5_PROTOTYPE((krb5_timestamp, char FAR *, size_t, char FAR *));
+KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_deltat_to_string
+       KRB5_PROTOTYPE((krb5_deltat, char FAR *, size_t));
 
 
 /*
index 2c2fba906d128cbbe3c4ed7a8ce8c282a9a948ad..0ebb104f74e9cb4d620a4a46cc03daab0c812e65 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef _MSDOS
+#if defined(_MSDOS) || defined(_WIN32)
 
 #include <winsock.h>
 
@@ -16,7 +16,7 @@
 
 int win_socket_initialize();
 
-#else /* not _MSDOS */
+#else /* not _MSDOS and not _WIN32 */
 
 /* If this source file requires it, define struct sockaddr_in
    (and possibly other things related to network I/O).  */
diff --git a/src/include/win-mac.h b/src/include/win-mac.h
new file mode 100644 (file)
index 0000000..70d703b
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * type functions split out of here to make things look nicer in the
+ * various include files which need these definitions, as well as in
+ * the util/ directories.
+ */
+
+#ifndef _KRB5_WIN_MAC_H
+#define _KRB5_WIN_MAC_H
+
+#if (defined(_MSDOS) || defined(_WIN32))
+/* 
+ * Machine-type definitions: PC Clone 386 running Microloss Windows
+ */
+
+#if defined(_MSDOS)
+       /* Windows 16 specific */
+#define BITS16
+#define SIZEOF_INT      2
+#define SIZEOF_SHORT    2
+#define SIZEOF_LONG     4
+
+#ifndef KRB5_CALLCONV
+#define KRB5_CALLCONV __far __export __pascal
+#define KRB5_CALLCONV_C __far __export __cdecl
+#define KRB5_EXPORTVAR __far __export
+#define KRB5_DLLIMP
+#endif /* !KRB5_CALLCONV */
+
+#include <windows.h>
+       
+/*
+ * The following defines are needed to make <windows.h> work
+ * in stdc mode (/Za flag). Winsock.h needs <windows.h>.
+ */
+#ifndef FAR
+#define FAR     __far
+#define NEAR    __near
+#endif
+
+#ifndef _far
+#define _far    __far
+#define _near   __near
+#define _pascal __pascal
+#define _cdecl  __cdecl
+#define _huge   __huge
+#endif
+
+#else
+       /* Windows 32 specific */
+#define SIZEOF_INT      4
+#define SIZEOF_SHORT    2
+#define SIZEOF_LONG     4
+
+#include <windows.h>   /* always include this here, to get correct FAR and NEAR */
+
+#define HAS_LABS
+
+#ifndef KRB5_CALLCONV
+#ifdef _MSC_VER
+# ifdef KRB5_DLL_FILE
+# define KRB5_DLLIMP __declspec(dllexport)
+# else
+# define KRB5_DLLIMP __declspec(dllimport)
+# endif
+#else /* !_MSC_VER */
+# define KRB5_DLLIMP
+#endif
+#define KRB5_CALLCONV __stdcall
+#define KRB5_CALLCONV_C __cdecl
+#define KRB5_EXPORTVAR
+#endif /* !KRB5_CALLCONV */
+
+#endif /* _MSDOS */
+
+#ifndef _SIZE_T_DEFINED
+typedef unsigned int size_t;
+#define _SIZE_T_DEFINED
+#endif /* !_SIZE_T_DEFINED */
+#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__ */
+
+#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 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
+#define HAS_STDLIB_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
+/* #define PROVIDE_DES3_CBC_SHA */
+/* #define PROVIDE_DES3_CBC_RAW */
+/* #define PROVIDE_NIST_SHA */
+
+/* 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>
+#define THREEPARAMOPEN(x,y,z) open(x,y,z)
+#ifndef _WIN32
+#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
+
+/*
+ * Functions with slightly different names on the PC
+ */
+#define strcasecmp   stricmp
+#define strncasecmp  strnicmp
+
+#endif /* _MSDOS || _WIN32 */
+
+#ifndef KRB5_CALLCONV
+#define KRB5_CALLCONV
+#define KRB5_CALLCONV_C
+#define KRB5_DLLIMP
+#endif
+#ifndef FAR
+#define FAR
+#endif
+#ifndef NEAR
+#define NEAR
+#endif
+
+#ifdef _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>
+
+#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 */
+
+#endif /* _KRB5_WIN_MAC_H */