1#include <krb5.h>
2#include <hdb.h>
3#include <kdc.h>
4#include <windc_plugin.h>
5
6static krb5_error_code
7windc_init(krb5_context context, void **ctx)
8{
9    krb5_warnx(context, "windc init");
10    *ctx = NULL;
11    return 0;
12}
13
14static void
15windc_fini(void *ctx)
16{
17}
18
19static krb5_error_code
20pac_generate(void *ctx, krb5_context context,
21	     struct hdb_entry_ex *client, krb5_pac *pac)
22{
23    krb5_error_code ret;
24    krb5_data data;
25
26    krb5_warnx(context, "pac generate");
27
28    data.data = "\x00\x01";
29    data.length = 2;
30
31    ret = krb5_pac_init(context, pac);
32    if (ret)
33	return ret;
34
35    ret = krb5_pac_add_buffer(context, *pac, 1, &data);
36    if (ret)
37	return ret;
38
39    return 0;
40}
41
42static krb5_error_code
43pac_verify(void *ctx, krb5_context context,
44	   const krb5_principal new_ticket_client,
45	   const krb5_principal delegation_proxy,
46	   struct hdb_entry_ex * client,
47	   struct hdb_entry_ex * server,
48	   struct hdb_entry_ex * krbtgt,
49	   krb5_pac *pac)
50{
51    krb5_error_code ret;
52    krb5_data data;
53
54    krb5_warnx(context, "pac_verify");
55
56    ret = krb5_pac_get_buffer(context, *pac, 1, &data);
57    if (ret)
58	return ret;
59
60    krb5_data_free(&data);
61
62    return 0;
63}
64
65static krb5_error_code
66client_access(void *ctx,
67	      krb5_context context,
68	      krb5_kdc_configuration *config,
69	      hdb_entry_ex *client, const char *client_name,
70	      hdb_entry_ex *server, const char *server_name,
71	      KDC_REQ *req,
72	      METHOD_DATA *data)
73{
74    krb5_warnx(context, "client_access");
75    return 0;
76}
77
78krb5plugin_windc_ftable windc = {
79    KRB5_WINDC_PLUGING_MINOR,
80    windc_init,
81    windc_fini,
82    pac_generate,
83    pac_verify,
84    client_access
85};
86