Merge branch 'master' into keyserver-via-dirmngr
[gnupg.git] / g10 / tdbio.h
index 68011d4..ddc5afc 100644 (file)
@@ -1,21 +1,20 @@
 /* tdbio.h - Trust database I/O functions
- *     Copyright (C) 1998 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  *
- * This file is part of GNUPG.
+ * This file is part of GnuPG.
  *
- * GNUPG is free software; you can redistribute it and/or modify
+ * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
- * GNUPG is distributed in the hope that it will be useful,
+ * GnuPG is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef G10_TDBIO_H
 #define ITEMS_PER_HLST_RECORD  ((TRUST_RECORD_LEN-6)/5)
 #define ITEMS_PER_PREF_RECORD  (TRUST_RECORD_LEN-10)
 #if ITEMS_PER_PREF_RECORD % 2
-  #error ITEMS_PER_PREF_RECORD must be even
+#error ITEMS_PER_PREF_RECORD must be even
 #endif
 #define MAX_LIST_SIGS_DEPTH  20
 
 
 #define RECTYPE_VER  1
-#define RECTYPE_DIR  2
-#define RECTYPE_KEY  3
-#define RECTYPE_UID  4
-#define RECTYPE_PREF 5
-#define RECTYPE_SIG  6
-#define RECTYPE_SDIR 8
-#define RECTYPE_CACH 9
 #define RECTYPE_HTBL 10
 #define RECTYPE_HLST 11
+#define RECTYPE_TRUST 12
+#define RECTYPE_VALID 13
 #define RECTYPE_FREE 254
 
 
-#define DIRF_CHECKED  1 /* has been checkd - other bits are valid */
-#define DIRF_VALID    2 /* This key is valid:  There is at least */
-                       /* one uid with a selfsignature or an revocation */
-#define DIRF_EXPIRED  4 /* the complete key has expired */
-#define DIRF_REVOKED  8 /* the complete key has been revoked */
-
-#define KEYF_CHECKED  1 /* This key has been checked */
-#define KEYF_VALID    2 /* This is a valid (sub)key */
-#define KEYF_EXPIRED  4 /* this key is expired */
-#define KEYF_REVOKED  8 /* this key has been revoked */
-
-#define UIDF_CHECKED  1 /* user id has been checked - other bits are valid */
-#define UIDF_VALID    2 /* this is a valid user id */
-#define UIDF_REVOKED  8 /* this user id has been revoked */
-
-#define SIGF_CHECKED  1 /* signature has been checked - bits 0..6 are valid */
-#define SIGF_VALID    2 /* the signature is valid */
-#define SIGF_EXPIRED  4 /* the key of this signature has expired */
-#define SIGF_REVOKED  8 /* this signature has been revoked */
-#define SIGF_NOPUBKEY 128 /* there is no pubkey for this sig */
-
 struct trust_record {
     int  rectype;
     int  mark;
@@ -76,66 +49,22 @@ struct trust_record {
     ulong recnum;
     union {
        struct {             /* version record: */
-           byte version;    /* should be 2 */
+           byte  version;   /* should be 3 */
+           byte  marginals;
+           byte  completes;
+           byte  cert_depth;
+           byte  trust_model;
            ulong created;   /* timestamp of trustdb creation  */
-           ulong modified;  /* timestamp of last modification */
-           ulong validated; /* timestamp of last validation   */
-           ulong keyhashtbl;
+           ulong nextcheck; /* timestamp of next scheduled check */
+           ulong reserved;  
+           ulong reserved2;
            ulong firstfree;
-           ulong sdirhashtbl;
+           ulong reserved3;
+            ulong trusthashtbl;
        } ver;
        struct {            /* free record */
            ulong next;
        } free;
-       struct {            /* directory record */
-           ulong lid;
-           ulong keylist;  /* List of keys (the first is the primary key)*/
-           ulong uidlist;  /* list of uid records */
-           ulong cacherec; /* the cache record */
-           byte ownertrust;
-           byte dirflags;
-       } dir;
-       struct {            /* primary public key record */
-           ulong lid;
-           ulong next;    /* next key */
-           byte keyflags;
-           byte pubkey_algo;
-           byte fingerprint_len;
-           byte fingerprint[20];
-       } key;
-       struct {            /* user id reord */
-           ulong lid;      /* point back to the directory record */
-           ulong next;    /* points to next user id record */
-           ulong prefrec;   /* recno of preference record */
-           ulong siglist;   /* list of valid signatures (w/o self-sig)*/
-           byte uidflags;
-           byte namehash[20]; /* ripemd hash of the username */
-       } uid;
-       struct {            /* preference record */
-           ulong lid;      /* point back to the directory record */
-                           /* or 0 for a glocal pref record */
-           ulong next;    /* points to next pref record */
-           byte  data[ITEMS_PER_PREF_RECORD];
-       } pref;
-       struct {            /* signature record */
-           ulong lid;
-           ulong next;   /* recnno of next record or NULL for last one */
-           struct {
-               ulong lid;       /* of pubkey record of signator (0=unused) */
-               byte flag;       /* SIGF_xxxxx */
-           } sig[SIGS_PER_RECORD];
-       } sig;
-       struct {
-           ulong lid;
-           u32  keyid[2];
-           byte pubkey_algo;
-           u32  hintlist;
-       } sdir;
-       struct {            /* cache record */
-           ulong lid;
-           byte blockhash[20];
-           byte trustlevel;   /* calculated trustlevel */
-       } cache;
        struct {
            ulong item[ITEMS_PER_HTBL_RECORD];
        } htbl;
@@ -143,38 +72,46 @@ struct trust_record {
            ulong next;
            ulong rnum[ITEMS_PER_HLST_RECORD]; /* of another record */
        } hlst;
+      struct {
+        byte fingerprint[20];
+        byte ownertrust;
+        byte depth;
+        ulong validlist;
+       byte min_ownertrust;
+      } trust;
+      struct {
+        byte namehash[20];
+        ulong next;  
+        byte validity;
+       byte full_count;
+       byte marginal_count;
+      } valid;
     } r;
 };
 typedef struct trust_record TRUSTREC;
 
-typedef struct {
-    ulong     lid;        /* localid */
-    ulong     sigrec;
-    ulong     sig_lid;    /* returned signatures LID */
-    unsigned  sig_flag;    /* returned signature record flag */
-    struct {              /* internal data */
-       int init_done;
-       int eof;
-       TRUSTREC rec;
-       ulong nextuid;
-       int index;
-    } ctl;
-} SIGREC_CONTEXT;
-
-
 /*-- tdbio.c --*/
+int tdbio_update_version_record(void);
 int tdbio_set_dbname( const char *new_dbname, int create );
 const char *tdbio_get_dbname(void);
 void tdbio_dump_record( TRUSTREC *rec, FILE *fp );
 int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected );
 int tdbio_write_record( TRUSTREC *rec );
+int tdbio_db_matches_options(void);
+byte tdbio_read_model(void);
+ulong tdbio_read_nextcheck (void);
+int tdbio_write_nextcheck (ulong stamp);
+int tdbio_is_dirty(void);
 int tdbio_sync(void);
+int tdbio_begin_transaction(void);
+int tdbio_end_transaction(void);
+int tdbio_cancel_transaction(void);
 int tdbio_delete_record( ulong recnum );
 ulong tdbio_new_recnum(void);
-int tdbio_search_dir_bypk( PKT_public_key *pk, TRUSTREC *rec );
-int tdbio_search_dir_byfpr( const byte *fingerprint, size_t fingerlen,
-                                       int pubkey_algo, TRUSTREC *rec );
-int tdbio_search_sdir( u32 *keyid, int pubkey_algo, TRUSTREC *rec );
+int tdbio_search_trust_byfpr(const byte *fingerprint, TRUSTREC *rec );
+int tdbio_search_trust_bypk(PKT_public_key *pk, TRUSTREC *rec );
 
+void tdbio_how_to_fix (void);
+void tdbio_invalid(void);
 
 #endif /*G10_TDBIO_H*/