diff options
author | Werner Koch <wk@gnupg.org> | 1998-01-19 19:54:44 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 1998-01-19 19:54:44 +0100 |
commit | ea4b6f9db7eda4e4ab29285aeda692fc9d60bb45 (patch) | |
tree | 1a0f1ff337da7dc08973763b32f880045361fb7a /g10/pkclist.c | |
parent | added some trust model stuff (diff) | |
download | gnupg2-ea4b6f9db7eda4e4ab29285aeda692fc9d60bb45.tar.xz gnupg2-ea4b6f9db7eda4e4ab29285aeda692fc9d60bb45.zip |
backup
Diffstat (limited to 'g10/pkclist.c')
-rw-r--r-- | g10/pkclist.c | 94 |
1 files changed, 89 insertions, 5 deletions
diff --git a/g10/pkclist.c b/g10/pkclist.c index 7feea8a00..bd871a9df 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -32,6 +32,58 @@ #include "memory.h" #include "util.h" #include "trustdb.h" +#include "ttyio.h" + +static int +query_ownertrust( PKT_public_cert *pkc ) +{ + char *p; + size_t n; + u32 keyid[2]; + + keyid_from_pkc( pkc, keyid ); + tty_printf("No ownertrust specified for:\n" + "%4u%c/%08lX %s \"", + nbits_from_pkc( pkc ), pubkey_letter( pkc->pubkey_algo ), + (ulong)keyid[1], datestr_from_pkc( pkc ) ); + p = get_user_id( keyid, &n ); + tty_print_string( p, n ), + m_free(p); + tty_printf("\"\n\n" +"Please decide in how far do you trust this user to\n" +"correctly sign other users keys (looking at his passport,\n" +"checking the fingerprints from different sources ...)?\n\n" +" 1 = Don't know\n" +" 2 = I do NOT trust\n" +" 3 = I trust marginally\n" +" 4 = I trust fully\n" +" s = please show me more informations\n\n" ); + + for(;;) { + p = tty_get("Your decision? "); + trim_spaces(p); + tty_kill_prompt(); + if( *p && p[1] ) + ; + else if( *p == '?' ) { + tty_printf( +"It's up to you to assign a value here; this value will never be exported\n" +"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" +"to do with the (implicitly created) web-of-certificates.\n"); + } + else if( !p[1] && (*p >= '1' && *p <= '4') ) { + /* okay */ + break; + } + else if( *p == 's' || *p == 'S' ) { + tty_printf("You will see a list of signators etc. here\n"); + } + m_free(p); p = NULL; + } + m_free(p); + return 0; +} + /**************** @@ -43,20 +95,52 @@ do_we_trust( PKT_public_cert *pkc, int trustlevel ) { int rc; - if( trustlevel & TRUST_NO_PUBKEY ) { - /* No pubkey in trustDB: Insert and check again */ + switch( trustlevel ) { + case TRUST_UNKNOWN: /* No pubkey in trustDB: Insert and check again */ rc = insert_trust_record( pkc ); if( rc ) { log_error("failed to insert it into the trustdb: %s\n", g10_errstr(rc) ); return 0; /* no */ } - rc = check_pkc_trust( pkc, &trustlevel ); + rc = check_trust( pkc, &trustlevel ); if( rc ) log_fatal("trust check after insert failed: %s\n", g10_errstr(rc) ); - if( trustlevel & TRUST_NO_PUBKEY ) + if( trustlevel == TRUST_UNKNOWN || trustlevel == TRUST_EXPIRED ) BUG(); + return do_we_trust( pkc, trustlevel ); + + case TRUST_EXPIRED: + log_error("trust has expired: NOT yet implemented\n"); + return 0; /* no */ + + case TRUST_UNDEFINED: + if( opt.batch || opt.answer_no ) + log_info("no info to calculate a trust probability\n"); + else { + query_ownertrust( pkc ); + } + return 0; /* no */ + + case TRUST_NEVER: + log_info("We do NOT trust this key\n"); + return 0; /* no */ + + case TRUST_MARGINAL: + log_info("I'm not sure wether this keys really belongs to the owner\n" + "but I proceed anyway\n"); + return 1; /* yes */ + + case TRUST_FULLY: + log_info("This key probably belongs to the owner\n"); + return 1; /* yes */ + + case TRUST_ULTIMATE: + log_info("Our own key is always good.\n"); + return 1; /* yes */ + + default: BUG(); } @@ -101,7 +185,7 @@ build_pkc_list( STRLIST remusr, PKC_LIST *ret_pkc_list ) else if( !(rc=check_pubkey_algo(pkc->pubkey_algo)) ) { int trustlevel; - rc = check_pkc_trust( pkc, &trustlevel ); + rc = check_trust( pkc, &trustlevel ); if( rc ) { free_public_cert( pkc ); pkc = NULL; log_error("error checking pkc of '%s': %s\n", |