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