[2250] in Kerberos-V5-bugs
K5b7 - Windows
daemon@ATHENA.MIT.EDU (Doug Engert)
Fri Sep 20 20:58:34 1996
Date: Fri, 20 Sep 1996 15:20:51 -0500
From: Doug Engert <DEEngert@anl.gov>
To: krb5-bugs@MIT.EDU
I have the K5 beta 7 built and running under Windows in 16 bit mode.
This runs under Windows 95 too. I am sending in the following changes
which are based on the changes I sent in on January 10, "Windows
and Kerberos snapshot of 120195"; July 8, "K5b6 - Windows 3.1 and
kpasswd"; July 8, "K5b6 and Windows FAR pointers"; and Sept 13 to Ted
directly.
I had to export a number of additional routines which are used by
kcmd.c with rlogin processing, and which also allow access to the
encryption routines within the 16 bit DLL. These are needed if you
want an rlogin terminal emulator with encryption and forwarded
tickets. I have one, and also have WinQVT rlogin working but without
encryption or forwarding yet.
Most of these changes were to export additional entry points in the
DLL so it could be used with the rlogin protocol including
encryption and forwarding.
KRB5_FWD_TGT_CREDS
KRB5_SENDAUTH
KRB5_AUTH_CON_GENADDRS
KRB5_AUTH_CON_SETFLAGS
KRB5_AUTH_CON_INIT
KRB5_DLL_USE_ENCTYPE
KRB5_DLL_PROCESS_KEY
KRB5_DLL_ENCRYPT
KRB5_DLL_DECRYPT
KRB5_DLL_MALLOC
KRB5_DLL_XFREE
The mk_cred.c change fixes a problem with passing a 16 bit int rather
then a krb5_int32.
The adm_conn.c fixes the CNS.EXE so it can change passwords.
--
Douglas E. Engert <DEEngert@anl.gov>
Argonne National Laboratory
9700 South Cass Avenue
Argonne, Illinois 60439
(630) 252-5444 <New Area Code 8/3/96>
PGP Key fingerprint = 20 2B 0C 78 43 8A 9C A6 29 F7 A3 6D 5E 30 A6 7F
*** ./include/krb5/,adm_proto.h Tue Jun 11 23:42:34 1996
--- ./include/krb5/adm_proto.h Wed Sep 18 11:28:05 1996
***************
*** 48,64 ****
/* adm_conn.c */
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_adm_connect
KRB5_PROTOTYPE((krb5_context,
! char *,
! char *,
! char *,
! int *,
! krb5_auth_context *,
! krb5_ccache *,
! char *,
krb5_timestamp));
KRB5_DLLIMP void KRB5_CALLCONV krb5_adm_disconnect
KRB5_PROTOTYPE((krb5_context,
! int *,
krb5_auth_context,
krb5_ccache));
--- 48,64 ----
/* adm_conn.c */
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_adm_connect
KRB5_PROTOTYPE((krb5_context,
! char FAR *,
! char FAR *,
! char FAR *,
! int FAR *,
! krb5_auth_context FAR *,
! krb5_ccache FAR *,
! char FAR *,
krb5_timestamp));
KRB5_DLLIMP void KRB5_CALLCONV krb5_adm_disconnect
KRB5_PROTOTYPE((krb5_context,
! int FAR *,
krb5_auth_context,
krb5_ccache));
***************
*** 100,113 ****
KRB5_DLLIMP void KRB5_CALLCONV krb5_free_adm_data
KRB5_PROTOTYPE((krb5_context,
krb5_int32,
! krb5_data *));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_send_adm_cmd
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
krb5_auth_context,
krb5_int32,
! krb5_data *));
krb5_error_code krb5_send_adm_reply
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
--- 100,113 ----
KRB5_DLLIMP void KRB5_CALLCONV krb5_free_adm_data
KRB5_PROTOTYPE((krb5_context,
krb5_int32,
! krb5_data FAR *));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_send_adm_cmd
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
krb5_auth_context,
krb5_int32,
! krb5_data FAR *));
krb5_error_code krb5_send_adm_reply
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
***************
*** 125,133 ****
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
krb5_auth_context,
! krb5_int32 *,
! krb5_int32 *,
! krb5_data **));
/* logger.c */
krb5_error_code krb5_klog_init
--- 125,133 ----
KRB5_PROTOTYPE((krb5_context,
krb5_pointer,
krb5_auth_context,
! krb5_int32 FAR *,
! krb5_int32 FAR *,
! krb5_data FAR * FAR *));
/* logger.c */
krb5_error_code krb5_klog_init
*** ./include/,krb5.hin Fri Sep 6 17:20:49 1996
--- ./include/krb5.hin Thu Sep 19 09:49:57 1996
***************
*** 1724,1730 ****
krb5_principal FAR *));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_set_config_files
! KRB5_PROTOTYPE ((krb5_context, krb5_const char **));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_secure_config_files
KRB5_PROTOTYPE ((krb5_context));
--- 1724,1730 ----
krb5_principal FAR *));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV 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_PROTOTYPE ((krb5_context));
***************
*** 1854,1873 ****
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_error_code krb5_recvauth KRB5_PROTOTYPE((krb5_context,
krb5_auth_context *,
--- 1854,1873 ----
krb5_cc_ops *,
krb5_boolean ));
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_sendauth
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context *,
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 *,
***************
*** 1906,1930 ****
krb5_creds ***,
krb5_replay_data *));
! krb5_error_code krb5_fwd_tgt_creds
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context,
! char *,
krb5_principal,
krb5_principal,
krb5_ccache,
int forwardable,
! krb5_data *));
! krb5_error_code krb5_auth_con_init
KRB5_PROTOTYPE((krb5_context,
! krb5_auth_context *));
krb5_error_code krb5_auth_con_free
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context));
! krb5_error_code krb5_auth_con_setflags
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context,
krb5_int32));
--- 1906,1930 ----
krb5_creds ***,
krb5_replay_data *));
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_fwd_tgt_creds
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context,
! char FAR *,
krb5_principal,
krb5_principal,
krb5_ccache,
int forwardable,
! krb5_data FAR *));
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_init
KRB5_PROTOTYPE((krb5_context,
! krb5_auth_context FAR *));
krb5_error_code krb5_auth_con_free
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context));
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_auth_con_setflags
KRB5_PROTOTYPE((krb5_context,
krb5_auth_context,
krb5_int32));
***************
*** 2142,2146 ****
--- 2142,2176 ----
/* flags for recvauth */
#define KRB5_RECVAUTH_SKIP_VERSION 0x0001
#define KRB5_RECVAUTH_BADAUTHVERS 0x0002
+
+ #if (defined(_MSDOS) || defined(_WIN32))
+ /*
+ * begin "win_glue.c"
+ */
+
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_dll_use_enctype
+ KRB5_PROTOTYPE((krb5_context, krb5_encrypt_block FAR *, krb5_enctype));
+
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_dll_process_key
+ KRB5_PROTOTYPE((krb5_context, krb5_encrypt_block FAR *, krb5_keyblock FAR *));
+
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_dll_encrypt
+ KRB5_PROTOTYPE((krb5_context, krb5_pointer, krb5_pointer, krb5_const,
+ krb5_encrypt_block FAR *, krb5_pointer));
+
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_dll_decrypt
+ KRB5_PROTOTYPE((krb5_context, krb5_pointer, krb5_pointer, krb5_const,
+ krb5_encrypt_block FAR *, krb5_pointer));
+
+ KRB5_DLLIMP void FAR * KRB5_CALLCONV krb5_dll_malloc
+ KRB5_PROTOTYPE((int));
+
+ KRB5_DLLIMP void INTERFACE krb5_dll_xfree
+ KRB5_PROTOTYPE((void FAR *));
+
+ /*
+ * end stuff from "win_glue.c"
+ */
+ #endif
#endif /* KRB5_GENERAL__ */
*** ./lib/kadm/,adm_conn.c Fri Sep 6 17:22:53 1996
--- ./lib/kadm/adm_conn.c Thu Sep 19 08:37:54 1996
***************
*** 145,152 ****
* We only need to resolve the credentials cache if one hasn't
* been supplied to us.
*/
! if (!(*ccache) && (kret = krb5_cc_resolve(kcontext, new_cache, ccache)))
! goto cleanup;
/* XXX assumes a file ccache */
if ((kret = krb5_cc_get_principal(kcontext, *ccache, &tprinc)) ==
--- 145,157 ----
* We only need to resolve the credentials cache if one hasn't
* been supplied to us.
*/
! if (!(*ccache)) {
! if ((kret = krb5_cc_resolve(kcontext, new_cache, ccache)))
! goto cleanup;
! if ((kret = krb5_cc_initialize(kcontext, *ccache, *client)))
! goto cleanup;
! }
! else
/* XXX assumes a file ccache */
if ((kret = krb5_cc_get_principal(kcontext, *ccache, &tprinc)) ==
***************
*** 602,618 ****
* free auth_context
* close socket.
*/
! krb5_error_code INTERFACE
krb5_adm_connect(kcontext, user, prompt, opassword, sockp, ctxp,
ccachep, ccname, tlife)
krb5_context kcontext; /* Context handle (In ) */
! char *user; /* User specified (In ) */
! char *prompt; /* Old password prompt (In ) */
! char *opassword; /* Old Password (I/O) */
! int *sockp; /* Socket for conn. (Out) */
! krb5_auth_context *ctxp; /* Auth context (Out) */
! krb5_ccache *ccachep; /* Credentials cache (I/O) */
! char *ccname; /* Cred cache name (In ) */
krb5_timestamp tlife; /* Ticket lifetime (In ) */
{
krb5_error_code kret;
--- 607,623 ----
* free auth_context
* close socket.
*/
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_adm_connect(kcontext, user, prompt, opassword, sockp, ctxp,
ccachep, ccname, tlife)
krb5_context kcontext; /* Context handle (In ) */
! char FAR *user; /* User specified (In ) */
! char FAR *prompt; /* Old password prompt (In ) */
! char FAR *opassword; /* Old Password (I/O) */
! int FAR *sockp; /* Socket for conn. (Out) */
! krb5_auth_context FAR *ctxp; /* Auth context (Out) */
! krb5_ccache FAR *ccachep; /* Credentials cache (I/O) */
! char FAR *ccname; /* Cred cache name (In ) */
krb5_timestamp tlife; /* Ticket lifetime (In ) */
{
krb5_error_code kret;
***************
*** 745,754 ****
* If ccache is supplied, then it is destroyed. Otherwise, the ccache is
* the caller's responsibility to close.
*/
! void INTERFACE
krb5_adm_disconnect(kcontext, socketp, auth_context, ccache)
krb5_context kcontext;
! int *socketp;
krb5_auth_context auth_context;
krb5_ccache ccache;
{
--- 750,759 ----
* If ccache is supplied, then it is destroyed. Otherwise, the ccache is
* the caller's responsibility to close.
*/
! KRB5_DLLIMP void KRB5_CALLCONV
krb5_adm_disconnect(kcontext, socketp, auth_context, ccache)
krb5_context kcontext;
! int FAR *socketp;
krb5_auth_context auth_context;
krb5_ccache ccache;
{
*** ./lib/kadm/,adm_rw.c Fri Sep 6 17:22:54 1996
--- ./lib/kadm/adm_rw.c Wed Sep 18 13:07:00 1996
***************
*** 72,78 ****
krb5_free_adm_data(kcontext, ncomp, datap)
krb5_context kcontext;
krb5_int32 ncomp;
! krb5_data *datap;
{
int i;
--- 72,78 ----
krb5_free_adm_data(kcontext, ncomp, datap)
krb5_context kcontext;
krb5_int32 ncomp;
! krb5_data FAR *datap;
{
int i;
***************
*** 102,108 ****
krb5_pointer sock; /* Socket to write to (In ) */
krb5_auth_context ctx; /* Auth context (In ) */
krb5_int32 nargs; /* Number of arguments (In ) */
! krb5_data *arglist; /* Components to write (In ) */
{
int writebufsize;
int i;
--- 102,108 ----
krb5_pointer sock; /* Socket to write to (In ) */
krb5_auth_context ctx; /* Auth context (In ) */
krb5_int32 nargs; /* Number of arguments (In ) */
! krb5_data FAR *arglist; /* Components to write (In ) */
{
int writebufsize;
int i;
***************
*** 417,425 ****
krb5_context kcontext; /* Context handle (In ) */
krb5_pointer sock; /* Socket to read from (In ) */
krb5_auth_context ctx; /* Auth context (In ) */
! krb5_int32 *cmd_stat; /* Command status (Out) */
! krb5_int32 *ncomps; /* # of reply components(Out) */
! krb5_data **complist; /* List of components (Out) */
{
krb5_data read_data;
krb5_error_code ret;
--- 417,425 ----
krb5_context kcontext; /* Context handle (In ) */
krb5_pointer sock; /* Socket to read from (In ) */
krb5_auth_context ctx; /* Auth context (In ) */
! krb5_int32 FAR *cmd_stat; /* Command status (Out) */
! krb5_int32 FAR *ncomps; /* # of reply components(Out) */
! krb5_data FAR * FAR *complist; /* List of components (Out) */
{
krb5_data read_data;
krb5_error_code ret;
*** ./lib/krb5/krb/,fwd_tgt.c Sun Apr 28 09:22:54 1996
--- ./lib/krb5/krb/fwd_tgt.c Wed Sep 18 13:09:33 1996
***************
*** 29,45 ****
#define flags2options(flags) (flags & KDC_TKT_COMMON_MASK)
/* Get a TGT for use at the remote host */
! krb5_error_code
krb5_fwd_tgt_creds(context, auth_context, rhost, client, server, cc,
forwardable, outbuf)
krb5_context context;
krb5_auth_context auth_context;
! char *rhost;
krb5_principal client;
krb5_principal server;
krb5_ccache cc;
int forwardable; /* Should forwarded TGT also be forwardable? */
! krb5_data *outbuf;
{
krb5_replay_data replaydata;
krb5_data * scratch = 0;
--- 29,45 ----
#define flags2options(flags) (flags & KDC_TKT_COMMON_MASK)
/* Get a TGT for use at the remote host */
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_fwd_tgt_creds(context, auth_context, rhost, client, server, cc,
forwardable, outbuf)
krb5_context context;
krb5_auth_context auth_context;
! char FAR *rhost;
krb5_principal client;
krb5_principal server;
krb5_ccache cc;
int forwardable; /* Should forwarded TGT also be forwardable? */
! krb5_data FAR *outbuf;
{
krb5_replay_data replaydata;
krb5_data * scratch = 0;
*** ./lib/krb5/krb/,sendauth.c Wed Jun 12 00:11:08 1996
--- ./lib/krb5/krb/sendauth.c Wed Sep 18 13:12:05 1996
***************
*** 35,41 ****
static char *sendauth_version = "KRB5_SENDAUTH_V1.0";
! krb5_error_code
krb5_sendauth(context, auth_context,
/* IN */
fd, appl_version, client, server, ap_req_options, in_data,
--- 35,41 ----
static char *sendauth_version = "KRB5_SENDAUTH_V1.0";
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_sendauth(context, auth_context,
/* IN */
fd, appl_version, client, server, ap_req_options, in_data,
***************
*** 47,62 ****
krb5_context context;
krb5_auth_context * auth_context;
krb5_pointer fd;
! char * appl_version;
krb5_principal client;
krb5_principal server;
krb5_flags ap_req_options;
! krb5_data * in_data;
! krb5_creds * in_creds;
krb5_ccache ccache;
! krb5_error ** error;
! krb5_ap_rep_enc_part ** rep_result;
! krb5_creds ** out_creds;
{
krb5_octet result;
krb5_creds creds;
--- 47,62 ----
krb5_context context;
krb5_auth_context * auth_context;
krb5_pointer fd;
! char FAR * appl_version;
krb5_principal client;
krb5_principal server;
krb5_flags ap_req_options;
! krb5_data FAR * in_data;
! krb5_creds FAR * in_creds;
krb5_ccache ccache;
! krb5_error FAR * FAR * error;
! krb5_ap_rep_enc_part FAR * FAR * rep_result;
! krb5_creds FAR * FAR * out_creds;
{
krb5_octet result;
krb5_creds creds;
*** ./lib/krb5/krb/,auth_con.c Tue May 14 03:41:22 1996
--- ./lib/krb5/krb/auth_con.c Thu Sep 19 09:50:08 1996
***************
*** 26,35 ****
return 0;
}
! krb5_error_code
krb5_auth_con_init(context, auth_context)
krb5_context context;
! krb5_auth_context * auth_context;
{
*auth_context =
(krb5_auth_context)malloc(sizeof(struct _krb5_auth_context));
--- 26,35 ----
return 0;
}
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_auth_con_init(context, auth_context)
krb5_context context;
! krb5_auth_context FAR * auth_context;
{
*auth_context =
(krb5_auth_context)malloc(sizeof(struct _krb5_auth_context));
***************
*** 48,54 ****
return 0;
}
! krb5_error_code
krb5_auth_con_free(context, auth_context)
krb5_context context;
krb5_auth_context auth_context;
--- 48,54 ----
return 0;
}
! krb5_error_code
krb5_auth_con_free(context, auth_context)
krb5_context context;
krb5_auth_context auth_context;
***************
*** 307,313 ****
return 0;
}
! krb5_error_code
krb5_auth_con_setflags(context, auth_context, flags)
krb5_context context;
krb5_auth_context auth_context;
--- 307,313 ----
return 0;
}
! KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_auth_con_setflags(context, auth_context, flags)
krb5_context context;
krb5_auth_context auth_context;
*** ./lib/krb5/krb/,mk_cred.c Wed Mar 20 22:20:12 1996
--- ./lib/krb5/krb/mk_cred.c Wed Sep 18 13:19:05 1996
***************
*** 299,305 ****
}
/* Setup creds structure */
! if ((retval = krb5_mk_ncred_basic(context, ppcreds, ncred, keyblock,
&replaydata, plocal_fulladdr,
premote_fulladdr, pcred))) {
goto error;
--- 299,305 ----
}
/* Setup creds structure */
! if ((retval = krb5_mk_ncred_basic(context, ppcreds, (krb5_int32)ncred, keyblock,
&replaydata, plocal_fulladdr,
premote_fulladdr, pcred))) {
goto error;
*** ./lib/,win_glue.c Fri Jul 12 19:33:19 1996
--- ./lib/win_glue.c Wed Sep 18 13:33:03 1996
***************
*** 200,202 ****
--- 200,272 ----
WSACleanup();
return 1;
}
+
+ /* There are needed to get at the encryption routines, which
+ * are accessed via loading the entry point from a table. Since
+ * these routines are in the DLL, and are not exported, and are NEAR
+ * pointers, we need to get to the DLL, then we can load and call them.
+ *
+ * The alloc and free routines were also added here, since the DLL
+ * has its own heap. Tring to free storage in the application which
+ * is in the DLL's heap, causes problems. These allow the application
+ * to get storage in the DLL's heap, and to free it. The kcmd routine
+ * needs this, and the outbuf from get_for_creds also has the
+ * problem since the application needs to free this area.
+ *
+ * Doug Engert ANL 1/96
+ */
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+ krb5_dll_use_enctype(context, eblock, enctype)
+ krb5_context context;
+ krb5_encrypt_block FAR * eblock;
+ krb5_enctype enctype;
+ {
+ krb5_use_enctype(context, eblock, enctype);
+ return 0;
+ }
+
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+ krb5_dll_process_key(context, eblock, keyblock)
+ krb5_context context;
+ krb5_encrypt_block FAR * eblock;
+ krb5_keyblock FAR * keyblock;
+ {
+ return krb5_process_key(context, eblock, keyblock);
+ }
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+ krb5_dll_encrypt(context, inptr, outptr, size, eblock, ivec)
+ krb5_context context;
+ krb5_pointer inptr;
+ krb5_pointer outptr;
+ krb5_const size;
+ krb5_encrypt_block FAR * eblock;
+ krb5_pointer ivec;
+ {
+ return krb5_encrypt(context, inptr, outptr, size, eblock, ivec);
+ }
+ KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
+ krb5_dll_decrypt(context, inptr, outptr, size, eblock, ivec)
+ krb5_context context;
+ krb5_pointer inptr;
+ krb5_pointer outptr;
+ krb5_const size;
+ krb5_encrypt_block FAR * eblock;
+ krb5_pointer ivec;
+ {
+ return krb5_decrypt(context, inptr, outptr, size, eblock, ivec);
+ }
+
+ KRB5_DLLIMP void FAR * KRB5_CALLCONV
+ krb5_dll_malloc(size)
+ int size;
+ {
+ return (void FAR *)malloc(size);
+ }
+
+ KRB5_DLLIMP void KRB5_CALLCONV
+ krb5_dll_xfree(val)
+ void FAR * val;
+ {
+ krb5_xfree(val);
+ }
+
*** ./lib/,libkrb5.def Tue May 30 19:39:52 1995
--- ./lib/libkrb5.def Wed Sep 18 13:35:41 1996
***************
*** 63,65 ****
--- 63,77 ----
;Com_err routines
_com_err
ERROR_MESSAGE
+ ;DEE added
+ KRB5_FWD_TGT_CREDS
+ KRB5_SENDAUTH
+ KRB5_AUTH_CON_GENADDRS
+ KRB5_AUTH_CON_SETFLAGS
+ KRB5_AUTH_CON_INIT
+ KRB5_DLL_USE_ENCTYPE
+ KRB5_DLL_PROCESS_KEY
+ KRB5_DLL_ENCRYPT
+ KRB5_DLL_DECRYPT
+ KRB5_DLL_MALLOC
+ KRB5_DLL_XFREE
--------------------------------------------------------