15053Sgtb /* 2*13132SGlenn.Barry@oracle.com * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 35053Sgtb */ 45053Sgtb 55053Sgtb #include <assert.h> 65053Sgtb 75053Sgtb #include "gssapi_err_generic.h" 85053Sgtb #include "gssapi_err_krb5.h" 95053Sgtb #include "gssapiP_krb5.h" 105053Sgtb 115053Sgtb #include "gss_libinit.h" 125053Sgtb #include "k5-platform.h" 135053Sgtb 145053Sgtb #include "mglueP.h" 155053Sgtb /* 165053Sgtb * Initialize the GSSAPI library. 175053Sgtb */ 185053Sgtb 195053Sgtb MAKE_INIT_FUNCTION(gssint_lib_init); 205053Sgtb MAKE_FINI_FUNCTION(gssint_lib_fini); 215053Sgtb gssint_lib_init(void)225053Sgtbint gssint_lib_init(void) 235053Sgtb { 245053Sgtb int err; 255053Sgtb 265053Sgtb #ifdef SHOW_INITFINI_FUNCS 275053Sgtb printf("gssint_lib_init\n"); 285053Sgtb #endif 295053Sgtb 305053Sgtb #if !USE_BUNDLE_ERROR_STRINGS 315053Sgtb add_error_table(&et_k5g_error_table); 325053Sgtb add_error_table(&et_ggss_error_table); 335053Sgtb #endif 345053Sgtb #if 0 /* SUNW15resync */ 355053Sgtb err = gssint_mechglue_init(); 365053Sgtb if (err) 375053Sgtb return err; 385053Sgtb #endif 395053Sgtb err = k5_mutex_finish_init(&gssint_krb5_keytab_lock); 405053Sgtb if (err) 415053Sgtb return err; 425053Sgtb err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free); 435053Sgtb if (err) 445053Sgtb return err; 455053Sgtb err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free); 465053Sgtb if (err) 475053Sgtb return err; 48*13132SGlenn.Barry@oracle.com err = k5_key_register(K5_KEY_GSS_KRB5_ERROR_MESSAGE, 49*13132SGlenn.Barry@oracle.com krb5_gss_delete_error_info); 50*13132SGlenn.Barry@oracle.com if (err) 51*13132SGlenn.Barry@oracle.com return err; 527934SMark.Phalan@Sun.COM #ifndef _WIN32 535053Sgtb err = k5_mutex_finish_init(&kg_kdc_flag_mutex); 545053Sgtb if (err) 555053Sgtb return err; 565053Sgtb #endif 575053Sgtb return k5_mutex_finish_init(&kg_vdb.mutex); 585053Sgtb } 595053Sgtb gssint_lib_fini(void)605053Sgtbvoid gssint_lib_fini(void) 615053Sgtb { 625053Sgtb if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) { 635053Sgtb #ifdef SHOW_INITFINI_FUNCS 645053Sgtb printf("gssint_lib_fini: skipping\n"); 655053Sgtb #endif 665053Sgtb return; 675053Sgtb } 685053Sgtb #ifdef SHOW_INITFINI_FUNCS 695053Sgtb printf("gssint_lib_fini\n"); 705053Sgtb #endif 715053Sgtb #if !USE_BUNDLE_ERROR_STRINGS 725053Sgtb remove_error_table(&et_k5g_error_table); 735053Sgtb remove_error_table(&et_ggss_error_table); 745053Sgtb #endif 755053Sgtb k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME); 765053Sgtb k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME); 775053Sgtb k5_mutex_destroy(&kg_vdb.mutex); 787934SMark.Phalan@Sun.COM #ifndef _WIN32 795053Sgtb k5_mutex_destroy(&kg_kdc_flag_mutex); 805053Sgtb #endif 815053Sgtb k5_mutex_destroy(&gssint_krb5_keytab_lock); 825053Sgtb #if 0 /* SUNW15resync */ 835053Sgtb gssint_mechglue_fini(); 845053Sgtb #endif 855053Sgtb } 865053Sgtb gssint_initialize_library(void)875053SgtbOM_uint32 gssint_initialize_library (void) 885053Sgtb { 895053Sgtb return CALL_INIT_FUNCTION(gssint_lib_init); 905053Sgtb } 91