2 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
3 * 2008 Free Software Foundation, Inc.
5 * This file is part of GnuPG.
7 * GnuPG is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
12 * GnuPG is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
28 #include <sys/types.h>
30 #endif /* !DISABLE_REGEX */
46 * A structure to store key identification as well as some stuff needed
50 struct key_item
*next
;
51 unsigned int ownertrust
,min_ownertrust
;
59 typedef struct key_item
**KeyHashTable
; /* see new_key_hash_table() */
62 * Structure to keep track of keys, this is used as an array wherre
63 * the item right after the last one has a keyblock set to NULL.
64 * Maybe we can drop this thing and replace it by key_item
71 /* control information for the trust DB */
79 static struct key_item
*user_utk_list
; /* temp. used to store --trusted-keys */
80 static struct key_item
*utk_list
; /* all ultimately trusted keys */
82 static int pending_check_trustdb
;
84 static int validate_keys (int interactive
);
87 /**********************************************
88 ************* some helpers *******************
89 **********************************************/
91 static struct key_item
*
96 k
= xmalloc_clear (sizeof *k
);
101 release_key_items (struct key_item
*k
)
108 xfree (k
->trust_regexp
);
114 * For fast keylook up we need a hash table. Each byte of a KeyIDs
115 * should be distributed equally over the 256 possible values (except
116 * for v3 keyIDs but we consider them as not important here). So we
117 * can just use 10 bits to index a table of 1024 key items.
118 * Possible optimization: Don not use key_items but other hash_table when the
119 * duplicates lists gets too large.
122 new_key_hash_table (void)
124 struct key_item
**tbl
;
126 tbl
= xmalloc_clear (1024 * sizeof *tbl
);
131 release_key_hash_table (KeyHashTable tbl
)
137 for (i
=0; i
< 1024; i
++)
138 release_key_items (tbl
[i
]);
143 * Returns: True if the keyID is in the given hash table
146 test_key_hash_table (KeyHashTable tbl
, u32
*kid
)
150 for (k
= tbl
[(kid
[1] & 0x03ff)]; k
; k
= k
->next
)
151 if (k
->kid
[0] == kid
[0] && k
->kid
[1] == kid
[1])
157 * Add a new key to the hash table. The key is identified by its key ID.
160 add_key_hash_table (KeyHashTable tbl
, u32
*kid
)
162 struct key_item
*k
, *kk
;
164 for (k
= tbl
[(kid
[1] & 0x03ff)]; k
; k
= k
->next
)
165 if (k
->kid
[0] == kid
[0] && k
->kid
[1] == kid
[1])
166 return; /* already in table */
168 kk
= new_key_item ();
171 kk
->next
= tbl
[(kid
[1] & 0x03ff)];
172 tbl
[(kid
[1] & 0x03ff)] = kk
;
176 * Release a key_array
179 release_key_array ( struct key_array
*keys
)
184 for (k
=keys
; k
->keyblock
; k
++)
185 release_kbnode (k
->keyblock
);
191 /*********************************************
192 ********** Initialization *****************
193 *********************************************/
198 * Used to register extra ultimately trusted keys - this has to be done
199 * before initializing the validation module.
200 * FIXME: Should be replaced by a function to add those keys to the trustdb.
203 register_trusted_keyid(u32
*keyid
)
208 k
->kid
[0] = keyid
[0];
209 k
->kid
[1] = keyid
[1];
210 k
->next
= user_utk_list
;
215 register_trusted_key( const char *string
)
217 KEYDB_SEARCH_DESC desc
;
219 if (classify_user_id (string
, &desc
) != KEYDB_SEARCH_MODE_LONG_KID
)
221 log_error(_("`%s' is not a valid long keyID\n"), string
);
225 register_trusted_keyid(desc
.u
.kid
);
229 * Helper to add a key to the global list of ultimately trusted keys.
230 * Retruns: true = inserted, false = already in in list.
237 for (k
= utk_list
; k
; k
= k
->next
)
239 if (k
->kid
[0] == kid
[0] && k
->kid
[1] == kid
[1])
248 k
->ownertrust
= TRUST_ULTIMATE
;
251 if( opt
.verbose
> 1 )
252 log_info(_("key %s: accepted as trusted key\n"), keystr(kid
));
258 * Verify that all our secret keys are usable and put them into the utk_list.
261 verify_own_keys(void)
271 /* scan the trustdb to find all ultimately trusted keys */
272 for (recnum
=1; !tdbio_read_record (recnum
, &rec
, 0); recnum
++ )
274 if ( rec
.rectype
== RECTYPE_TRUST
275 && (rec
.r
.trust
.ownertrust
& TRUST_MASK
) == TRUST_ULTIMATE
)
277 byte
*fpr
= rec
.r
.trust
.fingerprint
;
281 /* Problem: We do only use fingerprints in the trustdb but
282 * we need the keyID here to indetify the key; we can only
283 * use that ugly hack to distinguish between 16 and 20
284 * butes fpr - it does not work always so we better change
285 * the whole validation code to only work with
287 fprlen
= (!fpr
[16] && !fpr
[17] && !fpr
[18] && !fpr
[19])? 16:20;
288 keyid_from_fingerprint (fpr
, fprlen
, kid
);
290 log_info(_("key %s occurs more than once in the trustdb\n"),
295 /* Put any --trusted-key keys into the trustdb */
296 for (k
= user_utk_list
; k
; k
= k
->next
)
298 if ( add_utk (k
->kid
) )
299 { /* not yet in trustDB as ultimately trusted */
302 memset (&pk
, 0, sizeof pk
);
303 rc
= get_pubkey (&pk
, k
->kid
);
305 log_info(_("key %s: no public key for trusted key - skipped\n"),
309 update_ownertrust (&pk
,
310 ((get_ownertrust (&pk
) & ~TRUST_MASK
)
312 release_public_key_parts (&pk
);
315 log_info (_("key %s marked as ultimately trusted\n"),keystr(k
->kid
));
319 /* release the helper table table */
320 release_key_items (user_utk_list
);
321 user_utk_list
= NULL
;
326 /*********************************************
327 *********** TrustDB stuff *******************
328 *********************************************/
331 * Read a record but die if it does not exist
334 read_record (ulong recno
, TRUSTREC
*rec
, int rectype
)
336 int rc
= tdbio_read_record (recno
, rec
, rectype
);
339 log_error(_("trust record %lu, req type %d: read failed: %s\n"),
340 recno
, rec
->rectype
, g10_errstr(rc
) );
343 if (rectype
!= rec
->rectype
)
345 log_error(_("trust record %lu is not of requested type %d\n"),
346 rec
->recnum
, rectype
);
352 * Write a record and die on error
355 write_record (TRUSTREC
*rec
)
357 int rc
= tdbio_write_record (rec
);
360 log_error(_("trust record %lu, type %d: write failed: %s\n"),
361 rec
->recnum
, rec
->rectype
, g10_errstr(rc
) );
367 * sync the TrustDb and die on error
372 int rc
= tdbio_sync ();
375 log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc
) );
381 trust_model_string(void)
383 switch(opt
.trust_model
)
385 case TM_CLASSIC
: return "classic";
386 case TM_PGP
: return "PGP";
387 case TM_EXTERNAL
: return "external";
388 case TM_ALWAYS
: return "always";
389 case TM_DIRECT
: return "direct";
390 default: return "unknown";
395 * Perform some checks over the trustdb
396 * level 0: only open the db
397 * 1: used for initial program startup
400 setup_trustdb( int level
, const char *dbname
)
402 /* just store the args */
403 if( trustdb_args
.init
)
405 trustdb_args
.level
= level
;
406 trustdb_args
.dbname
= dbname
? xstrdup(dbname
): NULL
;
411 how_to_fix_the_trustdb ()
413 const char *name
= trustdb_args
.dbname
;
416 name
= "trustdb.gpg";
418 log_info (_("You may try to re-create the trustdb using the commands:\n"));
419 log_info (" cd %s\n", default_homedir ());
420 log_info (" gpg2 --export-ownertrust > otrust.tmp\n");
421 #ifdef HAVE_W32_SYSTEM
422 log_info (" del %s\n", name
);
424 log_info (" rm %s\n", name
);
426 log_info (" gpg2 --import-ownertrust < otrust.tmp\n");
427 log_info (_("If that does not work, please consult the manual\n"));
434 int level
= trustdb_args
.level
;
435 const char* dbname
= trustdb_args
.dbname
;
437 if( trustdb_args
.init
)
440 trustdb_args
.init
= 1;
442 if(level
==0 || level
==1)
444 int rc
= tdbio_set_dbname( dbname
, !!level
);
446 log_fatal("can't init trustdb: %s\n", g10_errstr(rc
) );
451 if(opt
.trust_model
==TM_AUTO
)
453 /* Try and set the trust model off of whatever the trustdb says
455 opt
.trust_model
=tdbio_read_model();
457 /* Sanity check this ;) */
458 if(opt
.trust_model
!=TM_CLASSIC
459 && opt
.trust_model
!=TM_PGP
460 && opt
.trust_model
!=TM_EXTERNAL
)
462 log_info(_("unable to use unknown trust model (%d) - "
463 "assuming %s trust model\n"),opt
.trust_model
,"PGP");
464 opt
.trust_model
=TM_PGP
;
468 log_info(_("using %s trust model\n"),trust_model_string());
471 if(opt
.trust_model
==TM_PGP
|| opt
.trust_model
==TM_CLASSIC
)
473 /* Verify the list of ultimately trusted keys and move the
474 --trusted-keys list there as well. */
478 if(!tdbio_db_matches_options())
479 pending_check_trustdb
=1;
484 /***********************************************
485 ************* Print helpers ****************
486 ***********************************************/
489 * This function returns a letter for a trustvalue Trust flags
493 trust_letter (unsigned int value
)
495 switch( (value
& TRUST_MASK
) )
497 case TRUST_UNKNOWN
: return '-';
498 case TRUST_EXPIRED
: return 'e';
499 case TRUST_UNDEFINED
: return 'q';
500 case TRUST_NEVER
: return 'n';
501 case TRUST_MARGINAL
: return 'm';
502 case TRUST_FULLY
: return 'f';
503 case TRUST_ULTIMATE
: return 'u';
508 /* NOTE TO TRANSLATOR: these strings are similar to those in
509 trust_value_to_string(), but are a fixed length. This is needed to
510 make attractive information listings where columns line up
511 properly. The value "10" should be the length of the strings you
512 choose to translate to. This is the length in printable columns.
513 It gets passed to atoi() so everything after the number is
514 essentially a comment and need not be translated. Either key and
515 uid are both NULL, or neither are NULL. */
517 uid_trust_string_fixed(PKT_public_key
*key
,PKT_user_id
*uid
)
520 return _("10 translator see trustdb.c:uid_trust_string_fixed");
521 else if(uid
->is_revoked
|| (key
&& key
->is_revoked
))
522 return _("[ revoked]");
523 else if(uid
->is_expired
)
524 return _("[ expired]");
526 switch(get_validity(key
,uid
)&TRUST_MASK
)
528 case TRUST_UNKNOWN
: return _("[ unknown]");
529 case TRUST_EXPIRED
: return _("[ expired]");
530 case TRUST_UNDEFINED
: return _("[ undef ]");
531 case TRUST_MARGINAL
: return _("[marginal]");
532 case TRUST_FULLY
: return _("[ full ]");
533 case TRUST_ULTIMATE
: return _("[ultimate]");
539 /* The strings here are similar to those in
540 pkclist.c:do_edit_ownertrust() */
542 trust_value_to_string (unsigned int value
)
544 switch( (value
& TRUST_MASK
) )
546 case TRUST_UNKNOWN
: return _("unknown");
547 case TRUST_EXPIRED
: return _("expired");
548 case TRUST_UNDEFINED
: return _("undefined");
549 case TRUST_NEVER
: return _("never");
550 case TRUST_MARGINAL
: return _("marginal");
551 case TRUST_FULLY
: return _("full");
552 case TRUST_ULTIMATE
: return _("ultimate");
553 default: return "err";
558 string_to_trust_value (const char *str
)
560 if(ascii_strcasecmp(str
,"undefined")==0)
561 return TRUST_UNDEFINED
;
562 else if(ascii_strcasecmp(str
,"never")==0)
564 else if(ascii_strcasecmp(str
,"marginal")==0)
565 return TRUST_MARGINAL
;
566 else if(ascii_strcasecmp(str
,"full")==0)
568 else if(ascii_strcasecmp(str
,"ultimate")==0)
569 return TRUST_ULTIMATE
;
575 * Recreate the WoT but do not ask for new ownertrusts. Special
576 * feature: In batch mode and without a forced yes, this is only done
577 * when a check is due. This can be used to run the check from a crontab
583 if(opt
.trust_model
==TM_PGP
|| opt
.trust_model
==TM_CLASSIC
)
585 if (opt
.batch
&& !opt
.answer_yes
)
589 scheduled
= tdbio_read_nextcheck ();
592 log_info (_("no need for a trustdb check\n"));
596 if (scheduled
> make_timestamp ())
598 log_info (_("next trustdb check due at %s\n"),
599 strtimestamp (scheduled
));
607 log_info (_("no need for a trustdb check with `%s' trust model\n"),
608 trust_model_string());
619 if(opt
.trust_model
==TM_PGP
|| opt
.trust_model
==TM_CLASSIC
)
622 log_info (_("no need for a trustdb update with `%s' trust model\n"),
623 trust_model_string());
627 revalidation_mark (void)
630 /* we simply set the time for the next check to 1 (far back in 1970)
631 * so that a --update-trustdb will be scheduled */
632 if (tdbio_write_nextcheck (1))
634 pending_check_trustdb
= 1;
638 trustdb_pending_check(void)
640 return pending_check_trustdb
;
643 /* If the trustdb is dirty, and we're interactive, update it.
644 Otherwise, check it unless no-auto-check-trustdb is set. */
646 trustdb_check_or_update(void)
648 if(trustdb_pending_check())
652 else if(!opt
.no_auto_check_trustdb
)
658 read_trust_options(byte
*trust_model
,ulong
*created
,ulong
*nextcheck
,
659 byte
*marginals
,byte
*completes
,byte
*cert_depth
)
665 read_record(0,&opts
,RECTYPE_VER
);
668 *trust_model
=opts
.r
.ver
.trust_model
;
670 *created
=opts
.r
.ver
.created
;
672 *nextcheck
=opts
.r
.ver
.nextcheck
;
674 *marginals
=opts
.r
.ver
.marginals
;
676 *completes
=opts
.r
.ver
.completes
;
678 *cert_depth
=opts
.r
.ver
.cert_depth
;
681 /***********************************************
682 *********** Ownertrust et al. ****************
683 ***********************************************/
686 read_trust_record (PKT_public_key
*pk
, TRUSTREC
*rec
)
691 rc
= tdbio_search_trust_bypk (pk
, rec
);
693 return -1; /* no record yet */
696 log_error ("trustdb: searching trust record failed: %s\n",
701 if (rec
->rectype
!= RECTYPE_TRUST
)
703 log_error ("trustdb: record %lu is not a trust record\n",
705 return G10ERR_TRUSTDB
;
712 * Return the assigned ownertrust value for the given public key.
713 * The key should be the primary key.
716 get_ownertrust ( PKT_public_key
*pk
)
721 rc
= read_trust_record (pk
, &rec
);
723 return TRUST_UNKNOWN
; /* no record yet */
727 return rc
; /* actually never reached */
730 return rec
.r
.trust
.ownertrust
;
734 get_min_ownertrust (PKT_public_key
*pk
)
739 rc
= read_trust_record (pk
, &rec
);
741 return TRUST_UNKNOWN
; /* no record yet */
745 return rc
; /* actually never reached */
748 return rec
.r
.trust
.min_ownertrust
;
752 * Same as get_ownertrust but this takes the minimum ownertrust value
753 * into into account, and will bump up the value as needed.
756 get_ownertrust_with_min (PKT_public_key
*pk
)
758 unsigned int otrust
,otrust_min
;
760 otrust
= (get_ownertrust (pk
) & TRUST_MASK
);
761 otrust_min
= get_min_ownertrust (pk
);
762 if(otrust
<otrust_min
)
764 /* If the trust that the user has set is less than the trust
765 that was calculated from a trust signature chain, use the
766 higher of the two. We do this here and not in
767 get_ownertrust since the underlying ownertrust should not
768 really be set - just the appearance of the ownertrust. */
777 * Same as get_ownertrust but return a trust letter instead of an
778 * value. This takes the minimum ownertrust value into account.
781 get_ownertrust_info (PKT_public_key
*pk
)
783 return trust_letter(get_ownertrust_with_min(pk
));
787 * Same as get_ownertrust but return a trust string instead of an
788 * value. This takes the minimum ownertrust value into account.
791 get_ownertrust_string (PKT_public_key
*pk
)
793 return trust_value_to_string(get_ownertrust_with_min(pk
));
797 * Set the trust value of the given public key to the new value.
798 * The key should be a primary one.
801 update_ownertrust (PKT_public_key
*pk
, unsigned int new_trust
)
806 rc
= read_trust_record (pk
, &rec
);
810 log_debug ("update ownertrust from %u to %u\n",
811 (unsigned int)rec
.r
.trust
.ownertrust
, new_trust
);
812 if (rec
.r
.trust
.ownertrust
!= new_trust
)
814 rec
.r
.trust
.ownertrust
= new_trust
;
815 write_record( &rec
);
816 revalidation_mark ();
821 { /* no record yet - create a new one */
825 log_debug ("insert ownertrust %u\n", new_trust
);
827 memset (&rec
, 0, sizeof rec
);
828 rec
.recnum
= tdbio_new_recnum ();
829 rec
.rectype
= RECTYPE_TRUST
;
830 fingerprint_from_pk (pk
, rec
.r
.trust
.fingerprint
, &dummy
);
831 rec
.r
.trust
.ownertrust
= new_trust
;
833 revalidation_mark ();
844 update_min_ownertrust (u32
*kid
, unsigned int new_trust
)
850 pk
= xmalloc_clear (sizeof *pk
);
851 rc
= get_pubkey (pk
, kid
);
854 log_error(_("public key %s not found: %s\n"),keystr(kid
),g10_errstr(rc
));
858 rc
= read_trust_record (pk
, &rec
);
862 log_debug ("key %08lX%08lX: update min_ownertrust from %u to %u\n",
863 (ulong
)kid
[0],(ulong
)kid
[1],
864 (unsigned int)rec
.r
.trust
.min_ownertrust
,
866 if (rec
.r
.trust
.min_ownertrust
!= new_trust
)
868 rec
.r
.trust
.min_ownertrust
= new_trust
;
869 write_record( &rec
);
870 revalidation_mark ();
875 { /* no record yet - create a new one */
879 log_debug ("insert min_ownertrust %u\n", new_trust
);
881 memset (&rec
, 0, sizeof rec
);
882 rec
.recnum
= tdbio_new_recnum ();
883 rec
.rectype
= RECTYPE_TRUST
;
884 fingerprint_from_pk (pk
, rec
.r
.trust
.fingerprint
, &dummy
);
885 rec
.r
.trust
.min_ownertrust
= new_trust
;
887 revalidation_mark ();
897 /* Clear the ownertrust and min_ownertrust values. Return true if a
898 change actually happened. */
900 clear_ownertrusts (PKT_public_key
*pk
)
905 rc
= read_trust_record (pk
, &rec
);
910 log_debug ("clearing ownertrust (old value %u)\n",
911 (unsigned int)rec
.r
.trust
.ownertrust
);
912 log_debug ("clearing min_ownertrust (old value %u)\n",
913 (unsigned int)rec
.r
.trust
.min_ownertrust
);
915 if (rec
.r
.trust
.ownertrust
|| rec
.r
.trust
.min_ownertrust
)
917 rec
.r
.trust
.ownertrust
= 0;
918 rec
.r
.trust
.min_ownertrust
= 0;
919 write_record( &rec
);
920 revalidation_mark ();
933 * Note: Caller has to do a sync
936 update_validity (PKT_public_key
*pk
, PKT_user_id
*uid
,
937 int depth
, int validity
)
943 namehash_from_uid(uid
);
945 rc
= read_trust_record (pk
, &trec
);
951 if (rc
== -1) /* no record yet - create a new one */
956 memset (&trec
, 0, sizeof trec
);
957 trec
.recnum
= tdbio_new_recnum ();
958 trec
.rectype
= RECTYPE_TRUST
;
959 fingerprint_from_pk (pk
, trec
.r
.trust
.fingerprint
, &dummy
);
960 trec
.r
.trust
.ownertrust
= 0;
963 /* locate an existing one */
964 recno
= trec
.r
.trust
.validlist
;
967 read_record (recno
, &vrec
, RECTYPE_VALID
);
968 if ( !memcmp (vrec
.r
.valid
.namehash
, uid
->namehash
, 20) )
970 recno
= vrec
.r
.valid
.next
;
973 if (!recno
) /* insert a new validity record */
975 memset (&vrec
, 0, sizeof vrec
);
976 vrec
.recnum
= tdbio_new_recnum ();
977 vrec
.rectype
= RECTYPE_VALID
;
978 memcpy (vrec
.r
.valid
.namehash
, uid
->namehash
, 20);
979 vrec
.r
.valid
.next
= trec
.r
.trust
.validlist
;
980 trec
.r
.trust
.validlist
= vrec
.recnum
;
982 vrec
.r
.valid
.validity
= validity
;
983 vrec
.r
.valid
.full_count
= uid
->help_full_count
;
984 vrec
.r
.valid
.marginal_count
= uid
->help_marginal_count
;
985 write_record (&vrec
);
986 trec
.r
.trust
.depth
= depth
;
987 write_record (&trec
);
991 /***********************************************
992 ********* Query trustdb values **************
993 ***********************************************/
995 /* Return true if key is disabled */
997 cache_disabled_value(PKT_public_key
*pk
)
1004 return (pk
->is_disabled
==2);
1008 rc
= read_trust_record (pk
, &trec
);
1014 if (rc
== -1) /* no record found, so assume not disabled */
1017 if(trec
.r
.trust
.ownertrust
& TRUST_FLAG_DISABLED
)
1020 /* Cache it for later so we don't need to look at the trustdb every
1032 check_trustdb_stale(void)
1034 static int did_nextcheck
=0;
1038 && (opt
.trust_model
==TM_PGP
|| opt
.trust_model
==TM_CLASSIC
))
1043 scheduled
= tdbio_read_nextcheck ();
1044 if (scheduled
&& scheduled
<= make_timestamp ())
1046 if (opt
.no_auto_check_trustdb
)
1048 pending_check_trustdb
= 1;
1049 log_info (_("please do a --check-trustdb\n"));
1053 log_info (_("checking the trustdb\n"));
1061 * Return the validity information for PK. If the namehash is not
1062 * NULL, the validity of the corresponsing user ID is returned,
1063 * otherwise, a reasonable value for the entire key is returned.
1066 get_validity (PKT_public_key
*pk
, PKT_user_id
*uid
)
1068 TRUSTREC trec
, vrec
;
1071 unsigned int validity
;
1073 PKT_public_key
*main_pk
;
1076 namehash_from_uid(uid
);
1079 check_trustdb_stale();
1081 keyid_from_pk (pk
, kid
);
1082 if (pk
->main_keyid
[0] != kid
[0] || pk
->main_keyid
[1] != kid
[1])
1083 { /* this is a subkey - get the mainkey */
1084 main_pk
= xmalloc_clear (sizeof *main_pk
);
1085 rc
= get_pubkey (main_pk
, pk
->main_keyid
);
1088 char *tempkeystr
=xstrdup(keystr(pk
->main_keyid
));
1089 log_error ("error getting main key %s of subkey %s: %s\n",
1090 tempkeystr
, keystr(kid
), g10_errstr(rc
));
1092 validity
= TRUST_UNKNOWN
;
1099 if(opt
.trust_model
==TM_DIRECT
)
1101 /* Note that this happens BEFORE any user ID stuff is checked.
1102 The direct trust model applies to keys as a whole. */
1103 validity
=get_ownertrust(main_pk
);
1107 rc
= read_trust_record (main_pk
, &trec
);
1113 if (rc
== -1) /* no record found */
1115 validity
= TRUST_UNKNOWN
;
1119 /* loop over all user IDs */
1120 recno
= trec
.r
.trust
.validlist
;
1124 read_record (recno
, &vrec
, RECTYPE_VALID
);
1128 /* If a user ID is given we return the validity for that
1129 user ID ONLY. If the namehash is not found, then there
1130 is no validity at all (i.e. the user ID wasn't
1132 if(memcmp(vrec
.r
.valid
.namehash
,uid
->namehash
,20)==0)
1134 validity
=(vrec
.r
.valid
.validity
& TRUST_MASK
);
1140 /* If no namehash is given, we take the maximum validity
1141 over all user IDs */
1142 if ( validity
< (vrec
.r
.valid
.validity
& TRUST_MASK
) )
1143 validity
= (vrec
.r
.valid
.validity
& TRUST_MASK
);
1146 recno
= vrec
.r
.valid
.next
;
1149 if ( (trec
.r
.trust
.ownertrust
& TRUST_FLAG_DISABLED
) )
1151 validity
|= TRUST_FLAG_DISABLED
;
1158 /* set some flags direct from the key */
1159 if (main_pk
->is_revoked
)
1160 validity
|= TRUST_FLAG_REVOKED
;
1161 if (main_pk
!= pk
&& pk
->is_revoked
)
1162 validity
|= TRUST_FLAG_SUB_REVOKED
;
1163 /* Note: expiration is a trust value and not a flag - don't know why
1164 * I initially designed it that way */
1165 if (main_pk
->has_expired
|| pk
->has_expired
)
1166 validity
= (validity
& ~TRUST_MASK
) | TRUST_EXPIRED
;
1168 if (pending_check_trustdb
)
1169 validity
|= TRUST_FLAG_PENDING_CHECK
;
1172 free_public_key (main_pk
);
1177 get_validity_info (PKT_public_key
*pk
, PKT_user_id
*uid
)
1181 trustlevel
= get_validity (pk
, uid
);
1182 if( trustlevel
& TRUST_FLAG_REVOKED
)
1184 return trust_letter ( trustlevel
);
1188 get_validity_string (PKT_public_key
*pk
, PKT_user_id
*uid
)
1192 trustlevel
= get_validity (pk
, uid
);
1193 if( trustlevel
& TRUST_FLAG_REVOKED
)
1194 return _("revoked");
1195 return trust_value_to_string(trustlevel
);
1199 get_validity_counts (PKT_public_key
*pk
, PKT_user_id
*uid
)
1201 TRUSTREC trec
, vrec
;
1204 if(pk
==NULL
|| uid
==NULL
)
1207 namehash_from_uid(uid
);
1209 uid
->help_marginal_count
=uid
->help_full_count
=0;
1213 if(read_trust_record (pk
, &trec
)!=0)
1216 /* loop over all user IDs */
1217 recno
= trec
.r
.trust
.validlist
;
1220 read_record (recno
, &vrec
, RECTYPE_VALID
);
1222 if(memcmp(vrec
.r
.valid
.namehash
,uid
->namehash
,20)==0)
1224 uid
->help_marginal_count
=vrec
.r
.valid
.marginal_count
;
1225 uid
->help_full_count
=vrec
.r
.valid
.full_count
;
1226 /* printf("Fetched marginal %d, full %d\n",uid->help_marginal_count,uid->help_full_count); */
1230 recno
= vrec
.r
.valid
.next
;
1235 list_trust_path( const char *username
)
1241 * Enumerate all keys, which are needed to build all trust paths for
1242 * the given key. This function does not return the key itself or
1243 * the ultimate key (the last point in cerificate chain). Only
1244 * certificate chains which ends up at an ultimately trusted key
1245 * are listed. If ownertrust or validity is not NULL, the corresponding
1246 * value for the returned LID is also returned in these variable(s).
1248 * 1) create a void pointer and initialize it to NULL
1249 * 2) pass this void pointer by reference to this function.
1250 * Set lid to the key you want to enumerate and pass it by reference.
1251 * 3) call this function as long as it does not return -1
1252 * to indicate EOF. LID does contain the next key used to build the web
1253 * 4) Always call this function a last time with LID set to NULL,
1254 * so that it can free its context.
1256 * Returns: -1 on EOF or the level of the returned LID
1259 enum_cert_paths( void **context
, ulong
*lid
,
1260 unsigned *ownertrust
, unsigned *validity
)
1271 * Print the current path
1274 enum_cert_paths_print (void **context
, FILE *fp
,
1275 int refresh
, ulong selected_lid
)
1285 /****************************************
1286 *********** NEW NEW NEW ****************
1287 ****************************************/
1290 ask_ownertrust (u32
*kid
,int minimum
)
1296 pk
= xmalloc_clear (sizeof *pk
);
1297 rc
= get_pubkey (pk
, kid
);
1300 log_error (_("public key %s not found: %s\n"),
1301 keystr(kid
), g10_errstr(rc
) );
1302 return TRUST_UNKNOWN
;
1305 if(opt
.force_ownertrust
)
1307 log_info("force trust for key %s to %s\n",
1308 keystr(kid
),trust_value_to_string(opt
.force_ownertrust
));
1309 update_ownertrust(pk
,opt
.force_ownertrust
);
1310 ot
=opt
.force_ownertrust
;
1314 ot
=edit_ownertrust(pk
,0);
1316 ot
= get_ownertrust (pk
);
1318 ot
= minimum
?minimum
:TRUST_UNDEFINED
;
1323 free_public_key( pk
);
1330 mark_keyblock_seen (KeyHashTable tbl
, KBNODE node
)
1332 for ( ;node
; node
= node
->next
)
1333 if (node
->pkt
->pkttype
== PKT_PUBLIC_KEY
1334 || node
->pkt
->pkttype
== PKT_PUBLIC_SUBKEY
)
1338 keyid_from_pk (node
->pkt
->pkt
.public_key
, aki
);
1339 add_key_hash_table (tbl
, aki
);
1345 dump_key_array (int depth
, struct key_array
*keys
)
1347 struct key_array
*kar
;
1349 for (kar
=keys
; kar
->keyblock
; kar
++)
1351 KBNODE node
= kar
->keyblock
;
1354 keyid_from_pk(node
->pkt
->pkt
.public_key
, kid
);
1355 printf ("%d:%08lX%08lX:K::%c::::\n",
1356 depth
, (ulong
)kid
[0], (ulong
)kid
[1], '?');
1358 for (; node
; node
= node
->next
)
1360 if (node
->pkt
->pkttype
== PKT_USER_ID
)
1362 int len
= node
->pkt
->pkt
.user_id
->len
;
1366 printf ("%d:%08lX%08lX:U:::%c:::",
1367 depth
, (ulong
)kid
[0], (ulong
)kid
[1],
1368 (node
->flag
& 4)? 'f':
1369 (node
->flag
& 2)? 'm':
1370 (node
->flag
& 1)? 'q':'-');
1371 print_string (stdout
, node
->pkt
->pkt
.user_id
->name
, len
, ':');
1381 store_validation_status (int depth
, KBNODE keyblock
, KeyHashTable stored
)
1387 for (node
=keyblock
; node
; node
= node
->next
)
1389 if (node
->pkt
->pkttype
== PKT_USER_ID
)
1391 PKT_user_id
*uid
= node
->pkt
->pkt
.user_id
;
1393 status
= TRUST_FULLY
;
1394 else if (node
->flag
& 2)
1395 status
= TRUST_MARGINAL
;
1396 else if (node
->flag
& 1)
1397 status
= TRUST_UNDEFINED
;
1403 update_validity (keyblock
->pkt
->pkt
.public_key
,
1404 uid
, depth
, status
);
1406 mark_keyblock_seen(stored
,keyblock
);
1418 * check whether the signature sig is in the klist k
1420 static struct key_item
*
1421 is_in_klist (struct key_item
*k
, PKT_signature
*sig
)
1423 for (; k
; k
= k
->next
)
1425 if (k
->kid
[0] == sig
->keyid
[0] && k
->kid
[1] == sig
->keyid
[1])
1432 * Mark the signature of the given UID which are used to certify it.
1433 * To do this, we first revmove all signatures which are not valid and
1434 * from the remain ones we look for the latest one. If this is not a
1435 * certification revocation signature we mark the signature by setting
1436 * node flag bit 8. Revocations are marked with flag 11, and sigs
1437 * from unavailable keys are marked with flag 12. Note that flag bits
1438 * 9 and 10 are used for internal purposes.
1441 mark_usable_uid_certs (KBNODE keyblock
, KBNODE uidnode
,
1442 u32
*main_kid
, struct key_item
*klist
,
1443 u32 curtime
, u32
*next_expire
)
1448 /* first check all signatures */
1449 for (node
=uidnode
->next
; node
; node
= node
->next
)
1453 node
->flag
&= ~(1<<8 | 1<<9 | 1<<10 | 1<<11 | 1<<12);
1454 if (node
->pkt
->pkttype
== PKT_USER_ID
1455 || node
->pkt
->pkttype
== PKT_PUBLIC_SUBKEY
)
1457 if (node
->pkt
->pkttype
!= PKT_SIGNATURE
)
1459 sig
= node
->pkt
->pkt
.signature
;
1461 && sig
->keyid
[0] == main_kid
[0] && sig
->keyid
[1] == main_kid
[1])
1462 continue; /* ignore self-signatures if we pass in a main_kid */
1463 if (!IS_UID_SIG(sig
) && !IS_UID_REV(sig
))
1464 continue; /* we only look at these signature classes */
1465 if(sig
->sig_class
>=0x11 && sig
->sig_class
<=0x13 &&
1466 sig
->sig_class
-0x10<opt
.min_cert_level
)
1467 continue; /* treat anything under our min_cert_level as an
1468 invalid signature */
1469 if (klist
&& !is_in_klist (klist
, sig
))
1470 continue; /* no need to check it then */
1471 if ((rc
=check_key_signature (keyblock
, node
, NULL
)))
1473 /* we ignore anything that won't verify, but tag the
1475 if(rc
==G10ERR_NO_PUBKEY
)
1476 node
->flag
|= 1<<12;
1481 /* reset the remaining flags */
1482 for (; node
; node
= node
->next
)
1483 node
->flag
&= ~(1<<8 | 1<<9 | 1<<10 | 1<<11 | 1<<12);
1485 /* kbnode flag usage: bit 9 is here set for signatures to consider,
1486 * bit 10 will be set by the loop to keep track of keyIDs already
1487 * processed, bit 8 will be set for the usable signatures, and bit
1488 * 11 will be set for usable revocations. */
1490 /* for each cert figure out the latest valid one */
1491 for (node
=uidnode
->next
; node
; node
= node
->next
)
1497 if (node
->pkt
->pkttype
== PKT_PUBLIC_SUBKEY
)
1499 if ( !(node
->flag
& (1<<9)) )
1500 continue; /* not a node to look at */
1501 if ( (node
->flag
& (1<<10)) )
1502 continue; /* signature with a keyID already processed */
1503 node
->flag
|= (1<<10); /* mark this node as processed */
1504 sig
= node
->pkt
->pkt
.signature
;
1506 sigdate
= sig
->timestamp
;
1507 kid
[0] = sig
->keyid
[0]; kid
[1] = sig
->keyid
[1];
1509 /* Now find the latest and greatest signature */
1510 for (n
=uidnode
->next
; n
; n
= n
->next
)
1512 if (n
->pkt
->pkttype
== PKT_PUBLIC_SUBKEY
)
1514 if ( !(n
->flag
& (1<<9)) )
1516 if ( (n
->flag
& (1<<10)) )
1517 continue; /* shortcut already processed signatures */
1518 sig
= n
->pkt
->pkt
.signature
;
1519 if (kid
[0] != sig
->keyid
[0] || kid
[1] != sig
->keyid
[1])
1521 n
->flag
|= (1<<10); /* mark this node as processed */
1523 /* If signode is nonrevocable and unexpired and n isn't,
1524 then take signode (skip). It doesn't matter which is
1525 older: if signode was older then we don't want to take n
1526 as signode is nonrevocable. If n was older then we're
1527 automatically fine. */
1529 if(((IS_UID_SIG(signode
->pkt
->pkt
.signature
) &&
1530 !signode
->pkt
->pkt
.signature
->flags
.revocable
&&
1531 (signode
->pkt
->pkt
.signature
->expiredate
==0 ||
1532 signode
->pkt
->pkt
.signature
->expiredate
>curtime
))) &&
1533 (!(IS_UID_SIG(n
->pkt
->pkt
.signature
) &&
1534 !n
->pkt
->pkt
.signature
->flags
.revocable
&&
1535 (n
->pkt
->pkt
.signature
->expiredate
==0 ||
1536 n
->pkt
->pkt
.signature
->expiredate
>curtime
))))
1539 /* If n is nonrevocable and unexpired and signode isn't,
1540 then take n. Again, it doesn't matter which is older: if
1541 n was older then we don't want to take signode as n is
1542 nonrevocable. If signode was older then we're
1543 automatically fine. */
1545 if((!(IS_UID_SIG(signode
->pkt
->pkt
.signature
) &&
1546 !signode
->pkt
->pkt
.signature
->flags
.revocable
&&
1547 (signode
->pkt
->pkt
.signature
->expiredate
==0 ||
1548 signode
->pkt
->pkt
.signature
->expiredate
>curtime
))) &&
1549 ((IS_UID_SIG(n
->pkt
->pkt
.signature
) &&
1550 !n
->pkt
->pkt
.signature
->flags
.revocable
&&
1551 (n
->pkt
->pkt
.signature
->expiredate
==0 ||
1552 n
->pkt
->pkt
.signature
->expiredate
>curtime
))))
1555 sigdate
= sig
->timestamp
;
1559 /* At this point, if it's newer, it goes in as the only
1560 remaining possibilities are signode and n are both either
1561 revocable or expired or both nonrevocable and unexpired.
1562 If the timestamps are equal take the later ordered
1563 packet, presuming that the key packets are hopefully in
1564 their original order. */
1566 if (sig
->timestamp
>= sigdate
)
1569 sigdate
= sig
->timestamp
;
1573 sig
= signode
->pkt
->pkt
.signature
;
1574 if (IS_UID_SIG (sig
))
1575 { /* this seems to be a usable one which is not revoked.
1576 * Just need to check whether there is an expiration time,
1577 * We do the expired certification after finding a suitable
1578 * certification, the assumption is that a signator does not
1579 * want that after the expiration of his certificate the
1580 * system falls back to an older certification which has a
1581 * different expiration time */
1585 p
= parse_sig_subpkt (sig
->hashed
, SIGSUBPKT_SIG_EXPIRE
, NULL
);
1586 expire
= p
? sig
->timestamp
+ buffer_to_u32(p
) : 0;
1588 if (expire
==0 || expire
> curtime
)
1590 signode
->flag
|= (1<<8); /* yeah, found a good cert */
1591 if (next_expire
&& expire
&& expire
< *next_expire
)
1592 *next_expire
= expire
;
1596 signode
->flag
|= (1<<11);
1601 clean_sigs_from_uid(KBNODE keyblock
,KBNODE uidnode
,int noisy
,int self_only
)
1607 assert(keyblock
->pkt
->pkttype
==PKT_PUBLIC_KEY
);
1609 keyid_from_pk(keyblock
->pkt
->pkt
.public_key
,keyid
);
1611 /* Passing in a 0 for current time here means that we'll never weed
1612 out an expired sig. This is correct behavior since we want to
1613 keep the most recent expired sig in a series. */
1614 mark_usable_uid_certs(keyblock
,uidnode
,NULL
,NULL
,0,NULL
);
1616 /* What we want to do here is remove signatures that are not
1617 considered as part of the trust calculations. Thus, all invalid
1618 signatures are out, as are any signatures that aren't the last of
1619 a series of uid sigs or revocations It breaks down like this:
1620 coming out of mark_usable_uid_certs, if a sig is unflagged, it is
1621 not even a candidate. If a sig has flag 9 or 10, that means it
1622 was selected as a candidate and vetted. If a sig has flag 8 it
1623 is a usable signature. If a sig has flag 11 it is a usable
1624 revocation. If a sig has flag 12 it was issued by an unavailable
1625 key. "Usable" here means the most recent valid
1626 signature/revocation in a series from a particular signer.
1628 Delete everything that isn't a usable uid sig (which might be
1629 expired), a usable revocation, or a sig from an unavailable
1632 for(node
=uidnode
->next
;
1633 node
&& node
->pkt
->pkttype
==PKT_SIGNATURE
;
1636 int keep
=self_only
?(node
->pkt
->pkt
.signature
->keyid
[0]==keyid
[0]
1637 && node
->pkt
->pkt
.signature
->keyid
[1]==keyid
[1]):1;
1639 /* Keep usable uid sigs ... */
1640 if((node
->flag
& (1<<8)) && keep
)
1643 /* ... and usable revocations... */
1644 if((node
->flag
& (1<<11)) && keep
)
1647 /* ... and sigs from unavailable keys. */
1648 /* disabled for now since more people seem to want sigs from
1649 unavailable keys removed altogether. */
1651 if(node->flag & (1<<12))
1655 /* Everything else we delete */
1657 /* At this point, if 12 is set, the signing key was unavailable.
1658 If 9 or 10 is set, it's superceded. Otherwise, it's
1662 log_info("removing signature from key %s on user ID \"%s\": %s\n",
1663 keystr(node
->pkt
->pkt
.signature
->keyid
),
1664 uidnode
->pkt
->pkt
.user_id
->name
,
1665 node
->flag
&(1<<12)?"key unavailable":
1666 node
->flag
&(1<<9)?"signature superceded":"invalid signature");
1668 delete_kbnode(node
);
1675 /* This is substantially easier than clean_sigs_from_uid since we just
1676 have to establish if the uid has a valid self-sig, is not revoked,
1677 and is not expired. Note that this does not take into account
1678 whether the uid has a trust path to it - just whether the keyholder
1679 themselves has certified the uid. Returns true if the uid was
1680 compacted. To "compact" a user ID, we simply remove ALL signatures
1681 except the self-sig that caused the user ID to be remove-worthy.
1682 We don't actually remove the user ID packet itself since it might
1683 be ressurected in a later merge. Note that this function requires
1684 that the caller has already done a merge_keys_and_selfsig().
1686 TODO: change the import code to allow importing a uid with only a
1687 revocation if the uid already exists on the keyring. */
1690 clean_uid_from_key(KBNODE keyblock
,KBNODE uidnode
,int noisy
)
1693 PKT_user_id
*uid
=uidnode
->pkt
->pkt
.user_id
;
1696 assert(keyblock
->pkt
->pkttype
==PKT_PUBLIC_KEY
);
1697 assert(uidnode
->pkt
->pkttype
==PKT_USER_ID
);
1699 /* Skip valid user IDs, compacted user IDs, and non-self-signed user
1700 IDs if --allow-non-selfsigned-uid is set. */
1701 if(uid
->created
|| uid
->flags
.compacted
1702 || (!uid
->is_expired
&& !uid
->is_revoked
1703 && opt
.allow_non_selfsigned_uid
))
1706 for(node
=uidnode
->next
;
1707 node
&& node
->pkt
->pkttype
==PKT_SIGNATURE
;
1709 if(!node
->pkt
->pkt
.signature
->flags
.chosen_selfsig
)
1711 delete_kbnode(node
);
1713 uidnode
->pkt
->pkt
.user_id
->flags
.compacted
=1;
1719 char *user
=utf8_to_native(uid
->name
,uid
->len
,0);
1722 reason
=_("revoked");
1723 else if(uid
->is_expired
)
1724 reason
=_("expired");
1726 reason
=_("invalid");
1728 log_info("compacting user ID \"%s\" on key %s: %s\n",
1729 user
,keystr_from_pk(keyblock
->pkt
->pkt
.public_key
),
1738 /* Needs to be called after a merge_keys_and_selfsig() */
1740 clean_one_uid(KBNODE keyblock
,KBNODE uidnode
,int noisy
,int self_only
,
1741 int *uids_cleaned
,int *sigs_cleaned
)
1745 assert(keyblock
->pkt
->pkttype
==PKT_PUBLIC_KEY
);
1746 assert(uidnode
->pkt
->pkttype
==PKT_USER_ID
);
1749 uids_cleaned
=&dummy
;
1752 sigs_cleaned
=&dummy
;
1754 /* Do clean_uid_from_key first since if it fires off, we don't
1755 have to bother with the other */
1756 *uids_cleaned
+=clean_uid_from_key(keyblock
,uidnode
,noisy
);
1757 if(!uidnode
->pkt
->pkt
.user_id
->flags
.compacted
)
1758 *sigs_cleaned
+=clean_sigs_from_uid(keyblock
,uidnode
,noisy
,self_only
);
1762 clean_key(KBNODE keyblock
,int noisy
,int self_only
,
1763 int *uids_cleaned
,int *sigs_cleaned
)
1767 merge_keys_and_selfsig(keyblock
);
1769 for(uidnode
=keyblock
->next
;
1770 uidnode
&& uidnode
->pkt
->pkttype
!=PKT_PUBLIC_SUBKEY
;
1771 uidnode
=uidnode
->next
)
1772 if(uidnode
->pkt
->pkttype
==PKT_USER_ID
)
1773 clean_one_uid(keyblock
,uidnode
,noisy
,self_only
,
1774 uids_cleaned
,sigs_cleaned
);
1777 /* Returns a sanitized copy of the regexp (which might be "", but not
1779 #ifndef DISABLE_REGEX
1781 sanitize_regexp(const char *old
)
1783 size_t start
=0,len
=strlen(old
),idx
=0;
1784 int escaped
=0,standard_bracket
=0;
1785 char *new=xmalloc((len
*2)+1); /* enough to \-escape everything if we
1788 /* There are basically two commonly-used regexps here. GPG and most
1789 versions of PGP use "<[^>]+[@.]example\.com>$" and PGP (9)
1790 command line uses "example.com" (i.e. whatever the user specfies,
1791 and we can't expect users know to use "\." instead of "."). So
1792 here are the rules: we're allowed to start with "<[^>]+[@.]" and
1793 end with ">$" or start and end with nothing. In between, the
1794 only legal regex character is ".", and everything else gets
1795 escaped. Part of the gotcha here is that some regex packages
1796 allow more than RFC-4880 requires. For example, 4880 has no "{}"
1797 operator, but GNU regex does. Commenting removes these operators
1798 from consideration. A possible future enhancement is to use
1799 commenting to effectively back off a given regex to the Henry
1800 Spencer syntax in 4880. -dshaw */
1802 /* Are we bracketed between "<[^>]+[@.]" and ">$" ? */
1803 if(len
>=12 && strncmp(old
,"<[^>]+[@.]",10)==0
1804 && old
[len
-2]=='>' && old
[len
-1]=='$')
1806 strcpy(new,"<[^>]+[@.]");
1813 /* Walk the remaining characters and ensure that everything that is
1814 left is not an operational regex character. */
1815 for(;start
<len
;start
++)
1817 if(!escaped
&& old
[start
]=='\\')
1819 else if(!escaped
&& old
[start
]!='.')
1824 new[idx
++]=old
[start
];
1829 /* Note that the (sub)string we look at might end with a bare "\".
1830 If it does, leave it that way. If the regexp actually ended with
1831 ">$", then it was escaping the ">" and is fine. If the regexp
1832 actually ended with the bare "\", then it's an illegal regexp and
1833 regcomp should kick it out. */
1835 if(standard_bracket
)
1840 #endif /*!DISABLE_REGEX*/
1842 /* Used by validate_one_keyblock to confirm a regexp within a trust
1843 signature. Returns 1 for match, and 0 for no match or regex
1846 check_regexp(const char *expr
,const char *string
)
1848 #ifdef DISABLE_REGEX
1849 /* When DISABLE_REGEX is defined, assume all regexps do not
1856 regexp
=sanitize_regexp(expr
);
1859 ret
=riscos_check_regexp(expr
, string
, DBG_TRUST
);
1864 ret
=regcomp(&pat
,regexp
,REG_ICASE
|REG_NOSUB
|REG_EXTENDED
);
1867 ret
=regexec(&pat
,string
,0,NULL
,0);
1875 log_debug("regexp `%s' (`%s') on `%s': %s\n",
1876 regexp
,expr
,string
,ret
==0?"YES":"NO");
1885 * Return true if the key is signed by one of the keys in the given
1886 * key ID list. User IDs with a valid signature are marked by node
1888 * flag bit 0: There is at least one signature
1889 * 1: There is marginal confidence that this is a legitimate uid
1890 * 2: There is full confidence that this is a legitimate uid.
1891 * 8: Used for internal purposes.
1892 * 9: Ditto (in mark_usable_uid_certs())
1894 * This function assumes that all kbnode flags are cleared on entry.
1897 validate_one_keyblock (KBNODE kb
, struct key_item
*klist
,
1898 u32 curtime
, u32
*next_expire
)
1900 struct key_item
*kr
;
1901 KBNODE node
, uidnode
=NULL
;
1902 PKT_user_id
*uid
=NULL
;
1903 PKT_public_key
*pk
= kb
->pkt
->pkt
.public_key
;
1905 int issigned
=0, any_signed
= 0;
1907 keyid_from_pk(pk
, main_kid
);
1908 for (node
=kb
; node
; node
= node
->next
)
1910 /* A bit of discussion here: is it better for the web of trust
1911 to be built among only self-signed uids? On the one hand, a
1912 self-signed uid is a statement that the key owner definitely
1913 intended that uid to be there, but on the other hand, a
1914 signed (but not self-signed) uid does carry trust, of a sort,
1915 even if it is a statement being made by people other than the
1916 key owner "through" the uids on the key owner's key. I'm
1917 going with the latter. However, if the user ID was
1918 explicitly revoked, or passively allowed to expire, that
1919 should stop validity through the user ID until it is
1922 if (node
->pkt
->pkttype
== PKT_USER_ID
1923 && !node
->pkt
->pkt
.user_id
->is_revoked
1924 && !node
->pkt
->pkt
.user_id
->is_expired
)
1926 if (uidnode
&& issigned
)
1928 if (uid
->help_full_count
>= opt
.completes_needed
1929 || uid
->help_marginal_count
>= opt
.marginals_needed
)
1931 else if (uid
->help_full_count
|| uid
->help_marginal_count
)
1937 uid
=uidnode
->pkt
->pkt
.user_id
;
1939 /* If the selfsig is going to expire... */
1940 if(uid
->expiredate
&& uid
->expiredate
<*next_expire
)
1941 *next_expire
= uid
->expiredate
;
1944 get_validity_counts(pk
,uid
);
1945 mark_usable_uid_certs (kb
, uidnode
, main_kid
, klist
,
1946 curtime
, next_expire
);
1948 else if (node
->pkt
->pkttype
== PKT_SIGNATURE
1949 && (node
->flag
& (1<<8)) && uid
)
1951 /* Note that we are only seeing unrevoked sigs here */
1952 PKT_signature
*sig
= node
->pkt
->pkt
.signature
;
1954 kr
= is_in_klist (klist
, sig
);
1955 /* If the trust_regexp does not match, it's as if the sig
1956 did not exist. This is safe for non-trust sigs as well
1957 since we don't accept a regexp on the sig unless it's a
1959 if (kr
&& (!kr
->trust_regexp
1960 || opt
.trust_model
!= TM_PGP
1962 && check_regexp(kr
->trust_regexp
,
1963 uidnode
->pkt
->pkt
.user_id
->name
))))
1965 /* Are we part of a trust sig chain? We always favor
1966 the latest trust sig, rather than the greater or
1967 lesser trust sig or value. I could make a decent
1968 argument for any of these cases, but this seems to be
1969 what PGP does, and I'd like to be compatible. -dms */
1970 if (opt
.trust_model
== TM_PGP
1972 && pk
->trust_timestamp
<= sig
->timestamp
)
1974 unsigned char depth
;
1976 /* If the depth on the signature is less than the
1977 chain currently has, then use the signature depth
1978 so we don't increase the depth beyond what the
1979 signer wanted. If the depth on the signature is
1980 more than the chain currently has, then use the
1981 chain depth so we use as much of the signature
1982 depth as the chain will permit. An ultimately
1983 trusted signature can restart the depth to
1984 whatever level it likes. */
1986 if (sig
->trust_depth
< kr
->trust_depth
1987 || kr
->ownertrust
== TRUST_ULTIMATE
)
1988 depth
= sig
->trust_depth
;
1990 depth
= kr
->trust_depth
;
1995 log_debug ("trust sig on %s, sig depth is %d,"
1996 " kr depth is %d\n",
1997 uidnode
->pkt
->pkt
.user_id
->name
,
2001 /* If we got here, we know that:
2003 this is a trust sig.
2005 it's a newer trust sig than any previous trust
2006 sig on this key (not uid).
2008 it is legal in that it was either generated by an
2009 ultimate key, or a key that was part of a trust
2010 chain, and the depth does not violate the
2013 if there is a regexp attached, it matched
2018 log_debug ("replacing trust value %d with %d and "
2019 "depth %d with %d\n",
2020 pk
->trust_value
,sig
->trust_value
,
2021 pk
->trust_depth
,depth
);
2023 pk
->trust_value
= sig
->trust_value
;
2024 pk
->trust_depth
= depth
-1;
2026 /* If the trust sig contains a regexp, record it
2027 on the pk for the next round. */
2028 if (sig
->trust_regexp
)
2029 pk
->trust_regexp
= sig
->trust_regexp
;
2033 if (kr
->ownertrust
== TRUST_ULTIMATE
)
2034 uid
->help_full_count
= opt
.completes_needed
;
2035 else if (kr
->ownertrust
== TRUST_FULLY
)
2036 uid
->help_full_count
++;
2037 else if (kr
->ownertrust
== TRUST_MARGINAL
)
2038 uid
->help_marginal_count
++;
2044 if (uidnode
&& issigned
)
2046 if (uid
->help_full_count
>= opt
.completes_needed
2047 || uid
->help_marginal_count
>= opt
.marginals_needed
)
2049 else if (uid
->help_full_count
|| uid
->help_marginal_count
)
2060 search_skipfnc (void *opaque
, u32
*kid
, PKT_user_id
*dummy
)
2063 return test_key_hash_table ((KeyHashTable
)opaque
, kid
);
2068 * Scan all keys and return a key_array of all suitable keys from
2069 * kllist. The caller has to pass keydb handle so that we don't use
2070 * to create our own. Returns either a key_array or NULL in case of
2071 * an error. No results found are indicated by an empty array.
2072 * Caller hast to release the returned array.
2074 static struct key_array
*
2075 validate_key_list (KEYDB_HANDLE hd
, KeyHashTable full_trust
,
2076 struct key_item
*klist
, u32 curtime
, u32
*next_expire
)
2078 KBNODE keyblock
= NULL
;
2079 struct key_array
*keys
= NULL
;
2080 size_t nkeys
, maxkeys
;
2082 KEYDB_SEARCH_DESC desc
;
2085 keys
= xmalloc ((maxkeys
+1) * sizeof *keys
);
2088 rc
= keydb_search_reset (hd
);
2091 log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc
));
2096 memset (&desc
, 0, sizeof desc
);
2097 desc
.mode
= KEYDB_SEARCH_MODE_FIRST
;
2098 desc
.skipfnc
= search_skipfnc
;
2099 desc
.skipfncvalue
= full_trust
;
2100 rc
= keydb_search (hd
, &desc
, 1);
2103 keys
[nkeys
].keyblock
= NULL
;
2108 log_error ("keydb_search_first failed: %s\n", g10_errstr(rc
));
2113 desc
.mode
= KEYDB_SEARCH_MODE_NEXT
; /* change mode */
2118 rc
= keydb_get_keyblock (hd
, &keyblock
);
2121 log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc
));
2126 if ( keyblock
->pkt
->pkttype
!= PKT_PUBLIC_KEY
)
2128 log_debug ("ooops: invalid pkttype %d encountered\n",
2129 keyblock
->pkt
->pkttype
);
2130 dump_kbnode (keyblock
);
2131 release_kbnode(keyblock
);
2135 /* prepare the keyblock for further processing */
2136 merge_keys_and_selfsig (keyblock
);
2137 clear_kbnode_flags (keyblock
);
2138 pk
= keyblock
->pkt
->pkt
.public_key
;
2139 if (pk
->has_expired
|| pk
->is_revoked
)
2141 /* it does not make sense to look further at those keys */
2142 mark_keyblock_seen (full_trust
, keyblock
);
2144 else if (validate_one_keyblock (keyblock
, klist
, curtime
, next_expire
))
2148 if (pk
->expiredate
&& pk
->expiredate
>= curtime
2149 && pk
->expiredate
< *next_expire
)
2150 *next_expire
= pk
->expiredate
;
2152 if (nkeys
== maxkeys
) {
2154 keys
= xrealloc (keys
, (maxkeys
+1) * sizeof *keys
);
2156 keys
[nkeys
++].keyblock
= keyblock
;
2158 /* Optimization - if all uids are fully trusted, then we
2159 never need to consider this key as a candidate again. */
2161 for (node
=keyblock
; node
; node
= node
->next
)
2162 if (node
->pkt
->pkttype
== PKT_USER_ID
&& !(node
->flag
& 4))
2166 mark_keyblock_seen (full_trust
, keyblock
);
2171 release_kbnode (keyblock
);
2174 while ( !(rc
= keydb_search (hd
, &desc
, 1)) );
2177 log_error ("keydb_search_next failed: %s\n", g10_errstr(rc
));
2182 keys
[nkeys
].keyblock
= NULL
;
2186 /* Caller must sync */
2188 reset_trust_records(void)
2192 int count
= 0, nreset
= 0;
2194 for (recnum
=1; !tdbio_read_record (recnum
, &rec
, 0); recnum
++ )
2196 if(rec
.rectype
==RECTYPE_TRUST
)
2199 if(rec
.r
.trust
.min_ownertrust
)
2201 rec
.r
.trust
.min_ownertrust
=0;
2206 else if(rec
.rectype
==RECTYPE_VALID
2207 && ((rec
.r
.valid
.validity
&TRUST_MASK
)
2208 || rec
.r
.valid
.marginal_count
2209 || rec
.r
.valid
.full_count
))
2211 rec
.r
.valid
.validity
&= ~TRUST_MASK
;
2212 rec
.r
.valid
.marginal_count
=rec
.r
.valid
.full_count
=0;
2220 log_info (_("%d keys processed (%d validity counts cleared)\n"),
2225 * Run the key validation procedure.
2227 * This works this way:
2228 * Step 1: Find all ultimately trusted keys (UTK).
2229 * mark them all as seen and put them into klist.
2230 * Step 2: loop max_cert_times
2231 * Step 3: if OWNERTRUST of any key in klist is undefined
2232 * ask user to assign ownertrust
2233 * Step 4: Loop over all keys in the keyDB which are not marked seen
2234 * Step 5: if key is revoked or expired
2236 * continue loop at Step 4
2237 * Step 6: For each user ID of that key signed by a key in klist
2238 * Calculate validity by counting trusted signatures.
2239 * Set validity of user ID
2240 * Step 7: If any signed user ID was found
2243 * Step 8: Build a new klist from all fully trusted keys from step 6
2249 validate_keys (int interactive
)
2253 struct key_item
*klist
= NULL
;
2255 struct key_array
*keys
= NULL
;
2256 struct key_array
*kar
;
2257 KEYDB_HANDLE kdb
= NULL
;
2260 int ot_unknown
, ot_undefined
, ot_never
, ot_marginal
, ot_full
, ot_ultimate
;
2261 KeyHashTable stored
,used
,full_trust
;
2262 u32 start_time
, next_expire
;
2264 /* Make sure we have all sigs cached. TODO: This is going to
2265 require some architectual re-thinking, as it is agonizingly slow.
2266 Perhaps combine this with reset_trust_records(), or only check
2267 the caches on keys that are actually involved in the web of
2269 keydb_rebuild_caches(0);
2271 start_time
= make_timestamp ();
2272 next_expire
= 0xffffffff; /* set next expire to the year 2106 */
2273 stored
= new_key_hash_table ();
2274 used
= new_key_hash_table ();
2275 full_trust
= new_key_hash_table ();
2277 kdb
= keydb_new (0);
2278 reset_trust_records();
2280 /* Fixme: Instead of always building a UTK list, we could just build it
2281 * here when needed */
2285 log_info (_("no ultimately trusted keys found\n"));
2289 /* mark all UTKs as used and fully_trusted and set validity to
2291 for (k
=utk_list
; k
; k
= k
->next
)
2296 keyblock
= get_pubkeyblock (k
->kid
);
2299 log_error (_("public key of ultimately"
2300 " trusted key %s not found\n"), keystr(k
->kid
));
2303 mark_keyblock_seen (used
, keyblock
);
2304 mark_keyblock_seen (stored
, keyblock
);
2305 mark_keyblock_seen (full_trust
, keyblock
);
2306 pk
= keyblock
->pkt
->pkt
.public_key
;
2307 for (node
=keyblock
; node
; node
= node
->next
)
2309 if (node
->pkt
->pkttype
== PKT_USER_ID
)
2310 update_validity (pk
, node
->pkt
->pkt
.user_id
, 0, TRUST_ULTIMATE
);
2312 if ( pk
->expiredate
&& pk
->expiredate
>= start_time
2313 && pk
->expiredate
< next_expire
)
2314 next_expire
= pk
->expiredate
;
2316 release_kbnode (keyblock
);
2322 log_info(_("%d marginal(s) needed, %d complete(s) needed, %s trust model\n"),
2323 opt
.marginals_needed
,opt
.completes_needed
,trust_model_string());
2325 for (depth
=0; depth
< opt
.max_cert_depth
; depth
++)
2327 int valids
=0,key_count
;
2328 /* See whether we should assign ownertrust values to the keys in
2330 ot_unknown
= ot_undefined
= ot_never
= 0;
2331 ot_marginal
= ot_full
= ot_ultimate
= 0;
2332 for (k
=klist
; k
; k
= k
->next
)
2336 /* 120 and 60 are as per RFC2440 */
2337 if(k
->trust_value
>=120)
2339 else if(k
->trust_value
>=60)
2342 if(min
!=k
->min_ownertrust
)
2343 update_min_ownertrust(k
->kid
,min
);
2345 if (interactive
&& k
->ownertrust
== TRUST_UNKNOWN
)
2347 k
->ownertrust
= ask_ownertrust (k
->kid
,min
);
2349 if (k
->ownertrust
== -1)
2356 /* This can happen during transition from an old trustdb
2357 before trust sigs. It can also happen if a user uses two
2358 different versions of GnuPG or changes the --trust-model
2360 if(k
->ownertrust
<min
)
2363 log_debug("key %08lX%08lX:"
2364 " overriding ownertrust `%s' with `%s'\n",
2365 (ulong
)k
->kid
[0],(ulong
)k
->kid
[1],
2366 trust_value_to_string(k
->ownertrust
),
2367 trust_value_to_string(min
));
2372 if (k
->ownertrust
== TRUST_UNKNOWN
)
2374 else if (k
->ownertrust
== TRUST_UNDEFINED
)
2376 else if (k
->ownertrust
== TRUST_NEVER
)
2378 else if (k
->ownertrust
== TRUST_MARGINAL
)
2380 else if (k
->ownertrust
== TRUST_FULLY
)
2382 else if (k
->ownertrust
== TRUST_ULTIMATE
)
2388 /* Find all keys which are signed by a key in kdlist */
2389 keys
= validate_key_list (kdb
, full_trust
, klist
,
2390 start_time
, &next_expire
);
2393 log_error ("validate_key_list failed\n");
2394 rc
= G10ERR_GENERAL
;
2398 for (key_count
=0, kar
=keys
; kar
->keyblock
; kar
++, key_count
++)
2401 /* Store the calculated valididation status somewhere */
2402 if (opt
.verbose
> 1)
2403 dump_key_array (depth
, keys
);
2405 for (kar
=keys
; kar
->keyblock
; kar
++)
2406 store_validation_status (depth
, kar
->keyblock
, stored
);
2408 log_info (_("depth: %d valid: %3d signed: %3d"
2409 " trust: %d-, %dq, %dn, %dm, %df, %du\n"),
2410 depth
, valids
, key_count
, ot_unknown
, ot_undefined
,
2411 ot_never
, ot_marginal
, ot_full
, ot_ultimate
);
2413 /* Build a new kdlist from all fully valid keys in KEYS */
2414 if (klist
!= utk_list
)
2415 release_key_items (klist
);
2417 for (kar
=keys
; kar
->keyblock
; kar
++)
2419 for (node
=kar
->keyblock
; node
; node
= node
->next
)
2421 if (node
->pkt
->pkttype
== PKT_USER_ID
&& (node
->flag
& 4))
2425 /* have we used this key already? */
2426 keyid_from_pk (kar
->keyblock
->pkt
->pkt
.public_key
, kid
);
2427 if(test_key_hash_table(used
,kid
)==0)
2429 /* Normally we add both the primary and subkey
2430 ids to the hash via mark_keyblock_seen, but
2431 since we aren't using this hash as a skipfnc,
2432 that doesn't matter here. */
2433 add_key_hash_table (used
,kid
);
2434 k
= new_key_item ();
2438 (get_ownertrust (kar
->keyblock
->pkt
->pkt
.public_key
)
2441 get_min_ownertrust(kar
->keyblock
->pkt
->pkt
.public_key
);
2443 kar
->keyblock
->pkt
->pkt
.public_key
->trust_depth
;
2445 kar
->keyblock
->pkt
->pkt
.public_key
->trust_value
;
2446 if(kar
->keyblock
->pkt
->pkt
.public_key
->trust_regexp
)
2448 xstrdup(kar
->keyblock
->pkt
->
2449 pkt
.public_key
->trust_regexp
);
2457 release_key_array (keys
);
2460 break; /* no need to dive in deeper */
2464 keydb_release (kdb
);
2465 release_key_array (keys
);
2466 release_key_items (klist
);
2467 release_key_hash_table (full_trust
);
2468 release_key_hash_table (used
);
2469 release_key_hash_table (stored
);
2470 if (!rc
&& !quit
) /* mark trustDB as checked */
2472 if (next_expire
== 0xffffffff || next_expire
< start_time
)
2473 tdbio_write_nextcheck (0);
2476 tdbio_write_nextcheck (next_expire
);
2477 log_info (_("next trustdb check due at %s\n"),
2478 strtimestamp (next_expire
));
2481 if(tdbio_update_version_record()!=0)
2483 log_error(_("unable to update trustdb version record: "
2484 "write failed: %s\n"), g10_errstr(rc
));
2489 pending_check_trustdb
= 0;