Home | History | Annotate | Download | only in mech
      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