#ifndef __LOADFUNCS_KRB_H__
#define __LOADFUNCS_KRB_H__

#include "loadfuncs.h"
#include <krb.h>

#define KRB4_DLL      "krbv4w32.dll"

#define krb_err_text(status) pget_krb_err_txt_entry(status)
#define CALLCONV_C

TYPEDEF_FUNC(
    char *,
    CALLCONV_C,
    tkt_string,
    ()
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    gettimeofday,
    (struct timeval *tv, struct timezone *tz)
    );
TYPEDEF_FUNC(
    int,
    PASCAL,
    krb_sendauth,
    (long, int, KTEXT_FP, char *, char *, char *,
     unsigned long, MSG_DAT *, CREDENTIALS *, 
     Key_schedule *, struct sockaddr_in *, 
     struct sockaddr_in FAR *, char *)
    );
TYPEDEF_FUNC(
    int,
    PASCAL,
    krb_mk_req,
    (KTEXT, char *, char *, char *, long)
    );
TYPEDEF_FUNC(
    char *,
    PASCAL,
    krb_getrealm,
    (char *host)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_tf_fullname,
    (char FAR *, char FAR *, char FAR *, char FAR *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_tf_realm,
    (char FAR *,char FAR *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    tf_init,
    (char FAR*,int)
    );
TYPEDEF_FUNC(
    long,
    CALLCONV_C,
    LocalHostAddr,
    ()
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    tf_get_pname,
    (char FAR*)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    tf_get_pinst,
    (char FAR*)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    tf_get_cred,
    (CREDENTIALS FAR*)
    );
TYPEDEF_FUNC(
    void,
    CALLCONV_C,
    tf_close,
    (void)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    tf_save_cred,
    (char FAR*,char FAR*,char FAR*,C_Block,int,int,KTEXT,long)
    );
TYPEDEF_FUNC(
    BOOL,
    CALLCONV_C,
    k_isinst,
    (char FAR *s)
    );
TYPEDEF_FUNC(
    BOOL,
    CALLCONV_C,
    k_isrealm,
    (char FAR *s)
    );
TYPEDEF_FUNC(
    BOOL,
    CALLCONV_C,
    k_isname,
    (char FAR *s)
    );

TYPEDEF_FUNC(
    char **,
    CALLCONV_C,
    get_krb_err_txt,
    (void)
    );

/* Warning, unique to Windows! */
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    set_krb_debug,
    (int)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    set_krb_ap_req_debug,
    (int)
    );
TYPEDEF_FUNC(
    char *,
    PASCAL,
    get_krb_err_txt_entry,
    (int i)
    );
TYPEDEF_FUNC(
    char *,
    CALLCONV_C,
    krb_err_func,
    (int offset, long code)
    );
TYPEDEF_FUNC(
    int,
    PASCAL,
    k_decomp_ticket,
    (KTEXT, unsigned char *, char *, char *, char *, 
     unsigned long *, C_Block, int *, unsigned long *, 
     char *, char *, C_Block, Key_schedule)
    );
TYPEDEF_FUNC(
    int,
    PASCAL,
    krb_mk_req,
    (KTEXT,char *,char *,char *,long)
    );
TYPEDEF_FUNC(
    char *,
    PASCAL,
    krb_getrealm,
    (char *host)
    );
TYPEDEF_FUNC(
    char *,
    PASCAL,
    krb_realmofhost,
    (char *host)
    );
TYPEDEF_FUNC(
    char *,
    CALLCONV_C,
    krb_get_phost,
    (char *host)
    );

TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    kname_parse,
    (char *, char *, char *, char *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_pw_in_tkt,
    (char *, char *, char *, char *, char *, int, char *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    dest_tkt,
    (void)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_lrealm,
    (char *, int)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_check_serv,
    (char*)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_cred,
    (char *, char *, char *, CREDENTIALS *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    send_to_kdc,
    (KTEXT, KTEXT, char *)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    create_ciph,
    (KTEXT, C_Block, char *, char *, char *, unsigned long, int,
     KTEXT, unsigned long, C_Block *)
    );
TYPEDEF_FUNC(
    char *,
    CALLCONV_C,
    krb_get_krbconf2,
    (char *, size_t *)
    );
TYPEDEF_FUNC(
    char *,
    CALLCONV_C,
    krb_get_krbrealm2,
    (char *, size_t *)
    );

/* NOT IN krb.h HEADER: */

TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    k_gethostname,
    (char FAR*, int)
    );
TYPEDEF_FUNC(
    int,
    CALLCONV_C,
    krb_get_krbhst,
    (char *, char *, int)
    );
TYPEDEF_FUNC(
    void,
    CALLCONV_C,
    krb_set_tkt_string,
    (char *)
    );

/* Evil incarnate... */

TYPEDEF_FUNC(
    long,
    CALLCONV_C,
    kadm_change_your_password,
    (LPSTR principal, LPSTR old_password,
     LPSTR new_password, HANDLE FAR * hInfo_desc)
    );
TYPEDEF_FUNC(
    void,
    CALLCONV_C,
    initialize_krb_error_func,
    (void* func, HANDLE *__et_list)
    );
TYPEDEF_FUNC(
    void,
    CALLCONV_C,
    initialize_kadm_error_table,
    (HANDLE *__et_list)
    );
TYPEDEF_FUNC(
    LONG,
    CALLCONV_C,
    lsh_LoadKrb4LeashErrorTables,
    (HMODULE hLeashDll, INT useCallBackFunction)
    );

#endif /* __LOADFUNCS_KRB_H__ */
