54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
2dd2efa5a06a9befe46075cf41e16f57533c9f98willf * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Use is subject to license terms.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Copyright 2006 by the Massachusetts Institute of Technology.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * All Rights Reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Export of this software from the United States of America may
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * require a specific license from the United States Government.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * It is the responsibility of any person or organization contemplating
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * export to obtain such a license before exporting.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * distribute this software and its documentation for any purpose and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * without fee is hereby granted, provided that the above copyright
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * notice appear in all copies and that both that copyright notice and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this permission notice appear in supporting documentation, and that
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * the name of M.I.T. not be used in advertising or publicity pertaining
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * to distribution of the software without specific, written prior
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * permission. Furthermore if you modify this software you must label
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * your software as modified software and not distribute it in such a
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * fashion that it might be confused with the original M.I.T. software.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * M.I.T. makes no representations about the suitability of
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this software for any purpose. It is provided "as is" without express
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * or implied warranty.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/**********************************************************************
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf* C %name: db2_exp.c %
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf* Instance: idc_sec_2
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf* Description:
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf* %created_by: spradeep %
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf* %date_created: Tue Apr 5 11:44:00 2005 %
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf**********************************************************************/
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#ifndef lint
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic char *_csrc = "@(#) %filespec: db2_exp.c~5 % (%full_filespec: db2_exp.c~5:csrc:idc_sec#2 %)";
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include "k5-int.h"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#if HAVE_UNISTD_H
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <unistd.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <db.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <stdio.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <errno.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <utime.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <kdb/kdb5.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include "kdb_db2.h"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include "kdb_xdr.h"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include "policy_db.h"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Quick and dirty wrapper functions to provide for thread safety
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf within the plugin, instead of making the kdb5 library do it. Eventually
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf these should be integrated into the real functions.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf Some of the functions wrapped here are also called directly from
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf within this library (e.g., create calls open), so simply dropping
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf locking code into the top and bottom of each referenced function
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf won't do. (We aren't doing recursive locks, currently.) */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic k5_mutex_t *krb5_db2_mutex;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#define WRAP(NAME,TYPE,ARGLIST,ARGNAMES,ERROR_RESULT) \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf static TYPE wrap_##NAME ARGLIST \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf { \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf TYPE result; \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int code = k5_mutex_lock (krb5_db2_mutex); \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (code) { return ERROR_RESULT; } \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf result = NAME ARGNAMES; \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf k5_mutex_unlock (krb5_db2_mutex); \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return result; \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* hack: decl to allow a following ";" */ \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf static TYPE wrap_##NAME ()
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Two special cases: void (can't assign result), and krb5_error_code
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (return error from locking code). */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#define WRAP_VOID(NAME,ARGLIST,ARGNAMES) \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf static void wrap_##NAME ARGLIST \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf { \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int code = k5_mutex_lock (krb5_db2_mutex); \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (code) { return; } \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf NAME ARGNAMES; \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf k5_mutex_unlock (krb5_db2_mutex); \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* hack: decl to allow a following ";" */ \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf static void wrap_##NAME ()
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#define WRAP_K(NAME,ARGLIST,ARGNAMES) \
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf WRAP(NAME,krb5_error_code,ARGLIST,ARGNAMES,code)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_open,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *conf_section,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char **db_args,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int mode ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, conf_section, db_args, mode));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_fini, (krb5_context ctx), (ctx));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_create,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, char *conf_section, char **db_args ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, conf_section, db_args));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_destroy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, char *conf_section, char **db_args ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, conf_section, db_args));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_get_age,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context ctx,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *s,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf time_t *t),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (ctx, s, t));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_set_option,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int option,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf void *value ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, option, value));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_lock,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context context,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int in_mode),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (context, in_mode));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_unlock, (krb5_context ctx), (ctx));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_get_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context ctx,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_const_principal p,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_db_entry *d,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int * i,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_boolean *b),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (ctx, p, d, i, b));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_free_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context ctx,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_db_entry *d,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int i),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (ctx, d, i));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_put_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context ctx,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_db_entry *d,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int *i,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char **db_args),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (ctx, d, i, db_args));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_delete_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context context,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_const_principal searchfor,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int *nentries),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (context, searchfor, nentries));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
2dd2efa5a06a9befe46075cf41e16f57533c9f98willf/* Solaris Kerberos: adding support for db_args */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_iterate,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context ctx, char *s,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_error_code (*f) (krb5_pointer,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_db_entry *),
2dd2efa5a06a9befe46075cf41e16f57533c9f98willf krb5_pointer p,
2dd2efa5a06a9befe46075cf41e16f57533c9f98willf char **db_args),
2dd2efa5a06a9befe46075cf41e16f57533c9f98willf (ctx, s, f, p, db_args));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_create_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (krb5_context context, osa_policy_ent_t entry),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (context, entry));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_get_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *name,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf osa_policy_ent_t *policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int *cnt),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, name, policy, cnt));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_put_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, osa_policy_ent_t policy ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, policy));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_iter_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *match_entry,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf osa_adb_iter_policy_func func,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf void *data ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, match_entry, func, data));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_delete_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, char *policy ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, policy));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_VOID (krb5_db2_free_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, osa_policy_ent_t entry ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, entry));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP (krb5_db2_alloc, void *,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf void *ptr,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf size_t size ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, ptr, size), NULL);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_VOID (krb5_db2_free,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, void *ptr ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, ptr));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_set_master_key_ext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, char *pwd, krb5_keyblock *key),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, pwd, key));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_db_get_mkey,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context context, krb5_keyblock **key),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (context, key));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfWRAP_K (krb5_db2_promote_db,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ( krb5_context kcontext, char *conf_section, char **db_args ),
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (kcontext, conf_section, db_args));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic krb5_error_code
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfhack_init ()
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_error_code c;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf c = krb5int_mutex_alloc (&krb5_db2_mutex);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (c)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return c;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return krb5_db2_lib_init ();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic krb5_error_code
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfhack_cleanup (void)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5int_mutex_free (krb5_db2_mutex);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_db2_mutex = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return krb5_db2_lib_cleanup();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Exposed API
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfkdb_vftabl kdb_function_table = {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* major version number 1 */ 1,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* minor version number 0 */ 0,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* Solaris Kerberos: iprop support */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* iprop_supported, yes for db2 */ 1,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* init_library */ hack_init,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* fini_library */ hack_cleanup,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* init_module */ wrap_krb5_db2_open,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* fini_module */ wrap_krb5_db2_db_fini,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_create */ wrap_krb5_db2_create,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_destroy */ wrap_krb5_db2_destroy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_get_age */ wrap_krb5_db2_db_get_age,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_set_option */ wrap_krb5_db2_db_set_option,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_lock */ wrap_krb5_db2_db_lock,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_unlock */ wrap_krb5_db2_db_unlock,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_get_principal */ wrap_krb5_db2_db_get_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* Solaris Kerberos: need a nolock for iprop */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_get_principal_nolock */ krb5_db2_db_get_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_free_principal */ wrap_krb5_db2_db_free_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_put_principal */ wrap_krb5_db2_db_put_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_delete_principal */ wrap_krb5_db2_db_delete_principal,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_iterate */ wrap_krb5_db2_db_iterate,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_create_policy */ wrap_krb5_db2_create_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_get_policy */ wrap_krb5_db2_get_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_put_policy */ wrap_krb5_db2_put_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_iter_policy */ wrap_krb5_db2_iter_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_delete_policy */ wrap_krb5_db2_delete_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_free_policy */ wrap_krb5_db2_free_policy,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_supported_realms */ NULL,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_free_supported_realms */ NULL,
7c64d3750da7fda7e450b8f9b0b963905ded6379mp /* errcode_2_string */ krb5_db2_errcode_2_string,
7c64d3750da7fda7e450b8f9b0b963905ded6379mp /* release_errcode_string */ krb5_db2_release_errcode_string,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_alloc */ wrap_krb5_db2_alloc,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* db_free */ wrap_krb5_db2_free,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* set_master_key */ wrap_krb5_db2_set_master_key_ext,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* get_master_key */ wrap_krb5_db2_db_get_mkey,
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan /* blah blah blah */ 0,0,0,0,0,0,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* promote_db */ wrap_krb5_db2_promote_db,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf};