diff options
| author | Werner Koch <[email protected]> | 2017-09-26 10:00:03 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2017-09-26 10:00:03 +0000 |
| commit | cd2d758f3f9e0007ecd6bae9d2ee0d631773e237 (patch) | |
| tree | 0e1b9c898d0527969fa953e0f1fc418e610c8da4 /dirmngr | |
| parent | g10: Select a secret key by checking availability under gpg-agent. (diff) | |
| parent | po: Remove trailing colon from a German pinentry string. (diff) | |
| download | gnupg-cd2d758f3f9e0007ecd6bae9d2ee0d631773e237.tar.gz gnupg-cd2d758f3f9e0007ecd6bae9d2ee0d631773e237.zip | |
Merge branch 'STABLE-BRANCH-2-2' into master
--
Signed-off-by: Werner Koch <[email protected]>
Conflicts:
NEWS - include release info from 2.2.1
configure.ac - keep master.
Diffstat (limited to 'dirmngr')
| -rw-r--r-- | dirmngr/certcache.c | 18 | ||||
| -rw-r--r-- | dirmngr/certcache.h | 3 | ||||
| -rw-r--r-- | dirmngr/http-ntbtls.c | 6 |
3 files changed, 26 insertions, 1 deletions
diff --git a/dirmngr/certcache.c b/dirmngr/certcache.c index b4e538131..56629fdda 100644 --- a/dirmngr/certcache.c +++ b/dirmngr/certcache.c @@ -94,6 +94,10 @@ static int initialization_done; /* Total number of non-permanent certificates. */ static unsigned int total_nonperm_certificates; +/* For each cert class the corresponding bit is set if at least one + * certificate of that class is loaded permanetly. */ +static unsigned int any_cert_of_class; + #ifdef HAVE_W32_SYSTEM /* We load some functions dynamically. Provide typedefs for tehse @@ -343,7 +347,9 @@ put_cert (ksba_cert_t cert, int permanent, unsigned int trustclass, ci->permanent = !!permanent; ci->trustclasses = trustclass; - if (!permanent) + if (permanent) + any_cert_of_class |= trustclass; + else total_nonperm_certificates++; return 0; @@ -758,6 +764,7 @@ cert_cache_deinit (int full) } total_nonperm_certificates = 0; + any_cert_of_class = 0; initialization_done = 0; release_cache_lock (); } @@ -814,6 +821,15 @@ cert_cache_print_stats (void) } +/* Return true if any cert of a class in MASK is permanently + * loaded. */ +int +cert_cache_any_in_class (unsigned int mask) +{ + return !!(any_cert_of_class & mask); +} + + /* Put CERT into the certificate cache. */ gpg_error_t cache_cert (ksba_cert_t cert) diff --git a/dirmngr/certcache.h b/dirmngr/certcache.h index 92529bf11..8d645836d 100644 --- a/dirmngr/certcache.h +++ b/dirmngr/certcache.h @@ -39,6 +39,9 @@ void cert_cache_deinit (int full); /* Print some statistics to the log file. */ void cert_cache_print_stats (void); +/* Return true if any cert of a class in MASK is permanently loaded. */ +int cert_cache_any_in_class (unsigned int mask); + /* Compute the fingerprint of the certificate CERT and put it into the 20 bytes large buffer DIGEST. Return address of this buffer. */ unsigned char *cert_compute_fpr (ksba_cert_t cert, unsigned char *digest); diff --git a/dirmngr/http-ntbtls.c b/dirmngr/http-ntbtls.c index 250db556c..ea66a4d73 100644 --- a/dirmngr/http-ntbtls.c +++ b/dirmngr/http-ntbtls.c @@ -91,6 +91,12 @@ gnupg_http_tls_verify_cb (void *opaque, validate_flags |= VALIDATE_FLAG_TRUST_HKP; if ((http_flags & HTTP_FLAG_TRUST_SYS)) validate_flags |= VALIDATE_FLAG_TRUST_SYSTEM; + + /* If HKP trust is requested and there are no HKP certificates + * configured, also try thye standard system certificates. */ + if ((validate_flags & VALIDATE_FLAG_TRUST_HKP) + && !cert_cache_any_in_class (CERTTRUST_CLASS_HKP)) + validate_flags |= VALIDATE_FLAG_TRUST_SYSTEM; } if ((http_flags & HTTP_FLAG_NO_CRL)) |
