summaryrefslogtreecommitdiffstats
path: root/g10/tdbio.h
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>1998-07-09 15:37:17 +0200
committerWerner Koch <wk@gnupg.org>1998-07-09 15:37:17 +0200
commite143f23c237e523758173e65ff8fdd2966ed938b (patch)
treeb17a57e05ddb9680922b00a42bb5ebefe62d71cd /g10/tdbio.h
parentfixed clearsig stuff (diff)
downloadgnupg2-e143f23c237e523758173e65ff8fdd2966ed938b.tar.xz
gnupg2-e143f23c237e523758173e65ff8fdd2966ed938b.zip
fixed severe exploitV0-3-2
Diffstat (limited to 'g10/tdbio.h')
-rw-r--r--g10/tdbio.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/g10/tdbio.h b/g10/tdbio.h
new file mode 100644
index 000000000..facb5c307
--- /dev/null
+++ b/g10/tdbio.h
@@ -0,0 +1,150 @@
+/* tdbio.h - Trust database I/O functions
+ * Copyright (C) 1998 Free Software Foundation, Inc.
+ *
+ * This file is part of GNUPG.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * 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
+ */
+
+#ifndef G10_TDBIO_H
+#define G10_TDBIO_H
+
+
+#define TRUST_RECORD_LEN 40
+#define SIGS_PER_RECORD ((TRUST_RECORD_LEN-10)/5)
+#define ITEMS_PER_HTBL_RECORD ((TRUST_RECORD_LEN-2)/4)
+#define ITEMS_PER_HLST_RECORD ((TRUST_RECORD_LEN-6)/5)
+#define MAX_LIST_SIGS_DEPTH 20
+
+
+#define RECTYPE_VER 1
+#define RECTYPE_DIR 2
+#define RECTYPE_KEY 3
+#define RECTYPE_CTL 4
+#define RECTYPE_SIG 5
+#define RECTYPE_HTBL 6
+#define RECTYPE_HLST 7
+#define RECTYPE_UID 8
+
+
+struct trust_record {
+ int rectype;
+ union {
+ struct { /* version record: */
+ byte version; /* should be 1 */
+ ulong locked; /* pid of process which holds a lock */
+ ulong created; /* timestamp of trustdb creation */
+ ulong modified; /* timestamp of last modification */
+ ulong validated; /* timestamp of last validation */
+ byte marginals_needed;
+ byte completes_needed;
+ byte max_cert_depth;
+ } ver;
+ struct { /* directory record */
+ ulong local_id;
+ u32 keyid[2];
+ ulong keyrec; /* recno of primary public key record */
+ ulong ctlrec; /* recno of control record */
+ ulong sigrec; /* recno of first signature record (osolete) */
+ ulong uidrec; /* recno of first user-id record */
+ ulong link; /* to next dir record */
+ byte no_sigs; /* does not have sigature and checked */
+ } dir;
+ struct { /* primary public key record */
+ ulong owner;
+ u32 keyid[2];
+ byte pubkey_algo;
+ byte fingerprint_len;
+ byte fingerprint[20];
+ byte ownertrust;
+ } key;
+ struct { /* user id reord */
+ ulong owner; /* point back to the directory record */
+ ulong chain; /* points to next user id record */
+ byte subtype; /* must be 0 */
+ byte namehash[20]; /* ripemd hash of the username */
+ byte ownertrust;
+ u32 prefrec; /* recno of reference record */
+ } uid;
+ struct { /* control record */
+ ulong owner;
+ byte blockhash[20];
+ byte trustlevel; /* calculated trustlevel */
+ } ctl;
+ struct { /* signature record */
+ ulong owner; /* local_id of record owner (pubkey record) */
+ ulong chain; /* offset of next record or NULL for last one */
+ struct {
+ ulong local_id; /* of pubkey record of signator (0=unused) */
+ byte flag; /* reserved */
+ } sig[SIGS_PER_RECORD];
+ } sig;
+ struct {
+ ulong item[ITEMS_PER_HTBL_RECORD];
+ } htbl;
+ struct {
+ ulong chain;
+ struct {
+ byte hash;
+ ulong rnum;
+ } item[ITEMS_PER_HLST_RECORD];
+ } hlst;
+ } r;
+};
+typedef struct trust_record TRUSTREC;
+
+typedef struct {
+ ulong local_id; /* localid of the pubkey */
+ ulong sigrec;
+ ulong sig_id; /* returned signature id */
+ unsigned sig_flag; /* returned signature record flag */
+ struct { /* internal data */
+ int init_done;
+ int eof;
+ TRUSTREC rec;
+ int index;
+ } ctl;
+} SIGREC_CONTEXT;
+
+
+/*-- tdbio.c --*/
+int tdbio_set_dbname( const char *new_dbname, int create );
+const char *tdbio_get_dbname(void);
+void tdbio_dump_record( ulong rnum, TRUSTREC *rec, FILE *fp );
+int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected );
+int tdbio_write_record( ulong recnum, TRUSTREC *rec );
+ulong tdbio_new_recnum(void);
+int tdbio_search_record( PKT_public_key *pk, TRUSTREC *rec );
+
+
+#define buftoulong( p ) ((*(byte*)(p) << 24) | (*((byte*)(p)+1)<< 16) | \
+ (*((byte*)(p)+2) << 8) | (*((byte*)(p)+3)))
+#define buftoushort( p ) ((*((byte*)(p)) << 8) | (*((byte*)(p)+1)))
+#define ulongtobuf( p, a ) do { \
+ ((byte*)p)[0] = a >> 24; \
+ ((byte*)p)[1] = a >> 16; \
+ ((byte*)p)[2] = a >> 8; \
+ ((byte*)p)[3] = a ; \
+ } while(0)
+#define ushorttobuf( p, a ) do { \
+ ((byte*)p)[0] = a >> 8; \
+ ((byte*)p)[1] = a ; \
+ } while(0)
+#define buftou32( p) buftoulong( (p) )
+#define u32tobuf( p, a) ulongtobuf( (p), (a) )
+
+
+
+#endif /*G10_TDBIO_H*/