1 /* 2 * Copyright (c) 1997 - 2007 Kungliga Tekniska H�gskolan 3 * (Royal Institute of Technology, Stockholm, Sweden). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of the Institute nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34 /* $Id: hdb.h 22198 2007-12-07 13:09:25Z lha $ */ 35 36 #ifndef __HDB_H__ 37 #define __HDB_H__ 38 39 #include <hdb_err.h> 40 41 #include <heim_asn1.h> 42 #include <hdb_asn1.h> 43 44 struct hdb_dbinfo; 45 46 enum hdb_lockop{ HDB_RLOCK, HDB_WLOCK }; 47 48 /* flags for various functions */ 49 #define HDB_F_DECRYPT 1 /* decrypt keys */ 50 #define HDB_F_REPLACE 2 /* replace entry */ 51 #define HDB_F_GET_CLIENT 4 /* fetch client */ 52 #define HDB_F_GET_SERVER 8 /* fetch server */ 53 #define HDB_F_GET_KRBTGT 16 /* fetch krbtgt */ 54 #define HDB_F_GET_ANY 28 /* fetch any of client,server,krbtgt */ 55 #define HDB_F_CANON 32 /* want canonicalition */ 56 57 /* key usage for master key */ 58 #define HDB_KU_MKEY 0x484442 59 60 typedef struct hdb_master_key_data *hdb_master_key; 61 62 typedef struct hdb_entry_ex { 63 void *ctx; 64 hdb_entry entry; 65 void (*free_entry)(krb5_context, struct hdb_entry_ex *); 66 } hdb_entry_ex; 67 68 69 typedef struct HDB{ 70 void *hdb_db; 71 void *hdb_dbc; 72 char *hdb_name; 73 int hdb_master_key_set; 74 hdb_master_key hdb_master_key; 75 int hdb_openp; 76 77 krb5_error_code (*hdb_open)(krb5_context, 78 struct HDB*, 79 int, 80 mode_t); 81 krb5_error_code (*hdb_close)(krb5_context, 82 struct HDB*); 83 void (*hdb_free)(krb5_context, 84 struct HDB*, 85 hdb_entry_ex*); 86 krb5_error_code (*hdb_fetch)(krb5_context, 87 struct HDB*, 88 krb5_const_principal, 89 unsigned, 90 hdb_entry_ex*); 91 krb5_error_code (*hdb_store)(krb5_context, 92 struct HDB*, 93 unsigned, 94 hdb_entry_ex*); 95 krb5_error_code (*hdb_remove)(krb5_context, 96 struct HDB*, 97 krb5_const_principal); 98 krb5_error_code (*hdb_firstkey)(krb5_context, 99 struct HDB*, 100 unsigned, 101 hdb_entry_ex*); 102 krb5_error_code (*hdb_nextkey)(krb5_context, 103 struct HDB*, 104 unsigned, 105 hdb_entry_ex*); 106 krb5_error_code (*hdb_lock)(krb5_context, 107 struct HDB*, 108 int operation); 109 krb5_error_code (*hdb_unlock)(krb5_context, 110 struct HDB*); 111 krb5_error_code (*hdb_rename)(krb5_context, 112 struct HDB*, 113 const char*); 114 krb5_error_code (*hdb__get)(krb5_context, 115 struct HDB*, 116 krb5_data, 117 krb5_data*); 118 krb5_error_code (*hdb__put)(krb5_context, 119 struct HDB*, 120 int, 121 krb5_data, 122 krb5_data); 123 krb5_error_code (*hdb__del)(krb5_context, 124 struct HDB*, 125 krb5_data); 126 krb5_error_code (*hdb_destroy)(krb5_context, 127 struct HDB*); 128 }HDB; 129 130 #define HDB_INTERFACE_VERSION 4 131 132 struct hdb_so_method { 133 int version; 134 const char *prefix; 135 krb5_error_code (*create)(krb5_context, HDB **, const char *filename); 136 }; 137 138 typedef krb5_error_code (*hdb_foreach_func_t)(krb5_context, HDB*, 139 hdb_entry_ex*, void*); 140 extern krb5_kt_ops hdb_kt_ops; 141 142 #include <hdb-protos.h> 143 144 #endif /* __HDB_H__ */ 145