1ab9b2e15Sgtb /*
2*5e01956fSGlenn Barry  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
3ab9b2e15Sgtb  */
4ab9b2e15Sgtb 
5ab9b2e15Sgtb #include <assert.h>
6ab9b2e15Sgtb 
7ab9b2e15Sgtb #include "gssapi_err_generic.h"
8ab9b2e15Sgtb #include "gssapi_err_krb5.h"
9ab9b2e15Sgtb #include "gssapiP_krb5.h"
10ab9b2e15Sgtb 
11ab9b2e15Sgtb #include "gss_libinit.h"
12ab9b2e15Sgtb #include "k5-platform.h"
13ab9b2e15Sgtb 
14ab9b2e15Sgtb #include "mglueP.h"
15ab9b2e15Sgtb /*
16ab9b2e15Sgtb  * Initialize the GSSAPI library.
17ab9b2e15Sgtb  */
18ab9b2e15Sgtb 
19ab9b2e15Sgtb MAKE_INIT_FUNCTION(gssint_lib_init);
20ab9b2e15Sgtb MAKE_FINI_FUNCTION(gssint_lib_fini);
21ab9b2e15Sgtb 
gssint_lib_init(void)22ab9b2e15Sgtb int gssint_lib_init(void)
23ab9b2e15Sgtb {
24ab9b2e15Sgtb     int err;
25ab9b2e15Sgtb 
26ab9b2e15Sgtb #ifdef SHOW_INITFINI_FUNCS
27ab9b2e15Sgtb     printf("gssint_lib_init\n");
28ab9b2e15Sgtb #endif
29ab9b2e15Sgtb 
30ab9b2e15Sgtb #if !USE_BUNDLE_ERROR_STRINGS
31ab9b2e15Sgtb     add_error_table(&et_k5g_error_table);
32ab9b2e15Sgtb     add_error_table(&et_ggss_error_table);
33ab9b2e15Sgtb #endif
34ab9b2e15Sgtb #if 0 /* SUNW15resync */
35ab9b2e15Sgtb     err = gssint_mechglue_init();
36ab9b2e15Sgtb     if (err)
37ab9b2e15Sgtb 	return err;
38ab9b2e15Sgtb #endif
39ab9b2e15Sgtb     err = k5_mutex_finish_init(&gssint_krb5_keytab_lock);
40ab9b2e15Sgtb     if (err)
41ab9b2e15Sgtb 	return err;
42ab9b2e15Sgtb     err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free);
43ab9b2e15Sgtb     if (err)
44ab9b2e15Sgtb 	return err;
45ab9b2e15Sgtb     err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free);
46ab9b2e15Sgtb     if (err)
47ab9b2e15Sgtb 	return err;
48*5e01956fSGlenn Barry     err = k5_key_register(K5_KEY_GSS_KRB5_ERROR_MESSAGE,
49*5e01956fSGlenn Barry                           krb5_gss_delete_error_info);
50*5e01956fSGlenn Barry     if (err)
51*5e01956fSGlenn Barry 	return err;
52159d09a2SMark Phalan #ifndef _WIN32
53ab9b2e15Sgtb     err = k5_mutex_finish_init(&kg_kdc_flag_mutex);
54ab9b2e15Sgtb     if (err)
55ab9b2e15Sgtb 	return err;
56ab9b2e15Sgtb #endif
57ab9b2e15Sgtb     return k5_mutex_finish_init(&kg_vdb.mutex);
58ab9b2e15Sgtb }
59ab9b2e15Sgtb 
gssint_lib_fini(void)60ab9b2e15Sgtb void gssint_lib_fini(void)
61ab9b2e15Sgtb {
62ab9b2e15Sgtb     if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) {
63ab9b2e15Sgtb #ifdef SHOW_INITFINI_FUNCS
64ab9b2e15Sgtb 	printf("gssint_lib_fini: skipping\n");
65ab9b2e15Sgtb #endif
66ab9b2e15Sgtb 	return;
67ab9b2e15Sgtb     }
68ab9b2e15Sgtb #ifdef SHOW_INITFINI_FUNCS
69ab9b2e15Sgtb     printf("gssint_lib_fini\n");
70ab9b2e15Sgtb #endif
71ab9b2e15Sgtb #if !USE_BUNDLE_ERROR_STRINGS
72ab9b2e15Sgtb     remove_error_table(&et_k5g_error_table);
73ab9b2e15Sgtb     remove_error_table(&et_ggss_error_table);
74ab9b2e15Sgtb #endif
75ab9b2e15Sgtb     k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
76ab9b2e15Sgtb     k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
77ab9b2e15Sgtb     k5_mutex_destroy(&kg_vdb.mutex);
78159d09a2SMark Phalan #ifndef _WIN32
79ab9b2e15Sgtb     k5_mutex_destroy(&kg_kdc_flag_mutex);
80ab9b2e15Sgtb #endif
81ab9b2e15Sgtb     k5_mutex_destroy(&gssint_krb5_keytab_lock);
82ab9b2e15Sgtb #if 0 /* SUNW15resync */
83ab9b2e15Sgtb     gssint_mechglue_fini();
84ab9b2e15Sgtb #endif
85ab9b2e15Sgtb }
86ab9b2e15Sgtb 
gssint_initialize_library(void)87ab9b2e15Sgtb OM_uint32 gssint_initialize_library (void)
88ab9b2e15Sgtb {
89ab9b2e15Sgtb     return CALL_INIT_FUNCTION(gssint_lib_init);
90ab9b2e15Sgtb }
91