Rename hdb_ldb to hdb_samba4 and load as a plugin into the kdc.
[kai/samba.git] / source4 / heimdal / lib / hdb / hdb.h
index 463cbf71f24af9736b92e7d0fa26a429320ca529..5c2097ea59c436e4b53a1ad1f688bd85533e565e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2007 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden). 
  * All rights reserved. 
  *
@@ -31,7 +31,7 @@
  * SUCH DAMAGE. 
  */
 
-/* $Id: hdb.h,v 1.36 2005/12/12 12:35:36 lha Exp $ */
+/* $Id$ */
 
 #ifndef __HDB_H__
 #define __HDB_H__
 #include <heim_asn1.h>
 #include <hdb_asn1.h>
 
+struct hdb_dbinfo;
+
 enum hdb_lockop{ HDB_RLOCK, HDB_WLOCK };
 
 /* flags for various functions */
-#define HDB_F_DECRYPT          1 /* decrypt keys */
-#define HDB_F_REPLACE          2 /* replace entry */
+#define HDB_F_DECRYPT          1       /* decrypt keys */
+#define HDB_F_REPLACE          2       /* replace entry */
+#define HDB_F_GET_CLIENT       4       /* fetch client */
+#define HDB_F_GET_SERVER       8       /* fetch server */
+#define HDB_F_GET_KRBTGT       16      /* fetch krbtgt */
+#define HDB_F_GET_ANY          28      /* fetch any of client,server,krbtgt */
+#define HDB_F_CANON            32      /* want canonicalition */
 
 /* key usage for master key */
 #define HDB_KU_MKEY    0x484442
 
-enum hdb_ent_type{ HDB_ENT_TYPE_CLIENT, HDB_ENT_TYPE_SERVER, HDB_ENT_TYPE_ANY };
-
 typedef struct hdb_master_key_data *hdb_master_key;
 
 typedef struct hdb_entry_ex {
     void *ctx;
     hdb_entry entry;
     void (*free_entry)(krb5_context, struct hdb_entry_ex *);
-    krb5_error_code (*check_client_access)(krb5_context, struct hdb_entry_ex *, 
-                                          HostAddresses *);
-    krb5_error_code (*authz_data_as_req)(krb5_context, 
-                                        struct hdb_entry_ex *, 
-                                        METHOD_DATA* pa_data_seq,
-                                        time_t authtime,
-                                        EncryptionKey *tgtkey,
-                                        EncryptionKey *sessionkey,
-                                        AuthorizationData **out);
-    krb5_error_code (*authz_data_tgs_req)(krb5_context, 
-                                         struct hdb_entry_ex *, 
-                                         krb5_principal client, 
-                                         AuthorizationData *in, 
-                                         time_t authtime,
-                                         EncryptionKey *tgtkey,
-                                         EncryptionKey *servicekey,
-                                         EncryptionKey *sessionkey,
-                                         AuthorizationData **out);
 } hdb_entry_ex;
 
 
@@ -85,32 +72,62 @@ typedef struct HDB{
     char *hdb_name;
     int hdb_master_key_set;
     hdb_master_key hdb_master_key;
-    void *hdb_openp;
-
-    krb5_error_code (*hdb_open)(krb5_context, struct HDB*, int, mode_t);
-    krb5_error_code (*hdb_close)(krb5_context, struct HDB*);
-    void           (*hdb_free)(krb5_context,struct HDB*,hdb_entry_ex*);
-    krb5_error_code (*hdb_fetch)(krb5_context,struct HDB*,unsigned hdb_flags, 
-                                krb5_const_principal principal,
-                                enum hdb_ent_type ent_type, hdb_entry_ex*);
-    krb5_error_code (*hdb_store)(krb5_context,struct HDB*,
-                                unsigned,hdb_entry_ex*);
-    krb5_error_code (*hdb_remove)(krb5_context, struct HDB*, hdb_entry_ex*);
-    krb5_error_code (*hdb_firstkey)(krb5_context, struct HDB*,
-                                   unsigned, hdb_entry_ex*);
-    krb5_error_code (*hdb_nextkey)(krb5_context, struct HDB*,
-                                  unsigned, hdb_entry_ex*);
-    krb5_error_code (*hdb_lock)(krb5_context, struct HDB*, int operation);
-    krb5_error_code (*hdb_unlock)(krb5_context, struct HDB*);
-    krb5_error_code (*hdb_rename)(krb5_context, struct HDB*, const char*);
-    krb5_error_code (*hdb__get)(krb5_context,struct HDB*,krb5_data,krb5_data*);
-    krb5_error_code (*hdb__put)(krb5_context, struct HDB*, int, 
-                               krb5_data, krb5_data);
-    krb5_error_code (*hdb__del)(krb5_context, struct HDB*, krb5_data);
-    krb5_error_code (*hdb_destroy)(krb5_context, struct HDB*);
+    int hdb_openp;
+
+    krb5_error_code (*hdb_open)(krb5_context,
+                               struct HDB*,
+                               int,
+                               mode_t);
+    krb5_error_code (*hdb_close)(krb5_context, 
+                                struct HDB*);
+    void           (*hdb_free)(krb5_context,
+                               struct HDB*,
+                               hdb_entry_ex*);
+    krb5_error_code (*hdb_fetch)(krb5_context,
+                                struct HDB*,
+                                krb5_const_principal,
+                                unsigned,
+                                hdb_entry_ex*);
+    krb5_error_code (*hdb_store)(krb5_context,
+                                struct HDB*,
+                                unsigned,
+                                hdb_entry_ex*);
+    krb5_error_code (*hdb_remove)(krb5_context,
+                                 struct HDB*,
+                                 krb5_const_principal);
+    krb5_error_code (*hdb_firstkey)(krb5_context,
+                                   struct HDB*,
+                                   unsigned,
+                                   hdb_entry_ex*);
+    krb5_error_code (*hdb_nextkey)(krb5_context,
+                                  struct HDB*,
+                                  unsigned,
+                                  hdb_entry_ex*);
+    krb5_error_code (*hdb_lock)(krb5_context,
+                               struct HDB*,
+                               int operation);
+    krb5_error_code (*hdb_unlock)(krb5_context,
+                                 struct HDB*);
+    krb5_error_code (*hdb_rename)(krb5_context,
+                                 struct HDB*,
+                                 const char*);
+    krb5_error_code (*hdb__get)(krb5_context,
+                               struct HDB*,
+                               krb5_data,
+                               krb5_data*);
+    krb5_error_code (*hdb__put)(krb5_context,
+                               struct HDB*,
+                               int, 
+                               krb5_data,
+                               krb5_data);
+    krb5_error_code (*hdb__del)(krb5_context, 
+                               struct HDB*,
+                               krb5_data);
+    krb5_error_code (*hdb_destroy)(krb5_context,
+                                  struct HDB*);
 }HDB;
 
-#define HDB_INTERFACE_VERSION  3
+#define HDB_INTERFACE_VERSION  4
 
 struct hdb_so_method {
     int version;
@@ -118,14 +135,16 @@ struct hdb_so_method {
     krb5_error_code (*create)(krb5_context, HDB **, const char *filename);
 };
 
-#define HDB_DB_DIR "/var/heimdal"
-#define HDB_DEFAULT_DB HDB_DB_DIR "/heimdal"
-#define HDB_DB_FORMAT_ENTRY "hdb/db-format"
-
 typedef krb5_error_code (*hdb_foreach_func_t)(krb5_context, HDB*,
                                              hdb_entry_ex*, void*);
 extern krb5_kt_ops hdb_kt_ops;
 
+struct hdb_method {
+    int        interface_version;
+    const char *prefix;
+    krb5_error_code (*create)(krb5_context, HDB **, const char *filename);
+};
+
 #include <hdb-protos.h>
 
 #endif /* __HDB_H__ */