xref: /freebsd/crypto/heimdal/lib/krb5/pcache.c (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
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