#include "k5-int.h"
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <db.h>
#include <stdio.h>
#include <errno.h>
#include <utime.h>
#include "kdb5.h"
#include "kdb_db2.h"
#include "kdb_xdr.h"
#include "policy_db.h"
k5_mutex_t *krb5_db2_mutex;
#define WRAP(NAME,TYPE,ARGLIST,ARGNAMES) \
static TYPE wrap_##NAME ARGLIST \
{ \
TYPE result; \
k5_mutex_lock (krb5_db2_mutex); \
result = NAME ARGNAMES; \
k5_mutex_unlock (krb5_db2_mutex); \
return result; \
} \
\
static TYPE wrap_##NAME ARGLIST
#define WRAP_VOID(NAME,ARGLIST,ARGNAMES) \
static void wrap_##NAME ARGLIST \
{ \
k5_mutex_lock (krb5_db2_mutex); \
NAME ARGNAMES; \
k5_mutex_unlock (krb5_db2_mutex); \
} \
\
static void wrap_##NAME ARGLIST
#define WRAP_K(NAME,ARGLIST,ARGNAMES) \
WRAP(NAME,krb5_error_code,ARGLIST,ARGNAMES)
WRAP_K (krb5_db2_open,
( krb5_context kcontext,
char *conf_section,
char **db_args,
int mode ),
(kcontext, conf_section, db_args, mode));
WRAP_K (krb5_db2_fini, (krb5_context ctx), (ctx));
WRAP_K (krb5_db2_create,
( krb5_context kcontext, char *conf_section, char **db_args ),
(kcontext, conf_section, db_args));
WRAP_K (krb5_db2_destroy,
( krb5_context kcontext, char *conf_section, char **db_args ),
(kcontext, conf_section, db_args));
WRAP_K (krb5_db2_get_age,
(krb5_context ctx,
char *s,
time_t *t),
(ctx, s, t));
WRAP_K (krb5_db2_lock,
( krb5_context context,
int in_mode),
(context, in_mode));
WRAP_K (krb5_db2_unlock, (krb5_context ctx), (ctx));
WRAP_K (krb5_db2_get_principal,
(krb5_context ctx,
krb5_const_principal p,
unsigned int f,
krb5_db_entry **d),
(ctx, p, f, d));
WRAP_K (krb5_db2_put_principal,
(krb5_context ctx,
krb5_db_entry *d,
char **db_args),
(ctx, d, db_args));
WRAP_K (krb5_db2_delete_principal,
(krb5_context context,
krb5_const_principal searchfor),
(context, searchfor));
WRAP_K (krb5_db2_iterate,
(krb5_context ctx, char *s,
krb5_error_code (*f) (krb5_pointer,
krb5_db_entry *),
krb5_pointer p, krb5_flags flags),
(ctx, s, f, p, flags));
WRAP_K (krb5_db2_create_policy,
(krb5_context context, osa_policy_ent_t entry),
(context, entry));
WRAP_K (krb5_db2_get_policy,
( krb5_context kcontext,
char *name,
osa_policy_ent_t *policy),
(kcontext, name, policy));
WRAP_K (krb5_db2_put_policy,
( krb5_context kcontext, osa_policy_ent_t policy ),
(kcontext, policy));
WRAP_K (krb5_db2_iter_policy,
( krb5_context kcontext,
char *match_entry,
osa_adb_iter_policy_func func,
void *data ),
(kcontext, match_entry, func, data));
WRAP_K (krb5_db2_delete_policy,
( krb5_context kcontext, char *policy ),
(kcontext, policy));
WRAP_K (krb5_db2_promote_db,
( krb5_context kcontext, char *conf_section, char **db_args ),
(kcontext, conf_section, db_args));
WRAP_K (krb5_db2_check_policy_as,
(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *client,
krb5_db_entry *server, krb5_timestamp kdc_time, const char **status,
krb5_pa_data ***e_data),
(kcontext, request, client, server, kdc_time, status, e_data));
WRAP_VOID (krb5_db2_audit_as_req,
(krb5_context kcontext, krb5_kdc_req *request,
const krb5_address *local_addr,
const krb5_address *remote_addr,
krb5_db_entry *client, krb5_db_entry *server,
krb5_timestamp authtime, krb5_error_code error_code),
(kcontext, request, local_addr, remote_addr, client, server,
authtime, error_code));
static krb5_error_code
hack_init (void)
{
krb5_error_code c;
c = krb5int_mutex_alloc (&krb5_db2_mutex);
if (c)
return c;
return krb5_db2_lib_init ();
}
static krb5_error_code
hack_cleanup (void)
{
krb5int_mutex_free (krb5_db2_mutex);
krb5_db2_mutex = NULL;
return krb5_db2_lib_cleanup();
}
kdb_vftabl PLUGIN_SYMBOL_NAME(krb5_db2, kdb_function_table) = {
KRB5_KDB_DAL_MAJOR_VERSION,
0,
hack_init,
hack_cleanup,
wrap_krb5_db2_open,
wrap_krb5_db2_fini,
wrap_krb5_db2_create,
wrap_krb5_db2_destroy,
wrap_krb5_db2_get_age,
wrap_krb5_db2_lock,
wrap_krb5_db2_unlock,
wrap_krb5_db2_get_principal,
wrap_krb5_db2_put_principal,
wrap_krb5_db2_delete_principal,
NULL,
wrap_krb5_db2_iterate,
wrap_krb5_db2_create_policy,
wrap_krb5_db2_get_policy,
wrap_krb5_db2_put_policy,
wrap_krb5_db2_iter_policy,
wrap_krb5_db2_delete_policy,
NULL,
NULL,
NULL,
NULL,
NULL,
wrap_krb5_db2_promote_db,
NULL,
NULL,
NULL,
wrap_krb5_db2_check_policy_as,
NULL,
wrap_krb5_db2_audit_as_req,
};