aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog20
-rw-r--r--g10/getkey.c1
-rw-r--r--g10/gpg.c55
-rw-r--r--g10/keyserver.c2
-rw-r--r--g10/mainproc.c2
-rw-r--r--g10/options.h2
-rw-r--r--g10/pkclist.c10
-rw-r--r--g10/status.c2
-rw-r--r--g10/status.h3
-rw-r--r--g10/trustdb.c10
10 files changed, 94 insertions, 13 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index a108ed38c..cc0c34636 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,20 @@
+2005-12-20 Werner Koch <[email protected]>
+
+ * gpg.c: New option --allow-pka-lookup.
+ (parse_trust_model): Add "+pka" variants.
+ (main): Make KEYSERVER_AUTO_PKA_RETRIEVE teh default.
+ * options.h (opt): New fields PKA_TRUST_INCREASE and
+ ALLOW_PKA_LOOKUP.
+ * status.h (STATUS_PKA_TRUST_BAD, STATUS_PKA_TRUST_GOOD): New.
+ * pkclist.c (check_signatures_trust): Increase trust due to valid
+ PKA only if that new option has been set. Issue new status lines.
+ * trustdb.c (init_trustdb): Print info if this option is active.
+ * getkey.c (get_pubkey_byname): Honor allow-pka-lookup.
+ * mainproc.c (pka_uri_from_sig): Ditto.
+
+ * trustdb.c (validate_keys): Print no "ultimately trusted keys
+ found" only in non-quiet mode.
+
2005-12-19 David Shaw <[email protected]>
* getkey.c (merge_selfsigs_main): All primary keys can certify.
@@ -23,6 +40,9 @@
2005-12-08 Werner Koch <[email protected]>
+ * gpg.c (main): Check for DBCS lead byte when converting the
+ homedir. By Kazuyoshi Kakihara. Fixes PR561.
+
* keyserver.c (keyserver_fetch): Made strings translatable.
2005-12-08 David Shaw <[email protected]>
diff --git a/g10/getkey.c b/g10/getkey.c
index 07efdc110..e66b57cdd 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -914,6 +914,7 @@ get_pubkey_byname (PKT_public_key *pk,
include_unusable, ret_keyblock, ret_kdbhd);
if (rc == G10ERR_NO_PUBKEY
&& !again
+ && opt.allow_pka_lookup
&& (opt.keyserver_options.options&KEYSERVER_AUTO_PKA_RETRIEVE)
&& is_valid_mailbox (name))
{
diff --git a/g10/gpg.c b/g10/gpg.c
index 81bf454c2..6f834bd4d 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -35,6 +35,9 @@
#include <sys/stat.h> /* for stat() */
#endif
#include <fcntl.h>
+#ifdef HAVE_W32_SYSTEM
+#include <windows.h>
+#endif
#define INCLUDED_BY_MAIN_MODULE 1
#include "packet.h"
@@ -240,6 +243,7 @@ enum cmd_and_opt_values
oAlwaysTrust,
oTrustModel,
oForceOwnertrust,
+ oAllowPkaLookup,
oRunAsShmCP,
oSetFilename,
oForYourEyesOnly,
@@ -596,6 +600,7 @@ static ARGPARSE_OPTS opts[] = {
{ oAlwaysTrust, "always-trust", 0, "@"},
{ oTrustModel, "trust-model", 2, "@"},
{ oForceOwnertrust, "force-ownertrust", 2, "@"},
+ { oAllowPkaLookup, "allow-pka-lookup", 0, "@" },
{ oRunAsShmCP, "run-as-shm-coprocess", 4, "@" },
{ oSetFilename, "set-filename", 2, "@" },
{ oForYourEyesOnly, "for-your-eyes-only", 0, "@" },
@@ -1442,6 +1447,7 @@ gpgconf_list (const char *configfile)
printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE);
printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE);
printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE);
+ printf ("allow-pka-lookup:%lu:\n", GC_OPT_FLAG_NONE);
}
@@ -1597,20 +1603,47 @@ collapse_args(int argc,char *argv[])
static void
parse_trust_model(const char *model)
{
+ opt.pka_trust_increase = 0;
if(ascii_strcasecmp(model,"pgp")==0)
- opt.trust_model=TM_PGP;
+ {
+ opt.trust_model=TM_PGP;
+ }
+ else if(ascii_strcasecmp(model,"pgp+pka")==0)
+ {
+ opt.trust_model=TM_PGP;
+ opt.pka_trust_increase = 1;
+ }
else if(ascii_strcasecmp(model,"classic")==0)
- opt.trust_model=TM_CLASSIC;
+ {
+ opt.trust_model=TM_CLASSIC;
+ }
else if(ascii_strcasecmp(model,"always")==0)
- opt.trust_model=TM_ALWAYS;
+ {
+ opt.trust_model=TM_ALWAYS;
+ }
else if(ascii_strcasecmp(model,"direct")==0)
- opt.trust_model=TM_DIRECT;
+ {
+ opt.trust_model=TM_DIRECT;
+ }
+ else if(ascii_strcasecmp(model,"direct+pka")==0)
+ {
+ opt.trust_model=TM_DIRECT;
+ opt.pka_trust_increase = 1;
+ }
else if(ascii_strcasecmp(model,"auto")==0)
- opt.trust_model=TM_AUTO;
+ {
+ opt.trust_model=TM_AUTO;
+ }
+ else if(ascii_strcasecmp(model,"auto+pka")==0)
+ {
+ opt.trust_model=TM_AUTO;
+ opt.pka_trust_increase = 1;
+ }
else
log_error("unknown trust model `%s'\n",model);
}
+
int
main (int argc, char **argv )
{
@@ -1698,10 +1731,11 @@ main (int argc, char **argv )
opt.keyserver_options.import_options=IMPORT_REPAIR_PKS_SUBKEY_BUG;
opt.keyserver_options.export_options=EXPORT_ATTRIBUTES;
opt.keyserver_options.options=
- KEYSERVER_INCLUDE_SUBKEYS|KEYSERVER_INCLUDE_REVOKED|KEYSERVER_TRY_DNS_SRV|KEYSERVER_HONOR_KEYSERVER_URL;
+ KEYSERVER_INCLUDE_SUBKEYS|KEYSERVER_INCLUDE_REVOKED|KEYSERVER_TRY_DNS_SRV|KEYSERVER_HONOR_KEYSERVER_URL|KEYSERVER_AUTO_PKA_RETRIEVE;
opt.verify_options=
VERIFY_SHOW_POLICY_URLS|VERIFY_SHOW_STD_NOTATIONS|VERIFY_SHOW_KEYSERVER_URLS;
opt.trust_model=TM_AUTO;
+ opt.pka_trust_increase=0;
opt.mangle_dos_filenames=0;
opt.min_cert_level=2;
set_screen_dimensions();
@@ -1772,7 +1806,13 @@ main (int argc, char **argv )
char *d, *buf = xmalloc (strlen (opt.homedir)+1);
const char *s = opt.homedir;
for (d=buf,s=opt.homedir; *s; s++)
+ {
*d++ = *s == '\\'? '/': *s;
+#ifdef HAVE_W32_SYSTEM
+ if (s[1] && IsDBCSLeadByte (*s))
+ *d++ = *++s;
+#endif
+ }
*d = 0;
set_homedir (buf);
}
@@ -2108,6 +2148,9 @@ main (int argc, char **argv )
opt.force_ownertrust=0;
}
break;
+ case oAllowPkaLookup:
+ opt.allow_pka_lookup = 1;
+ break;
case oLoadExtension:
#ifndef __riscos__
#if defined(USE_DYNAMIC_LINKING) || defined(_WIN32)
diff --git a/g10/keyserver.c b/g10/keyserver.c
index d7b5c8eb5..6d9939a92 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -88,7 +88,7 @@ static struct parse_options keyserver_opts[]=
{"auto-key-retrieve",KEYSERVER_AUTO_KEY_RETRIEVE,NULL,
N_("automatically retrieve keys when verifying signatures")},
{"auto-pka-retrieve",KEYSERVER_AUTO_PKA_RETRIEVE,NULL,
- NULL},
+ N_("automatically retrieve keys from DNS")},
{"try-dns-srv",KEYSERVER_TRY_DNS_SRV,NULL,
NULL},
{"honor-keyserver-url",KEYSERVER_HONOR_KEYSERVER_URL,NULL,
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 075dde1ce..8e512ecb5 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -1372,7 +1372,7 @@ pka_uri_from_sig (PKT_signature *sig)
assert (!sig->pka_info);
sig->flags.pka_tried = 1;
sig->pka_info = get_pka_address (sig);
- if (sig->pka_info)
+ if (sig->pka_info && opt.allow_pka_lookup)
{
char *uri;
diff --git a/g10/options.h b/g10/options.h
index 57f225c6b..3d425bb85 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -103,6 +103,8 @@ struct
TM_CLASSIC=0, TM_PGP=1, TM_EXTERNAL=2, TM_ALWAYS, TM_DIRECT, TM_AUTO
} trust_model;
int force_ownertrust;
+ int pka_trust_increase; /* Valid PKA information increases the trust. */
+ int allow_pka_lookup; /* PKA lookups are only done if this is set. */
enum
{
CO_GNUPG=0, CO_RFC2440, CO_RFC1991, CO_PGP2, CO_PGP6, CO_PGP7, CO_PGP8
diff --git a/g10/pkclist.c b/g10/pkclist.c
index 0e2de2803..11a5f522e 100644
--- a/g10/pkclist.c
+++ b/g10/pkclist.c
@@ -549,12 +549,14 @@ check_signatures_trust( PKT_signature *sig )
if ( fprlen == 20 && !memcmp (sig->pka_info->fpr, fpr, 20) )
{
okay = 1;
+ write_status_text (STATUS_PKA_TRUST_GOOD, sig->pka_info->email);
log_info (_("Note: Verified signer's address is `%s'\n"),
sig->pka_info->email);
}
else
{
okay = 0;
+ write_status_text (STATUS_PKA_TRUST_BAD, sig->pka_info->email);
log_info (_("Note: Signer's address `%s' "
"does not match DNS entry\n"), sig->pka_info->email);
}
@@ -564,17 +566,19 @@ check_signatures_trust( PKT_signature *sig )
case TRUST_UNKNOWN:
case TRUST_UNDEFINED:
case TRUST_MARGINAL:
- if (okay)
+ if (okay && opt.pka_trust_increase)
{
trustlevel = ((trustlevel & ~TRUST_MASK) | TRUST_FULLY);
- log_info ("trustlevel adjusted to FULL due to valid PKA info\n");
+ log_info (_("trustlevel adjusted to FULL"
+ " due to valid PKA info\n"));
}
/* (fall through) */
case TRUST_FULLY:
if (!okay)
{
trustlevel = ((trustlevel & ~TRUST_MASK) | TRUST_NEVER);
- log_info ("trustlevel adjusted to NEVER due to bad PKA info\n");
+ log_info (_("trustlevel adjusted to NEVER"
+ " due to bad PKA info\n"));
}
break;
}
diff --git a/g10/status.c b/g10/status.c
index f7183ae42..e9218765d 100644
--- a/g10/status.c
+++ b/g10/status.c
@@ -163,6 +163,8 @@ get_status_string ( int no )
case STATUS_SC_OP_SUCCESS : s = "SC_OP_SUCCESS"; break;
case STATUS_SC_OP_FAILURE : s = "SC_OP_FAILURE"; break;
case STATUS_BACKUP_KEY_CREATED:s="BACKUP_KEY_CREATED"; break;
+ case STATUS_PKA_TRUST_BAD : s = "PKA_TRUST_BAD"; break;
+ case STATUS_PKA_TRUST_GOOD : s = "PKA_TRUST_GOOD"; break;
default: s = "?"; break;
}
return s;
diff --git a/g10/status.h b/g10/status.h
index bf23b34a2..3e4c7699c 100644
--- a/g10/status.h
+++ b/g10/status.h
@@ -115,6 +115,9 @@
#define STATUS_BACKUP_KEY_CREATED 81
+#define STATUS_PKA_TRUST_BAD 82
+#define STATUS_PKA_TRUST_GOOD 83
+
/*-- status.c --*/
void set_status_fd ( int fd );
diff --git a/g10/trustdb.c b/g10/trustdb.c
index bb5167ea9..cff55ec21 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -450,7 +450,12 @@ init_trustdb()
}
if(opt.verbose)
- log_info(_("using %s trust model\n"),trust_model_string());
+ {
+ log_info(_("using %s trust model\n"),trust_model_string());
+ if (opt.pka_trust_increase)
+ log_info(_("PKA verification is allowed to"
+ " leverage trust to full\n"));
+ }
}
if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC)
@@ -2156,7 +2161,8 @@ validate_keys (int interactive)
* here when needed */
if (!utk_list)
{
- log_info (_("no ultimately trusted keys found\n"));
+ if (!opt.quiet)
+ log_info (_("no ultimately trusted keys found\n"));
goto leave;
}