krb5 library-side changes for com_err based error strings
authorAlexandra Ellwood <lxs@mit.edu>
Tue, 30 Sep 2008 20:05:17 +0000 (20:05 +0000)
committerAlexandra Ellwood <lxs@mit.edu>
Tue, 30 Sep 2008 20:05:17 +0000 (20:05 +0000)
ticket: 6138

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

17 files changed:
src/ccapi/lib/ccapi_context.c
src/kim/agent/mac/ServerDemux.m
src/kim/lib/kim_ccache.c
src/kim/lib/kim_credential.c
src/kim/lib/kim_identity.c
src/kim/lib/kim_library.c
src/kim/lib/kim_library_private.h
src/kim/lib/kim_options.c
src/kim/lib/kim_preferences.c
src/kim/lib/kim_selection_hints.c
src/kim/lib/kim_string.c
src/kim/lib/mac/kim_os_private.h
src/kim/lib/mac/kim_os_string.c
src/lib/gssapi/gss_libinit.c
src/lib/krb5/krb5_libinit.c
src/util/mac/k5_mig_client.c
src/util/profile/prof_file.c

index 640e153e8c20540ed85a6082675784031f5d2c9b..3e405679f9f3d299acb854fc2020d872d65bf639 100644 (file)
@@ -33,6 +33,7 @@
 #include "ccapi_string.h"
 #include "ccapi_ipc.h"
 #include "ccapi_context_change_time.h"
+#include "ccapi_err.h"
 
 #include <CredentialsCache2.h>
 
@@ -96,6 +97,10 @@ static int cci_thread_init (void)
         err = cci_ipc_thread_init ();
     }
     
+    if (!err) {
+        add_error_table (&et_CAPI_error_table);
+    }
+    
     return err;
 }
 
@@ -107,6 +112,7 @@ static void cci_thread_fini (void)
        return;
     }
     
+    remove_error_table(&et_CAPI_error_table);
     cci_context_change_time_thread_fini ();
     cci_ipc_thread_fini ();
 }
index c09d7ec8529e5d50080e2437f81d8638fa7ba8b0..ed4e73d1d6256f10c0b3206111bc7030928196a4 100644 (file)
@@ -303,7 +303,7 @@ static int32_t kim_handle_request_auth_prompt (mach_port_t   in_client_port,
     
     if (!err) {
         NSLog (@"Got auth prompt with identity '%s', type '%d', allow_save_reply '%d', hide '%d', title '%s', message '%s', description '%s'",
-               identity_string, type, hide_reply, title, message, description);
+               identity_string, type, allow_save_reply, hide_reply, title, message, description);
         err = kim_handle_reply_auth_prompt (in_reply_port, "ydobon", 0, 0);
 #warning Send auth prompt message to main thread with 2 ports and arguments
     }
index 152095d54c61120e6b089926bd405f5adb90af6b..b30351c4ac7822a230e14a81906f868e6269d6d3 100644 (file)
@@ -38,7 +38,7 @@ struct kim_ccache_iterator_opaque kim_ccache_iterator_initializer = { NULL, NULL
 
 kim_error kim_ccache_iterator_create (kim_ccache_iterator *out_ccache_iterator)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_ccache_iterator ccache_iterator = NULL;
     
     if (!err && !out_ccache_iterator) { err = check_error (KIM_NULL_PARAMETER_ERR); }
@@ -181,7 +181,7 @@ static kim_error kim_ccache_create_resolve_name (kim_string *out_resolve_name,
 
 static inline kim_error kim_ccache_allocate (kim_ccache *out_ccache)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_ccache ccache = NULL;
     
     if (!err && !out_ccache) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index 64561896d5cc527eb9d24c776a759046c8d7b8b3..8465aa59d1c95d77d015107580b0f35fd47f6fc2 100644 (file)
@@ -41,7 +41,7 @@ struct kim_credential_iterator_opaque kim_credential_iterator_initializer = { NU
 kim_error kim_credential_iterator_create (kim_credential_iterator *out_credential_iterator,
                                           kim_ccache               in_ccache)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_credential_iterator credential_iterator = NULL;
     
     if (!err && !out_credential_iterator) { err = check_error (KIM_NULL_PARAMETER_ERR); }
@@ -178,7 +178,7 @@ struct kim_credential_opaque kim_credential_initializer = { NULL, NULL };
 
 static inline kim_error kim_credential_allocate (kim_credential *out_credential)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_credential credential = NULL;
     
     if (!err && !out_credential) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index 10604e6d072af89dd5ab15237a4c1bc966d400da..33877746e2040206946792156966c541b9f2a9ee 100644 (file)
@@ -41,7 +41,7 @@ struct kim_identity_opaque kim_identity_initializer = { NULL, NULL };
 
 static inline kim_error kim_identity_allocate (kim_identity *out_identity)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_identity identity = NULL;
     
     if (!err && !out_identity) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index c235fbda7eebcc39c3b6beac0d11758d5b8ba8d5..8096ec6b1f82eeecb99ef488cf05627eb2d725c1 100644 (file)
 #include "kim_private.h"
 #include "kim_os_private.h"
 
+
+MAKE_INIT_FUNCTION(kim_error_init);
+MAKE_FINI_FUNCTION(kim_error_fini);
+
+/* ------------------------------------------------------------------------ */
+
+static int kim_error_init (void)
+{
+    add_error_table (&et_KIM_error_table);    
+    return 0;
+}
+
+/* ------------------------------------------------------------------------ */
+
+static void kim_error_fini (void)
+{
+    if (!INITIALIZER_RAN (kim_error_init) || PROGRAM_EXITING ()) {
+       return;
+    }
+
+    remove_error_table (&et_KIM_error_table);
+}
+
+/* ------------------------------------------------------------------------ */
+
+kim_error kim_library_init (void)
+{
+    return CALL_INIT_FUNCTION (kim_error_init);
+}
+
+#pragma mark -
+
 static k5_mutex_t g_allow_home_directory_access_mutex = K5_MUTEX_PARTIAL_INITIALIZER;
 static k5_mutex_t g_allow_automatic_prompting_mutex = K5_MUTEX_PARTIAL_INITIALIZER;
 static k5_mutex_t g_ui_environment_mutex = K5_MUTEX_PARTIAL_INITIALIZER;
index b44cb6513b22072ab50bce38fc6790e795a3dae9..83c06d7914138d95ffe95474b172afa99a1da2d1 100644 (file)
@@ -29,6 +29,8 @@
 
 #include <kim/kim.h>
 
+kim_error kim_library_init (void);
+
 kim_ui_environment kim_os_library_get_ui_environment (void);
 
 kim_ui_environment kim_library_ui_environment (void);
index d97b3469900c9e23b02ee5d59a90916336725933..91ec406bb18d31fb0bc4808a0e6ad071b9355b96 100644 (file)
@@ -57,7 +57,7 @@ NULL };
 
 static inline kim_error kim_options_allocate (kim_options *out_options)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_options options = NULL;
     
     if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index b2e740d9e86d998015a33a7da7aed8580253259d..29f37cd9a3005e7e260fa3de46ea60672c9efeeb 100644 (file)
@@ -136,7 +136,7 @@ static kim_error kim_favorites_copy (kim_favorites in_favorites,
     kim_error err = KIM_NO_ERROR;
     
     if (!err && !in_favorites) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    if (!err && !io_favorites ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
+    if (!err && !io_favorites) { err = check_error (KIM_NULL_PARAMETER_ERR); }
     
     if (!err) {
         err = kim_favorites_resize (io_favorites, in_favorites->count);
@@ -491,10 +491,6 @@ static kim_error kim_preferences_read (kim_preferences in_preferences)
                                                        &in_preferences->maximum_renewal_lifetime);
     }
     
-    if (!err) {
-        
-    }
-    
     return check_error (err);
 }
 
@@ -576,7 +572,7 @@ static kim_error kim_preferences_write (kim_preferences in_preferences)
 
 static inline kim_error kim_preferences_allocate (kim_preferences *out_preferences)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_preferences preferences = NULL;
     
     if (!err && !out_preferences) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index 8cb98f683c9a03d6de97868c7c8d75077861853e..6bfa3f18201808da71d2290fb74d99d25823131b 100644 (file)
@@ -58,7 +58,7 @@ struct kim_selection_hints_opaque kim_selection_hints_initializer = {
 
 static inline kim_error kim_selection_hints_allocate (kim_selection_hints *out_selection_hints)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_selection_hints selection_hints = NULL;
     
     if (!err && !out_selection_hints) { err = check_error (KIM_NULL_PARAMETER_ERR); }
index 2dc284c932fbbbcc71891506e3b2f0d31802da6e..b84a12c8ee17cb5bf6371a3b0758ece80754b270 100644 (file)
@@ -32,7 +32,7 @@ kim_error kim_string_create_from_format (kim_string *out_string,
                                          kim_string  in_format,
                                          ...)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     va_list args;
     
     va_start (args, in_format);
@@ -48,7 +48,7 @@ kim_error kim_string_create_from_format_va_retcode (kim_string *out_string,
                                                     kim_string  in_format,
                                                     va_list     in_args)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     
     int count = vasprintf ((char **) out_string, in_format, in_args);
     if (count < 0) { err = check_error (KIM_OUT_OF_MEMORY_ERR); }
@@ -62,7 +62,7 @@ kim_error kim_string_create_from_format_va (kim_string *out_string,
                                             kim_string  in_format,
                                             va_list     in_args)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_string string = NULL;
     
     if (!err && !out_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
@@ -90,7 +90,7 @@ kim_error kim_string_create_from_buffer (kim_string *out_string,
                                          const char *in_buffer, 
                                          kim_count   in_length)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_string string = NULL;
     
     if (!err && !out_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
@@ -117,7 +117,11 @@ kim_error kim_string_create_from_buffer (kim_string *out_string,
 kim_error kim_string_create_for_last_error (kim_string *out_string,
                                             kim_error   in_error)
 {
-    return kim_string_copy (out_string, kim_error_message (in_error));
+    kim_error err = kim_library_init ();
+
+    err = kim_string_copy (out_string, kim_error_message (in_error));
+
+    return check_error (err);
 }
 
 /* ------------------------------------------------------------------------ */
@@ -125,7 +129,7 @@ kim_error kim_string_create_for_last_error (kim_string *out_string,
 kim_error kim_string_copy (kim_string *out_string, 
                            kim_string  in_string)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error err = kim_library_init ();
     kim_string string = NULL;
     
     if (!err && !out_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
@@ -137,7 +141,7 @@ kim_error kim_string_copy (kim_string *out_string,
     }
     
     if (!err) {
-        strcpy ((char *) string, in_string);
+        strncpy ((char *) string, in_string, strlen (in_string) + 1);
         *out_string = string;
         string = NULL;
     }
index 039502a7e940b7e25e90577f3802b7dc06564307..f14440df48e9239f7298bb4228095b4f24a9d9c9 100644 (file)
@@ -41,10 +41,6 @@ kim_error kim_os_library_unlock_for_bundle_lookup (void);
 
 kim_error kim_os_library_get_application_path (kim_string *out_path);
 
-
-kim_error kim_os_string_create_for_key (kim_string *out_string,
-                                        kim_string  in_key_string);
-
 kim_error kim_os_string_create_from_cfstring (kim_string *out_string,
                                               CFStringRef   in_cfstring);
 
index d51bc48b2a4716d465813f172208adb647b5ff13..0529f3920763c4800316edbe875ff09afbbf10bb 100644 (file)
 
 #include "kim_os_private.h"
 
-/* ------------------------------------------------------------------------ */
-static kim_error kim_os_string_for_key_in_bundle (CFBundleRef  in_bundle, 
-                                                  CFStringRef  in_key,
-                                                  kim_string  *out_string)
-{
-    kim_error err = KIM_NO_ERROR;
-    kim_string string = NULL;
-    
-    if (!err && !in_bundle ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    if (!err && !in_key    ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    if (!err && !out_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    
-    if (!err) {
-        CFDictionaryRef dictionary = NULL;
-        int release_dictionary = 0;
-        CFStringRef cfstring = NULL;
-        
-#if !KERBEROS_LITE
-        if (kim_library_allow_home_directory_access ()) {
-#endif
-            /* Accesses user's homedir to get localization information */
-            dictionary = CFBundleGetLocalInfoDictionary (in_bundle);
-            
-#if !KERBEROS_LITE
-        } else {
-            CFURLRef url = NULL;
-            CFDataRef data = NULL;
-            CFAllocatorRef allocator = CFGetAllocator (in_bundle);
-            SInt32 code = 0;
-            
-            url = CFBundleCopyResourceURLForLocalization (in_bundle,
-                                                          CFSTR("InfoPlist"),
-                                                          CFSTR("strings"),
-                                                          NULL,
-                                                          CFSTR("English"));
-            
-            if (url && CFURLCreateDataAndPropertiesFromResource (allocator, 
-                                                                 url, &data, 
-                                                                 NULL, NULL, 
-                                                                 &code)) {
-                
-                dictionary = CFPropertyListCreateFromXMLData (allocator, 
-                                                              data, 
-                                                              kCFPropertyListImmutable, 
-                                                              NULL);
-                release_dictionary = 1;
-            }
-            
-            if (data) { CFRelease (data); }
-            if (url ) { CFRelease (url); }
-        }
-#endif
-        
-        if (dictionary && (CFGetTypeID(dictionary) == CFDictionaryGetTypeID())) {
-            cfstring = (CFStringRef) CFDictionaryGetValue (dictionary, in_key);
-        }
-        
-        if (cfstring && (CFGetTypeID (cfstring) == CFStringGetTypeID ())) {
-            err = kim_os_string_create_from_cfstring (&string, cfstring);
-        }
-        
-        if (dictionary && release_dictionary) { CFRelease (dictionary); }
-    }
-    
-    if (!err) {
-        /* set to NULL if no string found */
-        *out_string = string;
-        string = NULL;
-    }
-    
-    kim_string_free (&string);
-    
-    return check_error (err);
-}
-
-#pragma mark -
-
 /* ------------------------------------------------------------------------ */
 
 kim_error kim_os_string_create_localized (kim_string *out_string,
                                           kim_string in_string)
 {
-    kim_error err = KIM_NO_ERROR;
+    kim_error lock_err = kim_os_library_lock_for_bundle_lookup ();
+    kim_error err = lock_err;
     kim_string string = NULL;
+    CFStringRef cfkey = NULL;
     
     if (!err && !out_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
     if (!err && !in_string ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
     if (!err) {
-        err = kim_os_string_create_for_key (&string, in_string);
-    }
-    
-    if (!err && !string) {
-        err = kim_string_copy (&string, in_string);
-    }
-    
-    if (!err) {
-        *out_string = string;
-        string = NULL;
+        err = kim_os_string_get_cfstring (in_string, &cfkey);
     }
     
-    kim_string_free (&string);
-    
-    return check_error (err);
-}
-
-/* ------------------------------------------------------------------------ */
-
-kim_error kim_os_string_create_for_key (kim_string *out_string,
-                                        kim_string in_key_string)
-{
-    kim_error lock_err = kim_os_library_lock_for_bundle_lookup ();
-    kim_error err = lock_err;
-    CFStringRef key = NULL;
-    kim_string string = NULL;
-    
-    if (!err && !out_string   ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    if (!err && !in_key_string) { err = check_error (KIM_NULL_PARAMETER_ERR); }
-    
-    if (!err) {
-        err = kim_os_string_get_cfstring (in_key_string, &key);
-    }
-    
-    if (!err) {
-        /* Try to find the key, first searching in the framework */
+    if (!err && kim_library_allow_home_directory_access ()) {
+        CFStringRef cfstring = NULL;
         CFBundleRef framework = CFBundleGetBundleWithIdentifier (CFSTR ("edu.mit.Kerberos"));
+        CFBundleRef main_bundle = CFBundleGetMainBundle ();
+
         if (framework) {
-            err = kim_os_string_for_key_in_bundle (framework, key, &string);
+            cfstring = CFCopyLocalizedStringFromTableInBundle (cfkey,
+                                                               CFSTR ("InfoPlist"),
+                                                               framework,
+                                                               "");
+        }
+        
+        if (main_bundle && !cfstring) {
+            cfstring = CFCopyLocalizedStringFromTableInBundle (cfkey,
+                                                                CFSTR ("InfoPlist"),
+                                                               main_bundle,
+                                                               "");
+        }        
+        
+        if (!err && cfstring) {
+            err = kim_os_string_create_from_cfstring (&string, cfstring);
         }
     }
     
     if (!err && !string) {
-        /* If we didn't find it in the framwork, try in the main bundle */
-        CFBundleRef main_bundle = CFBundleGetMainBundle ();
-        if (main_bundle) {
-            err = kim_os_string_for_key_in_bundle (main_bundle, key, &string);
-        }
+        err = kim_string_copy (&string, in_string);
     }
     
     if (!err) {
@@ -172,8 +78,8 @@ kim_error kim_os_string_create_for_key (kim_string *out_string,
         string = NULL;
     }
     
+    if (cfkey) { CFRelease (cfkey); }
     kim_string_free (&string);
-    if (key) { CFRelease (key); }
     
     if (!lock_err) { kim_os_library_unlock_for_bundle_lookup (); }
     
index 3c26c98cd691d637f8cf5e5aa19afca959f269ef..cdffb77290b4db8116970a06db8ea593f5bf7b32 100644 (file)
@@ -25,10 +25,9 @@ int gssint_lib_init(void)
     printf("gssint_lib_init\n");
 #endif
 
-#if !USE_BUNDLE_ERROR_STRINGS
     add_error_table(&et_k5g_error_table);
     add_error_table(&et_ggss_error_table);
-#endif
+
     err = gssint_mechglue_init();
     if (err)
        return err;
@@ -69,10 +68,9 @@ void gssint_lib_fini(void)
 #ifdef SHOW_INITFINI_FUNCS
     printf("gssint_lib_fini\n");
 #endif
-#if !USE_BUNDLE_ERROR_STRINGS
     remove_error_table(&et_k5g_error_table);
     remove_error_table(&et_ggss_error_table);
-#endif
+
     k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
     k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
     k5_mutex_destroy(&kg_vdb.mutex);
index 94187781c8fb397ae42087ff4b9cf413440cd82a..c154da81bc804a94a1d497297414244ee621c796 100644 (file)
@@ -33,13 +33,11 @@ int krb5int_lib_init(void)
     printf("krb5int_lib_init\n");
 #endif
 
-#if !USE_BUNDLE_ERROR_STRINGS
     add_error_table(&et_krb5_error_table);
     add_error_table(&et_kv5m_error_table);
     add_error_table(&et_kdb5_error_table);
     add_error_table(&et_asn1_error_table);
     add_error_table(&et_k524_error_table);
-#endif
 
     err = krb5int_rc_finish_init();
     if (err)
@@ -94,13 +92,12 @@ void krb5int_lib_fini(void)
     krb5_stdcc_shutdown();
 #endif
 
-#if !USE_BUNDLE_ERROR_STRINGS
     remove_error_table(&et_krb5_error_table);
     remove_error_table(&et_kv5m_error_table);
     remove_error_table(&et_kdb5_error_table);
     remove_error_table(&et_asn1_error_table);
     remove_error_table(&et_k524_error_table);
-#endif
+
     krb5int_set_error_info_callout_fn (0);
 }
 
index 166704204f7e32b69d1172e38e5bf9829cf29152..6bb3b3dd99f4eb8aa7c607066e7fb2d91bb13d14 100644 (file)
@@ -24,6 +24,8 @@
  * or implied warranty.
  */
 
+#ifndef LEAN_CLIENT
+
 #include "k5_mig_client.h"
 
 #include <Kerberos/kipc_client.h>
@@ -328,3 +330,5 @@ int32_t k5_ipc_send_request (const char    *in_service_id,
     
     return err;    
 }
+
+#endif /* LEAN CLIENT */
index cee34ef2c8455d250cd52a84099ae70b1c07a167..13d8860e8b80d2843da31207cd68940b09786bd7 100644 (file)
@@ -52,9 +52,8 @@ int profile_library_initializer(void)
 #ifdef SHOW_INITFINI_FUNCS
     printf("profile_library_initializer\n");
 #endif
-#if !USE_BUNDLE_ERROR_STRINGS
     add_error_table(&et_prof_error_table);
-#endif
+
     return k5_mutex_finish_init(&g_shared_trees_mutex);
 }
 void profile_library_finalizer(void)
@@ -69,9 +68,8 @@ void profile_library_finalizer(void)
     printf("profile_library_finalizer\n");
 #endif
     k5_mutex_destroy(&g_shared_trees_mutex);
-#if !USE_BUNDLE_ERROR_STRINGS
+
     remove_error_table(&et_prof_error_table);
-#endif
 }
 
 static void profile_free_file_data(prf_data_t);