ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb/*
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
ab9b2e153c3a9a2b1141fefa87925b1a9beb1236gtb */
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 * 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;
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry err = k5_key_register(K5_KEY_GSS_KRB5_ERROR_MESSAGE,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry krb5_gss_delete_error_info);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (err)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry return err;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#ifndef _WIN32
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);
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#ifndef _WIN32
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}