diff --git a/src/command_runner.rs b/src/command_runner.rs index 75a1d3b..a463f6a 100644 --- a/src/command_runner.rs +++ b/src/command_runner.rs @@ -33,6 +33,15 @@ pub fn get_output(output: Output) -> Result, Box> { Ok(check_success(output)?.stdout) } +pub fn get_stderr_or_stdout(output: Output) -> Result, Box> { + let output = check_success(output)?; + Ok(if output.stderr.is_empty() { + output.stdout + } else { + output.stderr + }) +} + #[async_trait(?Send)] pub trait CommandRunner { async fn run<'a>(&self, program: &str, args: &'a [&'a OsStr], input: &[u8]) -> IoResult; diff --git a/src/symbols/tls/csr.rs b/src/symbols/tls/csr.rs index a5894fd..21f1959 100644 --- a/src/symbols/tls/csr.rs +++ b/src/symbols/tls/csr.rs @@ -1,4 +1,4 @@ -use crate::command_runner::CommandRunner; +use crate::command_runner::{get_stderr_or_stdout, CommandRunner}; use crate::symbols::Symbol; use async_trait::async_trait; use std::borrow::Borrow; @@ -32,13 +32,14 @@ impl, K: AsRef, P: AsRef> Symbol fo return Ok(false); } - let output = self + let result = self .command_runner - .get_stderr( + .run_with_args( "openssl", args!["req", "-in", self.csr_path.as_ref(), "-noout", "-verify",], ) .await?; + let output = get_stderr_or_stdout(result)?; Ok(output == b"verify OK\n" || output == b"Certificate request self-signature verify OK\n") }