Home | History | Annotate | Download | only in krb
      1 /*
      2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
      3  * Use is subject to license terms.
      4  */
      5 
      6 
      7 #include <assert.h>
      8 
      9 #include "autoconf.h"
     10 #include "com_err.h"
     11 #include "k5-int.h"
     12 #if 0 /* Solaris Kerberos */
     13 #include "krb5_err.h"
     14 #include "kv5m_err.h"
     15 #include "asn1_err.h"
     16 #include "kdb5_err.h"
     17 #endif
     18 
     19 #if defined(_WIN32) || defined(USE_CCAPI)
     20 #include "stdcc.h"
     21 #endif
     22 
     23 #include "krb5_libinit.h"
     24 #include "k5-platform.h"
     25 #include "cc-int.h"
     26 #include "kt-int.h"
     27 #include "rc-int.h"
     28 #include "os-proto.h"
     29 
     30 /*
     31  * Initialize the Kerberos v5 library.
     32  */
     33 
     34 MAKE_INIT_FUNCTION(krb5int_lib_init);
     35 MAKE_FINI_FUNCTION(krb5int_lib_fini);
     36 
     37 /* Possibly load-time initialization -- mutexes, etc.  */
     38 int krb5int_lib_init(void)
     39 {
     40     int err;
     41 
     42     krb5int_set_error_info_callout_fn (error_message);
     43 
     44 #ifdef SHOW_INITFINI_FUNCS
     45     printf("krb5int_lib_init\n");
     46 #endif
     47 
     48 #if !USE_BUNDLE_ERROR_STRINGS
     49     add_error_table(&et_krb5_error_table);
     50     add_error_table(&et_kv5m_error_table);
     51     add_error_table(&et_kdb5_error_table);
     52     add_error_table(&et_asn1_error_table);
     53     add_error_table(&et_k524_error_table);
     54 #endif
     55 
     56     err = krb5int_rc_finish_init();
     57     if (err)
     58 	return err;
     59     err = krb5int_kt_initialize();
     60     if (err)
     61 	return err;
     62     err = krb5int_cc_initialize();
     63     if (err)
     64 	return err;
     65     err = k5_mutex_finish_init(&krb5int_us_time_mutex);
     66     if (err)
     67 	return err;
     68 
     69     return 0;
     70 }
     71 
     72 /* Always-delayed initialization -- error table linkage, etc.  */
     73 krb5_error_code krb5int_initialize_library (void)
     74 {
     75     return CALL_INIT_FUNCTION(krb5int_lib_init);
     76 }
     77 
     78 /*
     79  * Clean up the Kerberos v5 library state
     80  */
     81 
     82 void krb5int_lib_fini(void)
     83 {
     84     if (!INITIALIZER_RAN(krb5int_lib_init) || PROGRAM_EXITING()) {
     85 #ifdef SHOW_INITFINI_FUNCS
     86 	printf("krb5int_lib_fini: skipping\n");
     87 #endif
     88 	return;
     89     }
     90 
     91 #ifdef SHOW_INITFINI_FUNCS
     92     printf("krb5int_lib_fini\n");
     93 #endif
     94 
     95     k5_mutex_destroy(&krb5int_us_time_mutex);
     96 
     97     krb5int_cc_finalize();
     98     krb5int_kt_finalize();
     99     krb5int_rc_terminate();
    100 
    101 #if defined(_WIN32) || defined(USE_CCAPI)
    102     krb5_stdcc_shutdown();
    103 #endif
    104 
    105 #if !USE_BUNDLE_ERROR_STRINGS
    106     remove_error_table(&et_krb5_error_table);
    107     remove_error_table(&et_kv5m_error_table);
    108     remove_error_table(&et_kdb5_error_table);
    109     remove_error_table(&et_asn1_error_table);
    110     remove_error_table(&et_k524_error_table);
    111 #endif
    112     krb5int_set_error_info_callout_fn (0);
    113 }
    114 
    115 /* Still exists because it went into the export list on Windows.  But
    116    since the above function should be invoked at unload time, we don't
    117    actually want to do anything here.  */
    118 void krb5int_cleanup_library (void)
    119 {
    120 }
    121