]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Load additional krb5 and come_err funcs
authorKevin Wasserman <kevin.wasserman@painless-security.com>
Tue, 17 Jul 2012 18:25:39 +0000 (14:25 -0400)
committerTom Yu <tlyu@mit.edu>
Mon, 27 Aug 2012 23:27:28 +0000 (19:27 -0400)
Required for multiple identity management and for migration of code from
leashdll to leash proper.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
(cherry picked from commit fd2d1932d262e6e342f795f9aaab2da62585fae2)

ticket: 7238
status: resolved

src/windows/include/loadfuncs-krb5.h
src/windows/leash/Leash.cpp
src/windows/leash/Leash.h
src/windows/leash/Lglobals.h
src/windows/leashdll/leashdll.c
src/windows/leashdll/leashdll.h

index bff0ceae5604bba23f64f219b16e403e508b407f..b8e6992e31fd6e1036f6290be49b4c5f35761720 100644 (file)
@@ -1334,6 +1334,13 @@ TYPEDEF_FUNC(
     (krb5_enctype, char *, size_t)
     );
 
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_enctype_to_name,
+    (krb5_enctype, krb5_boolean, char *, size_t)
+    );
+
 TYPEDEF_FUNC(
     krb5_error_code,
     KRB5_CALLCONV,
@@ -1718,6 +1725,13 @@ TYPEDEF_FUNC(
     (krb5_context context, krb5_ccache cache)
     );
 
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cc_get_full_name,
+    (krb5_context context, krb5_ccache cache, char **)
+    );
+
 TYPEDEF_FUNC(
     char *,
     KRB5_CALLCONV,
@@ -1807,4 +1821,68 @@ TYPEDEF_FUNC(
     krb5_is_config_principal,
     (krb5_context, krb5_const_principal)
     );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cccol_cursor_new,
+    (krb5_context, krb5_cccol_cursor *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cccol_cursor_next,
+    (krb5_context, krb5_cccol_cursor cursor, krb5_ccache *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cccol_cursor_free,
+    (krb5_context, krb5_cccol_cursor *cursor)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cc_cache_match,
+    (krb5_context, krb5_principal, krb5_ccache *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cc_new_unique,
+    (krb5_context, const char *, const char *, krb5_ccache *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_boolean,
+    KRB5_CALLCONV,
+    krb5_cc_support_switch,
+    (krb5_context, const char *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5_cc_switch,
+    (krb5_context, krb5_ccache)
+    );
+
+TYPEDEF_FUNC(
+    void,
+    KRB5_CALLCONV,
+    krb5_free_string,
+    (krb5_context, char *)
+    );
+
+TYPEDEF_FUNC(
+    krb5_error_code,
+    KRB5_CALLCONV,
+    krb5int_cc_user_set_default_name,
+    (krb5_context context, const char *)
+    );
+
 #endif /* __LOADFUNCS_KRB5_H__ */
index 0c68faf5eda0d71867169437c602a23d295be651..a4469972eaf6ddc8cd17b8379d9a1fe8633b5eb2 100644 (file)
@@ -55,6 +55,7 @@ HANDLE m_tgsReqMutex = 0;
 
 HWND CLeashApp::m_hProgram = 0;
 HINSTANCE CLeashApp::m_hLeashDLL = 0;
+HINSTANCE CLeashApp::m_hComErr = 0;
 ////@#+Remove
 #ifndef NO_KRB4
 HINSTANCE CLeashApp::m_hKrb4DLL = 0;
@@ -625,6 +626,12 @@ FUNC_INFO krb4_fi[] = {
 };
 #endif
 
+// com_err funcitons
+DECL_FUNC_PTR(error_message);
+FUNC_INFO ce_fi[] =  {
+    MAKE_FUNC_INFO(error_message),
+    END_FUNC_INFO
+};
 
 // psapi functions
 DECL_FUNC_PTR(GetModuleFileNameExA);
@@ -669,6 +676,27 @@ DECL_FUNC_PTR(krb5_free_cred_contents);
 DECL_FUNC_PTR(krb5_cc_resolve);
 DECL_FUNC_PTR(krb5_unparse_name);
 DECL_FUNC_PTR(krb5_free_unparsed_name);
+DECL_FUNC_PTR(krb5_cc_destroy);
+DECL_FUNC_PTR(krb5_cccol_cursor_new);
+DECL_FUNC_PTR(krb5_cccol_cursor_free);
+DECL_FUNC_PTR(krb5_cccol_cursor_next);
+DECL_FUNC_PTR(krb5_cc_start_seq_get);
+DECL_FUNC_PTR(krb5_cc_next_cred);
+DECL_FUNC_PTR(krb5_cc_end_seq_get);
+DECL_FUNC_PTR(krb5_cc_get_name);
+DECL_FUNC_PTR(krb5_cc_set_flags);
+DECL_FUNC_PTR(krb5_is_config_principal);
+DECL_FUNC_PTR(krb5_free_ticket);
+DECL_FUNC_PTR(krb5_decode_ticket);
+DECL_FUNC_PTR(krb5_cc_switch);
+DECL_FUNC_PTR(krb5_build_principal_ext);
+DECL_FUNC_PTR(krb5_get_renewed_creds);
+DECL_FUNC_PTR(krb5_cc_initialize);
+DECL_FUNC_PTR(krb5_cc_store_cred);
+DECL_FUNC_PTR(krb5_cc_get_full_name);
+DECL_FUNC_PTR(krb5_enctype_to_name);
+DECL_FUNC_PTR(krb5_cc_get_type);
+DECL_FUNC_PTR(krb5int_cc_user_set_default_name);
 
 FUNC_INFO krb5_fi[] = {
     MAKE_FUNC_INFO(krb5_cc_default_name),
@@ -691,6 +719,27 @@ FUNC_INFO krb5_fi[] = {
     MAKE_FUNC_INFO(krb5_cc_resolve),
     MAKE_FUNC_INFO(krb5_unparse_name),
     MAKE_FUNC_INFO(krb5_free_unparsed_name),
+    MAKE_FUNC_INFO(krb5_cc_destroy),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_new),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_next),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_free),
+    MAKE_FUNC_INFO(krb5_cc_start_seq_get),
+    MAKE_FUNC_INFO(krb5_cc_next_cred),
+    MAKE_FUNC_INFO(krb5_cc_end_seq_get),
+    MAKE_FUNC_INFO(krb5_cc_get_name),
+    MAKE_FUNC_INFO(krb5_cc_set_flags),
+    MAKE_FUNC_INFO(krb5_is_config_principal),
+    MAKE_FUNC_INFO(krb5_free_ticket),
+    MAKE_FUNC_INFO(krb5_decode_ticket),
+    MAKE_FUNC_INFO(krb5_cc_switch),
+    MAKE_FUNC_INFO(krb5_build_principal_ext),
+    MAKE_FUNC_INFO(krb5_get_renewed_creds),
+    MAKE_FUNC_INFO(krb5_cc_initialize),
+    MAKE_FUNC_INFO(krb5_cc_store_cred),
+    MAKE_FUNC_INFO(krb5_cc_get_full_name),
+    MAKE_FUNC_INFO(krb5_enctype_to_name),
+    MAKE_FUNC_INFO(krb5_cc_get_type),
+    MAKE_FUNC_INFO(krb5int_cc_user_set_default_name),
     END_FUNC_INFO
 };
 
@@ -738,6 +787,7 @@ BOOL CLeashApp::InitDLLs()
 #endif
     m_hKrb5DLL = AfxLoadLibrary(KERB5DLL);
     m_hKrb5ProfileDLL = AfxLoadLibrary(KERB5_PPROFILE_DLL);
+    m_hComErr - AfxLoadLibrary(COMERR_DLL);
 
 #ifndef NO_AFS
     afscompat_init();
@@ -767,6 +817,12 @@ BOOL CLeashApp::InitDLLs()
         return FALSE;
     }
 
+    if (!LoadFuncs(COMERR_DLL, ce_fi, &m_hComErr, 0, 0, 1, 0)) {
+        MessageBox(hwnd,
+                   "Functions within " COMERR_DLL "didn't load properly!",
+                   "Error", MB_OK);
+        return FALSE;
+    }
 ////
 #ifndef NO_KRB4
     if (m_hKrb4DLL)
index 557e40f2bc72450e9805e5f9a2b2bf0ffec8df60..43c7da78a572cbc25265971be3cfae9d6e61a444 100644 (file)
@@ -106,6 +106,7 @@ private:
 public:
        static HWND                     m_hProgram;
        static HINSTANCE        m_hLeashDLL;
+       static HINSTANCE        m_hComErr;
 ////
 #ifndef NO_KRB4
        static HINSTANCE        m_hKrb4DLL;
index 2ec5f756a8c6636d08025c7be9c34580b0c7d9cc..7ad47a24ea9f4ad0a0c8fdbb9da88ed45adb215f 100644 (file)
@@ -17,6 +17,7 @@
 #define LEASHGLOBALS_H
 
 #include <tlhelp32.h>
+#include <loadfuncs-com_err.h>
 #include <loadfuncs-krb5.h>
 ////#include <loadfuncs-krb.h>
 #include <loadfuncs-profile.h>
@@ -167,6 +168,9 @@ extern DECL_FUNC_PTR(CreateToolhelp32Snapshot);
 extern DECL_FUNC_PTR(Module32First);
 extern DECL_FUNC_PTR(Module32Next);
 
+// com_err functions
+extern DECL_FUNC_PTR(error_message);
+
 // krb5 functions
 extern DECL_FUNC_PTR(krb5_cc_default_name);
 extern DECL_FUNC_PTR(krb5_cc_set_default_name);
@@ -185,6 +189,29 @@ extern DECL_FUNC_PTR(krb5_unparse_name);
 extern DECL_FUNC_PTR(krb5_free_unparsed_name);
 extern DECL_FUNC_PTR(krb5_free_principal);
 extern DECL_FUNC_PTR(krb5_cc_close);
+extern DECL_FUNC_PTR(krb5_cc_default);
+extern DECL_FUNC_PTR(krb5_cc_destroy);
+extern DECL_FUNC_PTR(krb5_cc_set_flags);
+extern DECL_FUNC_PTR(krb5_cc_get_name);
+extern DECL_FUNC_PTR(krb5_cc_start_seq_get);
+extern DECL_FUNC_PTR(krb5_cc_end_seq_get);
+extern DECL_FUNC_PTR(krb5_cc_next_cred);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_new);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_next);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_free);
+extern DECL_FUNC_PTR(krb5_decode_ticket);
+extern DECL_FUNC_PTR(krb5_free_ticket);
+extern DECL_FUNC_PTR(krb5_init_context);
+extern DECL_FUNC_PTR(krb5_is_config_principal);
+extern DECL_FUNC_PTR(krb5_cc_switch);
+extern DECL_FUNC_PTR(krb5_build_principal_ext);
+extern DECL_FUNC_PTR(krb5_get_renewed_creds);
+extern DECL_FUNC_PTR(krb5_cc_initialize);
+extern DECL_FUNC_PTR(krb5_cc_store_cred);
+extern DECL_FUNC_PTR(krb5_cc_get_full_name);
+extern DECL_FUNC_PTR(krb5_enctype_to_name);
+extern DECL_FUNC_PTR(krb5_cc_get_type);
+extern DECL_FUNC_PTR(krb5int_cc_user_set_default_name);
 // extern DECL_FUNC_PTR(krb5_get_host_realm);
 
 // profile functions
index 4c736c0ead29d0a353d4c375f9229c99adc07d8f..b6d6318772f954fea4c11d264e4997dde9c5380f 100644 (file)
@@ -33,6 +33,7 @@ DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list);
 DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache);
 DECL_FUNC_PTR(krb5_get_init_creds_password);
 DECL_FUNC_PTR(krb5_build_principal_ext);
+DECL_FUNC_PTR(krb5_cc_get_name);
 DECL_FUNC_PTR(krb5_cc_resolve);
 DECL_FUNC_PTR(krb5_cc_default);
 DECL_FUNC_PTR(krb5_cc_default_name);
@@ -86,6 +87,17 @@ DECL_FUNC_PTR(krb5_free_default_realm);
 DECL_FUNC_PTR(krb5_principal_compare);
 DECL_FUNC_PTR(krb5_string_to_deltat);
 DECL_FUNC_PTR(krb5_is_config_principal);
+DECL_FUNC_PTR(krb5_cccol_cursor_new);
+DECL_FUNC_PTR(krb5_cccol_cursor_free);
+DECL_FUNC_PTR(krb5_cccol_cursor_next);
+DECL_FUNC_PTR(krb5_cc_cache_match);
+DECL_FUNC_PTR(krb5_cc_get_type);
+DECL_FUNC_PTR(krb5_cc_new_unique);
+DECL_FUNC_PTR(krb5_cc_support_switch);
+DECL_FUNC_PTR(krb5_cc_switch);
+DECL_FUNC_PTR(krb5_cc_get_full_name);
+DECL_FUNC_PTR(krb5_free_string);
+DECL_FUNC_PTR(krb5int_cc_user_set_default_name);
 
 // ComErr functions
 DECL_FUNC_PTR(com_err);
@@ -133,6 +145,7 @@ FUNC_INFO k5_fi[] = {
     MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_out_ccache),
     MAKE_FUNC_INFO(krb5_get_init_creds_password),
     MAKE_FUNC_INFO(krb5_build_principal_ext),
+    MAKE_FUNC_INFO(krb5_cc_get_name),
     MAKE_FUNC_INFO(krb5_cc_resolve),
     MAKE_FUNC_INFO(krb5_cc_default),
     MAKE_FUNC_INFO(krb5_cc_default_name),
@@ -186,6 +199,17 @@ FUNC_INFO k5_fi[] = {
     MAKE_FUNC_INFO(krb5_principal_compare),
     MAKE_FUNC_INFO(krb5_string_to_deltat),
     MAKE_FUNC_INFO(krb5_is_config_principal),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_new),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_next),
+    MAKE_FUNC_INFO(krb5_cccol_cursor_free),
+    MAKE_FUNC_INFO(krb5_cc_cache_match),
+    MAKE_FUNC_INFO(krb5_cc_get_type),
+    MAKE_FUNC_INFO(krb5_cc_new_unique),
+    MAKE_FUNC_INFO(krb5_cc_support_switch),
+    MAKE_FUNC_INFO(krb5_cc_switch),
+    MAKE_FUNC_INFO(krb5_cc_get_full_name),
+    MAKE_FUNC_INFO(krb5_free_string),
+    MAKE_FUNC_INFO(krb5int_cc_user_set_default_name),
     END_FUNC_INFO
 };
 
index 6f34b9d47ed04ecbfa8ad228cdc6aa30668a0726..a045583da2be5e8849c08475f2c817041eaf6543 100644 (file)
@@ -172,6 +172,7 @@ extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list);
 extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache);
 extern DECL_FUNC_PTR(krb5_get_init_creds_password);
 extern DECL_FUNC_PTR(krb5_build_principal_ext);
+extern DECL_FUNC_PTR(krb5_cc_get_name);
 extern DECL_FUNC_PTR(krb5_cc_resolve);
 extern DECL_FUNC_PTR(krb5_cc_default);
 extern DECL_FUNC_PTR(krb5_cc_default_name);
@@ -189,9 +190,11 @@ extern DECL_FUNC_PTR(krb5_cc_end_seq_get);
 // extern DECL_FUNC_PTR(krb5_cc_remove_cred);
 extern DECL_FUNC_PTR(krb5_cc_set_flags);
 // extern DECL_FUNC_PTR(krb5_cc_get_type);
+extern DECL_FUNC_PTR(krb5_cc_get_full_name);
 extern DECL_FUNC_PTR(krb5_free_context);
 extern DECL_FUNC_PTR(krb5_free_cred_contents);
 extern DECL_FUNC_PTR(krb5_free_principal);
+extern DECL_FUNC_PTR(krb5_free_string);
 extern DECL_FUNC_PTR(krb5_get_in_tkt_with_password);
 extern DECL_FUNC_PTR(krb5_init_context);
 extern DECL_FUNC_PTR(krb5_parse_name);
@@ -225,6 +228,15 @@ extern DECL_FUNC_PTR(krb5_free_default_realm);
 extern DECL_FUNC_PTR(krb5_principal_compare);
 extern DECL_FUNC_PTR(krb5_string_to_deltat);
 extern DECL_FUNC_PTR(krb5_is_config_principal);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_new);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_next);
+extern DECL_FUNC_PTR(krb5_cccol_cursor_free);
+extern DECL_FUNC_PTR(krb5_cc_cache_match);
+extern DECL_FUNC_PTR(krb5_cc_get_type);
+extern DECL_FUNC_PTR(krb5_cc_new_unique);
+extern DECL_FUNC_PTR(krb5_cc_support_switch);
+extern DECL_FUNC_PTR(krb5_cc_switch);
+extern DECL_FUNC_PTR(krb5int_cc_user_set_default_name);
 
 #ifndef NO_KRB4
 // Krb524 functions