1 /* 2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 3 */ 4 5 #include <assert.h> 6 7 #include "gssapi_err_generic.h" 8 #include "gssapi_err_krb5.h" 9 #include "gssapiP_krb5.h" 10 11 #include "gss_libinit.h" 12 #include "k5-platform.h" 13 14 #include "mglueP.h" 15 /* 16 * Initialize the GSSAPI library. 17 */ 18 19 MAKE_INIT_FUNCTION(gssint_lib_init); 20 MAKE_FINI_FUNCTION(gssint_lib_fini); 21 22 int gssint_lib_init(void) 23 { 24 int err; 25 26 #ifdef SHOW_INITFINI_FUNCS 27 printf("gssint_lib_init\n"); 28 #endif 29 30 #if !USE_BUNDLE_ERROR_STRINGS 31 add_error_table(&et_k5g_error_table); 32 add_error_table(&et_ggss_error_table); 33 #endif 34 #if 0 /* SUNW15resync */ 35 err = gssint_mechglue_init(); 36 if (err) 37 return err; 38 #endif 39 err = k5_mutex_finish_init(&gssint_krb5_keytab_lock); 40 if (err) 41 return err; 42 err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free); 43 if (err) 44 return err; 45 err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free); 46 if (err) 47 return err; 48 err = k5_key_register(K5_KEY_GSS_KRB5_ERROR_MESSAGE, 49 krb5_gss_delete_error_info); 50 if (err) 51 return err; 52 #ifndef _WIN32 53 err = k5_mutex_finish_init(&kg_kdc_flag_mutex); 54 if (err) 55 return err; 56 #endif 57 return k5_mutex_finish_init(&kg_vdb.mutex); 58 } 59 60 void gssint_lib_fini(void) 61 { 62 if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) { 63 #ifdef SHOW_INITFINI_FUNCS 64 printf("gssint_lib_fini: skipping\n"); 65 #endif 66 return; 67 } 68 #ifdef SHOW_INITFINI_FUNCS 69 printf("gssint_lib_fini\n"); 70 #endif 71 #if !USE_BUNDLE_ERROR_STRINGS 72 remove_error_table(&et_k5g_error_table); 73 remove_error_table(&et_ggss_error_table); 74 #endif 75 k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME); 76 k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME); 77 k5_mutex_destroy(&kg_vdb.mutex); 78 #ifndef _WIN32 79 k5_mutex_destroy(&kg_kdc_flag_mutex); 80 #endif 81 k5_mutex_destroy(&gssint_krb5_keytab_lock); 82 #if 0 /* SUNW15resync */ 83 gssint_mechglue_fini(); 84 #endif 85 } 86 87 OM_uint32 gssint_initialize_library (void) 88 { 89 return CALL_INIT_FUNCTION(gssint_lib_init); 90 } 91