155682Smarkm/* 2178825Sdfr * Copyright (c) 1997 - 2007 Kungliga Tekniska H�gskolan 355682Smarkm * (Royal Institute of Technology, Stockholm, Sweden). 455682Smarkm * All rights reserved. 555682Smarkm * 655682Smarkm * Redistribution and use in source and binary forms, with or without 755682Smarkm * modification, are permitted provided that the following conditions 855682Smarkm * are met: 955682Smarkm * 1055682Smarkm * 1. Redistributions of source code must retain the above copyright 1155682Smarkm * notice, this list of conditions and the following disclaimer. 1255682Smarkm * 1355682Smarkm * 2. Redistributions in binary form must reproduce the above copyright 1455682Smarkm * notice, this list of conditions and the following disclaimer in the 1555682Smarkm * documentation and/or other materials provided with the distribution. 1655682Smarkm * 1755682Smarkm * 3. Neither the name of the Institute nor the names of its contributors 1855682Smarkm * may be used to endorse or promote products derived from this software 1955682Smarkm * without specific prior written permission. 2055682Smarkm * 2155682Smarkm * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 2255682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2355682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2455682Smarkm * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 2555682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2655682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2755682Smarkm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2855682Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2955682Smarkm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3055682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3155682Smarkm * SUCH DAMAGE. 3255682Smarkm */ 3355682Smarkm 34178825Sdfr/* $Id: hdb.h 22198 2007-12-07 13:09:25Z lha $ */ 3555682Smarkm 3655682Smarkm#ifndef __HDB_H__ 3755682Smarkm#define __HDB_H__ 3855682Smarkm 3955682Smarkm#include <hdb_err.h> 4055682Smarkm 41178825Sdfr#include <heim_asn1.h> 4255682Smarkm#include <hdb_asn1.h> 4355682Smarkm 44178825Sdfrstruct hdb_dbinfo; 45178825Sdfr 4655682Smarkmenum hdb_lockop{ HDB_RLOCK, HDB_WLOCK }; 4755682Smarkm 4855682Smarkm/* flags for various functions */ 49178825Sdfr#define HDB_F_DECRYPT 1 /* decrypt keys */ 50178825Sdfr#define HDB_F_REPLACE 2 /* replace entry */ 51178825Sdfr#define HDB_F_GET_CLIENT 4 /* fetch client */ 52178825Sdfr#define HDB_F_GET_SERVER 8 /* fetch server */ 53178825Sdfr#define HDB_F_GET_KRBTGT 16 /* fetch krbtgt */ 54178825Sdfr#define HDB_F_GET_ANY 28 /* fetch any of client,server,krbtgt */ 55178825Sdfr#define HDB_F_CANON 32 /* want canonicalition */ 5655682Smarkm 5772445Sassar/* key usage for master key */ 5872445Sassar#define HDB_KU_MKEY 0x484442 5972445Sassar 6072445Sassartypedef struct hdb_master_key_data *hdb_master_key; 6172445Sassar 62178825Sdfrtypedef struct hdb_entry_ex { 63178825Sdfr void *ctx; 64178825Sdfr hdb_entry entry; 65178825Sdfr void (*free_entry)(krb5_context, struct hdb_entry_ex *); 66178825Sdfr} hdb_entry_ex; 67178825Sdfr 68178825Sdfr 6955682Smarkmtypedef struct HDB{ 70178825Sdfr void *hdb_db; 71178825Sdfr void *hdb_dbc; 72178825Sdfr char *hdb_name; 73178825Sdfr int hdb_master_key_set; 74178825Sdfr hdb_master_key hdb_master_key; 75178825Sdfr int hdb_openp; 7655682Smarkm 77178825Sdfr krb5_error_code (*hdb_open)(krb5_context, 78178825Sdfr struct HDB*, 79178825Sdfr int, 80178825Sdfr mode_t); 81178825Sdfr krb5_error_code (*hdb_close)(krb5_context, 82178825Sdfr struct HDB*); 83178825Sdfr void (*hdb_free)(krb5_context, 84178825Sdfr struct HDB*, 85178825Sdfr hdb_entry_ex*); 86178825Sdfr krb5_error_code (*hdb_fetch)(krb5_context, 87178825Sdfr struct HDB*, 88178825Sdfr krb5_const_principal, 89178825Sdfr unsigned, 90178825Sdfr hdb_entry_ex*); 91178825Sdfr krb5_error_code (*hdb_store)(krb5_context, 92178825Sdfr struct HDB*, 93178825Sdfr unsigned, 94178825Sdfr hdb_entry_ex*); 95178825Sdfr krb5_error_code (*hdb_remove)(krb5_context, 96178825Sdfr struct HDB*, 97178825Sdfr krb5_const_principal); 98178825Sdfr krb5_error_code (*hdb_firstkey)(krb5_context, 99178825Sdfr struct HDB*, 100178825Sdfr unsigned, 101178825Sdfr hdb_entry_ex*); 102178825Sdfr krb5_error_code (*hdb_nextkey)(krb5_context, 103178825Sdfr struct HDB*, 104178825Sdfr unsigned, 105178825Sdfr hdb_entry_ex*); 106178825Sdfr krb5_error_code (*hdb_lock)(krb5_context, 107178825Sdfr struct HDB*, 108178825Sdfr int operation); 109178825Sdfr krb5_error_code (*hdb_unlock)(krb5_context, 110178825Sdfr struct HDB*); 111178825Sdfr krb5_error_code (*hdb_rename)(krb5_context, 112178825Sdfr struct HDB*, 113178825Sdfr const char*); 114178825Sdfr krb5_error_code (*hdb__get)(krb5_context, 115178825Sdfr struct HDB*, 116178825Sdfr krb5_data, 117178825Sdfr krb5_data*); 118178825Sdfr krb5_error_code (*hdb__put)(krb5_context, 119178825Sdfr struct HDB*, 120178825Sdfr int, 121178825Sdfr krb5_data, 122178825Sdfr krb5_data); 123178825Sdfr krb5_error_code (*hdb__del)(krb5_context, 124178825Sdfr struct HDB*, 125178825Sdfr krb5_data); 126178825Sdfr krb5_error_code (*hdb_destroy)(krb5_context, 127178825Sdfr struct HDB*); 12855682Smarkm}HDB; 12955682Smarkm 130178825Sdfr#define HDB_INTERFACE_VERSION 4 13155682Smarkm 132178825Sdfrstruct hdb_so_method { 133178825Sdfr int version; 134178825Sdfr const char *prefix; 135178825Sdfr krb5_error_code (*create)(krb5_context, HDB **, const char *filename); 136178825Sdfr}; 137178825Sdfr 13855682Smarkmtypedef krb5_error_code (*hdb_foreach_func_t)(krb5_context, HDB*, 139178825Sdfr hdb_entry_ex*, void*); 14055682Smarkmextern krb5_kt_ops hdb_kt_ops; 14155682Smarkm 14255682Smarkm#include <hdb-protos.h> 14355682Smarkm 14455682Smarkm#endif /* __HDB_H__ */ 145