Line data Source code
1 : /*********************************************************************** 2 : * Copyright (c) 2010, Secure Endpoints Inc. 3 : * All rights reserved. 4 : * 5 : * Redistribution and use in source and binary forms, with or without 6 : * modification, are permitted provided that the following conditions 7 : * are met: 8 : * 9 : * - Redistributions of source code must retain the above copyright 10 : * notice, this list of conditions and the following disclaimer. 11 : * 12 : * - Redistributions in binary form must reproduce the above copyright 13 : * notice, this list of conditions and the following disclaimer in 14 : * the documentation and/or other materials provided with the 15 : * distribution. 16 : * 17 : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 : * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 : * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 20 : * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 21 : * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22 : * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 : * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 : * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26 : * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 : * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 28 : * OF THE POSSIBILITY OF SUCH DAMAGE. 29 : * 30 : **********************************************************************/ 31 : 32 : #include "krb5_locl.h" 33 : #include "ccache_plugin.h" 34 : #ifdef HAVE_DLFCN_H 35 : #include <dlfcn.h> 36 : #endif 37 : #include <assert.h> 38 : 39 : /* 40 : * cc_plugin_register_to_context is executed once per krb5_init_context(). 41 : * Its job is to register the plugin's krb5_cc_ops structure with the 42 : * krb5_context. 43 : */ 44 : 45 : static krb5_error_code KRB5_LIB_CALL 46 0 : cc_plugin_register_to_context(krb5_context context, const void *plug, void *plugctx, void *userctx) 47 : { 48 0 : krb5_cc_ops *ccops = (krb5_cc_ops *)plugctx; 49 0 : krb5_error_code ret; 50 : 51 0 : if (ccops == NULL) 52 0 : return KRB5_PLUGIN_NO_HANDLE; 53 : 54 0 : ret = krb5_cc_register(context, ccops, TRUE); 55 0 : if (ret != 0) 56 0 : *((krb5_error_code *)userctx) = ret; 57 : 58 0 : return KRB5_PLUGIN_NO_HANDLE; 59 : } 60 : 61 : static const char *const ccache_plugin_deps[] = { "krb5", NULL }; 62 : 63 : static const struct heim_plugin_data 64 : ccache_plugin_data = { 65 : "krb5", 66 : KRB5_PLUGIN_CCACHE, 67 : 0, 68 : ccache_plugin_deps, 69 : krb5_get_instance 70 : }; 71 : 72 : KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 73 792004 : _krb5_load_ccache_plugins(krb5_context context) 74 : { 75 792004 : krb5_error_code userctx = 0; 76 : 77 792004 : (void)_krb5_plugin_run_f(context, &ccache_plugin_data, 0, 78 : &userctx, cc_plugin_register_to_context); 79 : 80 792004 : return userctx; 81 : }