Improve error handling opening the cert store.
- Improvements similar to the one in the previous commit. - See #492.
This commit is contained in:
parent
5adb325f88
commit
90cb8d4ef2
@ -927,6 +927,8 @@ pub fn dispatch_search(mut sq: Sq, c: cli::network::search::Command)
|
|||||||
let rt = tokio::runtime::Runtime::new()?;
|
let rt = tokio::runtime::Runtime::new()?;
|
||||||
rt.block_on(async {
|
rt.block_on(async {
|
||||||
for _ in 0..iterations {
|
for _ in 0..iterations {
|
||||||
|
let cert_store = sq.cert_store()?;
|
||||||
|
|
||||||
let mut requests = JoinSet::new();
|
let mut requests = JoinSet::new();
|
||||||
let mut converged = true;
|
let mut converged = true;
|
||||||
std::mem::take(&mut queries).into_iter().for_each(|query| {
|
std::mem::take(&mut queries).into_iter().for_each(|query| {
|
||||||
@ -1024,7 +1026,7 @@ pub fn dispatch_search(mut sq: Sq, c: cli::network::search::Command)
|
|||||||
// Finally, we also consult the certificate store to
|
// Finally, we also consult the certificate store to
|
||||||
// discover more identifiers. This is sync, but we use
|
// discover more identifiers. This is sync, but we use
|
||||||
// the same mechanism to merge the result back in.
|
// the same mechanism to merge the result back in.
|
||||||
if let Ok(Some(store)) = sq.cert_store() {
|
if let Some(store) = &cert_store {
|
||||||
pb.inc_length(1);
|
pb.inc_length(1);
|
||||||
let mut email_query = UserIDQueryParams::new();
|
let mut email_query = UserIDQueryParams::new();
|
||||||
email_query.set_email(true);
|
email_query.set_email(true);
|
||||||
|
@ -181,7 +181,7 @@ impl<'c, 'store, 'rstore> VHelper<'c, 'store, 'rstore> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_sigs(&mut self, results: &[VerificationResult]) {
|
fn print_sigs(&mut self, results: &[VerificationResult]) -> Result<()> {
|
||||||
make_qprintln!(self.quiet);
|
make_qprintln!(self.quiet);
|
||||||
use crate::common::pki::output::print_path;
|
use crate::common::pki::output::print_path;
|
||||||
use crate::print_error_chain;
|
use crate::print_error_chain;
|
||||||
@ -265,7 +265,7 @@ impl<'c, 'store, 'rstore> VHelper<'c, 'store, 'rstore> {
|
|||||||
qprintln!("Authenticating {} ({:?}) using the web of trust:",
|
qprintln!("Authenticating {} ({:?}) using the web of trust:",
|
||||||
cert_fpr, signer_userid);
|
cert_fpr, signer_userid);
|
||||||
|
|
||||||
if let Ok(Some(cert_store)) = self.sq.cert_store() {
|
if let Some(cert_store) = self.sq.cert_store()? {
|
||||||
// Build the network.
|
// Build the network.
|
||||||
let cert_store = sequoia_wot::store::CertStore::from_store(
|
let cert_store = sequoia_wot::store::CertStore::from_store(
|
||||||
cert_store, self.sq.policy, reference_time);
|
cert_store, self.sq.policy, reference_time);
|
||||||
@ -432,6 +432,8 @@ impl<'c, 'store, 'rstore> VHelper<'c, 'store, 'rstore> {
|
|||||||
|
|
||||||
qprintln!("");
|
qprintln!("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,8 +516,9 @@ impl<'c, 'store, 'rstore> VerificationHelper for VHelper<'c, 'store, 'rstore>
|
|||||||
qprintln!("Encrypted using {}", sym_algo);
|
qprintln!("Encrypted using {}", sym_algo);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
MessageLayer::SignatureGroup { ref results } =>
|
MessageLayer::SignatureGroup { ref results } => {
|
||||||
self.print_sigs(results),
|
self.print_sigs(results)?;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
src/sq.rs
14
src/sq.rs
@ -456,18 +456,18 @@ impl<'store: 'rstore, 'rstore> Sq<'store, 'rstore> {
|
|||||||
|
|
||||||
/// Returns the secret keys found in any specified keyrings.
|
/// Returns the secret keys found in any specified keyrings.
|
||||||
pub fn keyring_tsks(&self)
|
pub fn keyring_tsks(&self)
|
||||||
-> &BTreeMap<Fingerprint,
|
-> Result<&BTreeMap<Fingerprint,
|
||||||
(Fingerprint, Key<key::PublicParts, key::UnspecifiedRole>)>
|
(Fingerprint, Key<key::PublicParts, key::UnspecifiedRole>)>>
|
||||||
{
|
{
|
||||||
if let Some(keyring_tsks) = self.keyring_tsks.get() {
|
if let Some(keyring_tsks) = self.keyring_tsks.get() {
|
||||||
keyring_tsks
|
Ok(keyring_tsks)
|
||||||
} else {
|
} else {
|
||||||
// This also initializes keyring_tsks.
|
// This also initializes keyring_tsks.
|
||||||
let _ = self.cert_store();
|
self.cert_store()?;
|
||||||
|
|
||||||
// If something went wrong, we just set it to an empty
|
// If something went wrong, we just set it to an empty
|
||||||
// map.
|
// map.
|
||||||
self.keyring_tsks.get_or_init(|| BTreeMap::new())
|
Ok(self.keyring_tsks.get_or_init(|| BTreeMap::new()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1293,7 +1293,7 @@ impl<'store: 'rstore, 'rstore> Sq<'store, 'rstore> {
|
|||||||
let try_keyrings = |cert: &Cert, key: &Key<_, _>|
|
let try_keyrings = |cert: &Cert, key: &Key<_, _>|
|
||||||
-> Result<_>
|
-> Result<_>
|
||||||
{
|
{
|
||||||
let keyring_tsks = self.keyring_tsks();
|
let keyring_tsks = self.keyring_tsks()?;
|
||||||
if let Some((cert_fpr, key))
|
if let Some((cert_fpr, key))
|
||||||
= keyring_tsks.get(&key.fingerprint())
|
= keyring_tsks.get(&key.fingerprint())
|
||||||
{
|
{
|
||||||
@ -1353,7 +1353,7 @@ impl<'store: 'rstore, 'rstore> Sq<'store, 'rstore> {
|
|||||||
let try_keyrings = |cert: &Cert, key: &Key<_, _>|
|
let try_keyrings = |cert: &Cert, key: &Key<_, _>|
|
||||||
-> Result<_>
|
-> Result<_>
|
||||||
{
|
{
|
||||||
let keyring_tsks = self.keyring_tsks();
|
let keyring_tsks = self.keyring_tsks()?;
|
||||||
if let Some((cert_fpr, key))
|
if let Some((cert_fpr, key))
|
||||||
= keyring_tsks.get(&key.fingerprint())
|
= keyring_tsks.get(&key.fingerprint())
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user