Allow _gss_string_to_oid() without HAVE_DLOPEN
[heimdal.git] / tests / plugin / windc.c
blob65d0ddf86d5c581d3ef186716d48ef0c450a8076
1 #include <string.h>
2 #include <krb5.h>
3 #include <hdb.h>
4 #include <hx509.h>
5 #include <kdc.h>
6 #include <windc_plugin.h>
8 static krb5_error_code
9 windc_init(krb5_context context, void **ctx)
11 krb5_warnx(context, "windc init");
12 *ctx = NULL;
13 return 0;
16 static void
17 windc_fini(void *ctx)
21 static krb5_error_code
22 pac_generate(void *ctx, krb5_context context,
23 struct hdb_entry_ex *client, krb5_pac *pac)
25 krb5_error_code ret;
26 krb5_data data;
28 krb5_warnx(context, "pac generate");
30 data.data = "\x00\x01";
31 data.length = 2;
33 ret = krb5_pac_init(context, pac);
34 if (ret)
35 return ret;
37 ret = krb5_pac_add_buffer(context, *pac, 1, &data);
38 if (ret)
39 return ret;
41 return 0;
44 static krb5_error_code
45 pac_verify(void *ctx, krb5_context context,
46 const krb5_principal new_ticket_client,
47 const krb5_principal delegation_proxy,
48 struct hdb_entry_ex * client,
49 struct hdb_entry_ex * server,
50 struct hdb_entry_ex * krbtgt,
51 krb5_pac *pac)
53 krb5_error_code ret;
54 krb5_data data;
56 krb5_warnx(context, "pac_verify");
58 ret = krb5_pac_get_buffer(context, *pac, 1, &data);
59 if (ret)
60 return ret;
62 krb5_data_free(&data);
64 return 0;
67 static krb5_error_code
68 client_access(void *ctx,
69 krb5_context context,
70 krb5_kdc_configuration *config,
71 hdb_entry_ex *client, const char *client_name,
72 hdb_entry_ex *server, const char *server_name,
73 KDC_REQ *req,
74 METHOD_DATA *data)
76 krb5_warnx(context, "client_access");
77 return 0;
80 static krb5plugin_windc_ftable windc = {
81 KRB5_WINDC_PLUGING_MINOR,
82 windc_init,
83 windc_fini,
84 pac_generate,
85 pac_verify,
86 client_access
89 static const krb5plugin_windc_ftable *const windc_plugins[] = {
90 &windc
93 krb5_error_code
94 windc_plugin_load(krb5_context context,
95 krb5_get_instance_func_t *get_instance,
96 size_t *num_plugins,
97 const krb5plugin_windc_ftable *const **plugins);
99 static uintptr_t
100 windc_get_instance(const char *libname)
102 if (strcmp(libname, "hdb") == 0)
103 return hdb_get_instance(libname);
104 else if (strcmp(libname, "krb5") == 0)
105 return krb5_get_instance(libname);
107 return 0;
110 krb5_error_code
111 windc_plugin_load(krb5_context context,
112 krb5_get_instance_func_t *get_instance,
113 size_t *num_plugins,
114 const krb5plugin_windc_ftable *const **plugins)
116 *get_instance = windc_get_instance;
117 *num_plugins = sizeof(windc_plugins) / sizeof(windc_plugins[0]);
118 *plugins = windc_plugins;
120 return 0;