gss_libinit.c revision ab9b2e153c3a9a2b1141fefa87925b1a9beb1236
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb/*
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb * Use is subject to license terms.
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#pragma ident "%Z%%M% %I% %E% SMI"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include <assert.h>
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "gssapi_err_generic.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "gssapi_err_krb5.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "gssapiP_krb5.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "gss_libinit.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "k5-platform.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#include "mglueP.h"
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb/*
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb * Initialize the GSSAPI library.
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtbMAKE_INIT_FUNCTION(gssint_lib_init);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtbMAKE_FINI_FUNCTION(gssint_lib_fini);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtbint gssint_lib_init(void)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb{
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb int err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#ifdef SHOW_INITFINI_FUNCS
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb printf("gssint_lib_init\n");
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if !USE_BUNDLE_ERROR_STRINGS
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb add_error_table(&et_k5g_error_table);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb add_error_table(&et_ggss_error_table);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if 0 /* SUNW15resync */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb err = gssint_mechglue_init();
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (err)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb err = k5_mutex_finish_init(&gssint_krb5_keytab_lock);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (err)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (err)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (err)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb err = k5_mutex_finish_init(&kg_kdc_flag_mutex);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (err)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return err;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return k5_mutex_finish_init(&kg_vdb.mutex);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb}
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtbvoid gssint_lib_fini(void)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb{
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) {
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#ifdef SHOW_INITFINI_FUNCS
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb printf("gssint_lib_fini: skipping\n");
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return;
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb }
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#ifdef SHOW_INITFINI_FUNCS
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb printf("gssint_lib_fini\n");
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if !USE_BUNDLE_ERROR_STRINGS
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb remove_error_table(&et_k5g_error_table);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb remove_error_table(&et_ggss_error_table);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb k5_mutex_destroy(&kg_vdb.mutex);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb k5_mutex_destroy(&kg_kdc_flag_mutex);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb k5_mutex_destroy(&gssint_krb5_keytab_lock);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#if 0 /* SUNW15resync */
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb gssint_mechglue_fini();
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb#endif
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb}
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtbOM_uint32 gssint_initialize_library (void)
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb{
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb return CALL_INIT_FUNCTION(gssint_lib_init);
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb}