xref: /illumos-gate/usr/src/lib/gss_mechs/mech_krb5/mech/gss_libinit.c (revision dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9)
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 "gssapi_err_generic.h"
10 #include "gssapi_err_krb5.h"
11 #include "gssapiP_krb5.h"
12 
13 #include "gss_libinit.h"
14 #include "k5-platform.h"
15 
16 #include "mglueP.h"
17 
18 /*
19  * Initialize the GSSAPI library.
20  */
21 
22 MAKE_INIT_FUNCTION(gssint_lib_init);
23 MAKE_FINI_FUNCTION(gssint_lib_fini);
24 
25 int gssint_lib_init(void)
26 {
27     int err;
28 
29 #ifdef SHOW_INITFINI_FUNCS
30     printf("gssint_lib_init\n");
31 #endif
32 
33 #if !USE_BUNDLE_ERROR_STRINGS
34     add_error_table(&et_k5g_error_table);
35     add_error_table(&et_ggss_error_table);
36 #endif
37 #if 0 /* SUNW15resync */
38     err = gssint_mechglue_init();
39     if (err)
40 	return err;
41 #endif
42     err = k5_mutex_finish_init(&gssint_krb5_keytab_lock);
43     if (err)
44 	return err;
45     err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free);
46     if (err)
47 	return err;
48     err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free);
49     if (err)
50 	return err;
51 #ifndef _WIN32
52     err = k5_mutex_finish_init(&kg_kdc_flag_mutex);
53     if (err)
54 	return err;
55 #endif
56     return k5_mutex_finish_init(&kg_vdb.mutex);
57 }
58 
59 void gssint_lib_fini(void)
60 {
61     if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) {
62 #ifdef SHOW_INITFINI_FUNCS
63 	printf("gssint_lib_fini: skipping\n");
64 #endif
65 	return;
66     }
67 #ifdef SHOW_INITFINI_FUNCS
68     printf("gssint_lib_fini\n");
69 #endif
70 #if !USE_BUNDLE_ERROR_STRINGS
71     remove_error_table(&et_k5g_error_table);
72     remove_error_table(&et_ggss_error_table);
73 #endif
74     k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
75     k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
76     k5_mutex_destroy(&kg_vdb.mutex);
77 #ifndef _WIN32
78     k5_mutex_destroy(&kg_kdc_flag_mutex);
79 #endif
80     k5_mutex_destroy(&gssint_krb5_keytab_lock);
81 #if 0 /* SUNW15resync */
82     gssint_mechglue_fini();
83 #endif
84 }
85 
86 OM_uint32 gssint_initialize_library (void)
87 {
88     return CALL_INIT_FUNCTION(gssint_lib_init);
89 }
90