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