krb5_libinit.c revision 505d05c73a6e56769f263d4803b22eddd168ee24
505d05c73a6e56769f263d4803b22eddd168ee24gtb/*
505d05c73a6e56769f263d4803b22eddd168ee24gtb * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
505d05c73a6e56769f263d4803b22eddd168ee24gtb * Use is subject to license terms.
505d05c73a6e56769f263d4803b22eddd168ee24gtb */
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#pragma ident "%Z%%M% %I% %E% SMI"
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include <assert.h>
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "autoconf.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "com_err.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#include "krb5.h"
505d05c73a6e56769f263d4803b22eddd168ee24gtb#if 0 /* SUNW14resync */
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
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;
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{
505d05c73a6e56769f263d4803b22eddd168ee24gtb if (!INITIALIZER_RAN(krb5int_lib_init) || PROGRAM_EXITING())
505d05c73a6e56769f263d4803b22eddd168ee24gtb return;
505d05c73a6e56769f263d4803b22eddd168ee24gtb
505d05c73a6e56769f263d4803b22eddd168ee24gtb krb5int_rc_terminate();
505d05c73a6e56769f263d4803b22eddd168ee24gtb krb5int_kt_finalize();
505d05c73a6e56769f263d4803b22eddd168ee24gtb krb5int_cc_finalize();
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
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}