1 /* 2 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 #pragma ident "%Z%%M% %I% %E% SMI" 7 8 #include <assert.h> 9 10 #include "gssapi_err_generic.h" 11 #include "gssapi_err_krb5.h" 12 #include "gssapiP_krb5.h" 13 14 #include "gss_libinit.h" 15 #include "k5-platform.h" 16 17 #include "mglueP.h" 18 19 /* 20 * Initialize the GSSAPI library. 21 */ 22 23 MAKE_INIT_FUNCTION(gssint_lib_init); 24 MAKE_FINI_FUNCTION(gssint_lib_fini); 25 26 int gssint_lib_init(void) 27 { 28 int err; 29 30 #ifdef SHOW_INITFINI_FUNCS 31 printf("gssint_lib_init\n"); 32 #endif 33 34 #if !USE_BUNDLE_ERROR_STRINGS 35 add_error_table(&et_k5g_error_table); 36 add_error_table(&et_ggss_error_table); 37 #endif 38 #if 0 /* SUNW15resync */ 39 err = gssint_mechglue_init(); 40 if (err) 41 return err; 42 #endif 43 err = k5_mutex_finish_init(&gssint_krb5_keytab_lock); 44 if (err) 45 return err; 46 err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free); 47 if (err) 48 return err; 49 err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free); 50 if (err) 51 return err; 52 #if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */ 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 #if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */ 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