1 /*
2  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 #include <assert.h>
9 
10 #include "gssapi_err_generic.h"
11 #include "gssapi_err_krb5.h"
12 #include "gssapiP_krb5.h"
13 
14 #include "gss_libinit.h"
15 #include "k5-platform.h"
16 
17 #include "mglueP.h"
18 
19 /*
20  * Initialize the GSSAPI library.
21  */
22 
23 MAKE_INIT_FUNCTION(gssint_lib_init);
24 MAKE_FINI_FUNCTION(gssint_lib_fini);
25 
26 int gssint_lib_init(void)
27 {
28     int err;
29 
30 #ifdef SHOW_INITFINI_FUNCS
31     printf("gssint_lib_init\n");
32 #endif
33 
34 #if !USE_BUNDLE_ERROR_STRINGS
35     add_error_table(&et_k5g_error_table);
36     add_error_table(&et_ggss_error_table);
37 #endif
38 #if 0 /* SUNW15resync */
39     err = gssint_mechglue_init();
40     if (err)
41 	return err;
42 #endif
43     err = k5_mutex_finish_init(&gssint_krb5_keytab_lock);
44     if (err)
45 	return err;
46     err = k5_key_register(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME, free);
47     if (err)
48 	return err;
49     err = k5_key_register(K5_KEY_GSS_KRB5_CCACHE_NAME, free);
50     if (err)
51 	return err;
52 #if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */
53     err = k5_mutex_finish_init(&kg_kdc_flag_mutex);
54     if (err)
55 	return err;
56 #endif
57     return k5_mutex_finish_init(&kg_vdb.mutex);
58 }
59 
60 void gssint_lib_fini(void)
61 {
62     if (!INITIALIZER_RAN(gssint_lib_init) || PROGRAM_EXITING()) {
63 #ifdef SHOW_INITFINI_FUNCS
64 	printf("gssint_lib_fini: skipping\n");
65 #endif
66 	return;
67     }
68 #ifdef SHOW_INITFINI_FUNCS
69     printf("gssint_lib_fini\n");
70 #endif
71 #if !USE_BUNDLE_ERROR_STRINGS
72     remove_error_table(&et_k5g_error_table);
73     remove_error_table(&et_ggss_error_table);
74 #endif
75     k5_key_delete(K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME);
76     k5_key_delete(K5_KEY_GSS_KRB5_CCACHE_NAME);
77     k5_mutex_destroy(&kg_vdb.mutex);
78 #if 0 /* SUNW15resync - revisit when mech resynced w/1.5 */
79     k5_mutex_destroy(&kg_kdc_flag_mutex);
80 #endif
81     k5_mutex_destroy(&gssint_krb5_keytab_lock);
82 #if 0 /* SUNW15resync */
83     gssint_mechglue_fini();
84 #endif
85 }
86 
87 OM_uint32 gssint_initialize_library (void)
88 {
89     return CALL_INIT_FUNCTION(gssint_lib_init);
90 }
91