505d05c73a6e56769f263d4803b22eddd168ee24gtb/*
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
505d05c73a6e56769f263d4803b22eddd168ee24gtb * Use is subject to license terms.
505d05c73a6e56769f263d4803b22eddd168ee24gtb */
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include <assert.h>
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "autoconf.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "com_err.h"
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#include "k5-int.h"
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#if 0 /* Solaris Kerberos */
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "krb5_err.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "kv5m_err.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "asn1_err.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "kdb5_err.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#endif
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#if defined(_WIN32) || defined(USE_CCAPI)
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "stdcc.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#endif
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "krb5_libinit.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "k5-platform.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "cc-int.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "kt-int.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "rc-int.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "os-proto.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb/*
505d05c73a6e56769f263d4803b22eddd168ee24gtb * Initialize the Kerberos v5 library.
505d05c73a6e56769f263d4803b22eddd168ee24gtb */
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtbMAKE_INIT_FUNCTION(krb5int_lib_init);
505d05c73a6e56769f263d4803b22eddd168ee24gtbMAKE_FINI_FUNCTION(krb5int_lib_fini);
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb/* Possibly load-time initialization -- mutexes, etc. */
505d05c73a6e56769f263d4803b22eddd168ee24gtbint krb5int_lib_init(void)
505d05c73a6e56769f263d4803b22eddd168ee24gtb{
505d05c73a6e56769f263d4803b22eddd168ee24gtb int err;
505d05c73a6e56769f263d4803b22eddd168ee24gtb
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5int_set_error_info_callout_fn (error_message);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#ifdef SHOW_INITFINI_FUNCS
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan printf("krb5int_lib_init\n");
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#endif
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
505d05c73a6e56769f263d4803b22eddd168ee24gtb#if !USE_BUNDLE_ERROR_STRINGS
505d05c73a6e56769f263d4803b22eddd168ee24gtb add_error_table(&et_krb5_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb add_error_table(&et_kv5m_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb add_error_table(&et_kdb5_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb add_error_table(&et_asn1_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb add_error_table(&et_k524_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb#endif
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb err = krb5int_rc_finish_init();
505d05c73a6e56769f263d4803b22eddd168ee24gtb if (err)
505d05c73a6e56769f263d4803b22eddd168ee24gtb return err;
505d05c73a6e56769f263d4803b22eddd168ee24gtb err = krb5int_kt_initialize();
505d05c73a6e56769f263d4803b22eddd168ee24gtb if (err)
505d05c73a6e56769f263d4803b22eddd168ee24gtb return err;
505d05c73a6e56769f263d4803b22eddd168ee24gtb err = krb5int_cc_initialize();
505d05c73a6e56769f263d4803b22eddd168ee24gtb if (err)
505d05c73a6e56769f263d4803b22eddd168ee24gtb return err;
505d05c73a6e56769f263d4803b22eddd168ee24gtb err = k5_mutex_finish_init(&krb5int_us_time_mutex);
505d05c73a6e56769f263d4803b22eddd168ee24gtb if (err)
505d05c73a6e56769f263d4803b22eddd168ee24gtb return err;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
505d05c73a6e56769f263d4803b22eddd168ee24gtb return 0;
505d05c73a6e56769f263d4803b22eddd168ee24gtb}
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb/* Always-delayed initialization -- error table linkage, etc. */
505d05c73a6e56769f263d4803b22eddd168ee24gtbkrb5_error_code krb5int_initialize_library (void)
505d05c73a6e56769f263d4803b22eddd168ee24gtb{
505d05c73a6e56769f263d4803b22eddd168ee24gtb return CALL_INIT_FUNCTION(krb5int_lib_init);
505d05c73a6e56769f263d4803b22eddd168ee24gtb}
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb/*
505d05c73a6e56769f263d4803b22eddd168ee24gtb * Clean up the Kerberos v5 library state
505d05c73a6e56769f263d4803b22eddd168ee24gtb */
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtbvoid krb5int_lib_fini(void)
505d05c73a6e56769f263d4803b22eddd168ee24gtb{
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if (!INITIALIZER_RAN(krb5int_lib_init) || PROGRAM_EXITING()) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#ifdef SHOW_INITFINI_FUNCS
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan printf("krb5int_lib_fini: skipping\n");
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#endif
505d05c73a6e56769f263d4803b22eddd168ee24gtb return;
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan }
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#ifdef SHOW_INITFINI_FUNCS
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan printf("krb5int_lib_fini\n");
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan#endif
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan k5_mutex_destroy(&krb5int_us_time_mutex);
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb krb5int_cc_finalize();
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5int_kt_finalize();
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan krb5int_rc_terminate();
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#if defined(_WIN32) || defined(USE_CCAPI)
505d05c73a6e56769f263d4803b22eddd168ee24gtb krb5_stdcc_shutdown();
505d05c73a6e56769f263d4803b22eddd168ee24gtb#endif
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#if !USE_BUNDLE_ERROR_STRINGS
505d05c73a6e56769f263d4803b22eddd168ee24gtb remove_error_table(&et_krb5_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb remove_error_table(&et_kv5m_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb remove_error_table(&et_kdb5_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb remove_error_table(&et_asn1_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb remove_error_table(&et_k524_error_table);
505d05c73a6e56769f263d4803b22eddd168ee24gtb#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5int_set_error_info_callout_fn (0);
505d05c73a6e56769f263d4803b22eddd168ee24gtb}
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb/* Still exists because it went into the export list on Windows. But
505d05c73a6e56769f263d4803b22eddd168ee24gtb since the above function should be invoked at unload time, we don't
505d05c73a6e56769f263d4803b22eddd168ee24gtb actually want to do anything here. */
505d05c73a6e56769f263d4803b22eddd168ee24gtbvoid krb5int_cleanup_library (void)
505d05c73a6e56769f263d4803b22eddd168ee24gtb{
505d05c73a6e56769f263d4803b22eddd168ee24gtb}