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