1*ae771770SStanislav Sedov /***********************************************************************
2*ae771770SStanislav Sedov * Copyright (c) 2010, Secure Endpoints Inc.
3*ae771770SStanislav Sedov * All rights reserved.
4*ae771770SStanislav Sedov *
5*ae771770SStanislav Sedov * Redistribution and use in source and binary forms, with or without
6*ae771770SStanislav Sedov * modification, are permitted provided that the following conditions
7*ae771770SStanislav Sedov * are met:
8*ae771770SStanislav Sedov *
9*ae771770SStanislav Sedov * - Redistributions of source code must retain the above copyright
10*ae771770SStanislav Sedov * notice, this list of conditions and the following disclaimer.
11*ae771770SStanislav Sedov *
12*ae771770SStanislav Sedov * - Redistributions in binary form must reproduce the above copyright
13*ae771770SStanislav Sedov * notice, this list of conditions and the following disclaimer in
14*ae771770SStanislav Sedov * the documentation and/or other materials provided with the
15*ae771770SStanislav Sedov * distribution.
16*ae771770SStanislav Sedov *
17*ae771770SStanislav Sedov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*ae771770SStanislav Sedov * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*ae771770SStanislav Sedov * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20*ae771770SStanislav Sedov * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21*ae771770SStanislav Sedov * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22*ae771770SStanislav Sedov * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23*ae771770SStanislav Sedov * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24*ae771770SStanislav Sedov * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*ae771770SStanislav Sedov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26*ae771770SStanislav Sedov * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*ae771770SStanislav Sedov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28*ae771770SStanislav Sedov * OF THE POSSIBILITY OF SUCH DAMAGE.
29*ae771770SStanislav Sedov *
30*ae771770SStanislav Sedov **********************************************************************/
31*ae771770SStanislav Sedov
32*ae771770SStanislav Sedov #include "krb5_locl.h"
33*ae771770SStanislav Sedov #include "ccache_plugin.h"
34*ae771770SStanislav Sedov #ifdef HAVE_DLFCN_H
35*ae771770SStanislav Sedov #include <dlfcn.h>
36*ae771770SStanislav Sedov #endif
37*ae771770SStanislav Sedov #include <assert.h>
38*ae771770SStanislav Sedov
39*ae771770SStanislav Sedov krb5_error_code
_krb5_load_ccache_plugins(krb5_context context)40*ae771770SStanislav Sedov _krb5_load_ccache_plugins(krb5_context context)
41*ae771770SStanislav Sedov {
42*ae771770SStanislav Sedov struct krb5_plugin * plist = NULL;
43*ae771770SStanislav Sedov struct krb5_plugin *p;
44*ae771770SStanislav Sedov krb5_error_code code;
45*ae771770SStanislav Sedov
46*ae771770SStanislav Sedov code = _krb5_plugin_find(context, PLUGIN_TYPE_DATA, KRB5_PLUGIN_CCACHE,
47*ae771770SStanislav Sedov &plist);
48*ae771770SStanislav Sedov if (code)
49*ae771770SStanislav Sedov return code;
50*ae771770SStanislav Sedov
51*ae771770SStanislav Sedov for (p = plist; p != NULL; p = _krb5_plugin_get_next(p)) {
52*ae771770SStanislav Sedov krb5_cc_ops * ccops;
53*ae771770SStanislav Sedov krb5_error_code c_load;
54*ae771770SStanislav Sedov
55*ae771770SStanislav Sedov ccops = _krb5_plugin_get_symbol(p);
56*ae771770SStanislav Sedov if (ccops != NULL && ccops->version == KRB5_CC_OPS_VERSION) {
57*ae771770SStanislav Sedov c_load = krb5_cc_register(context, ccops, TRUE);
58*ae771770SStanislav Sedov if (c_load != 0)
59*ae771770SStanislav Sedov code = c_load;
60*ae771770SStanislav Sedov }
61*ae771770SStanislav Sedov }
62*ae771770SStanislav Sedov
63*ae771770SStanislav Sedov _krb5_plugin_free(plist);
64*ae771770SStanislav Sedov
65*ae771770SStanislav Sedov return code;
66*ae771770SStanislav Sedov }
67