aboutsummaryrefslogtreecommitdiff
path: root/openssl/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-11-13 16:18:52 +0000
committerSteven Fackler <[email protected]>2016-11-13 16:18:52 +0000
commited9f600e2889906bb928150d7e892370062f6ca1 (patch)
tree4fc24159db5184d1cfd36dc6c36a65c90479c324 /openssl/src
parentSupport serialization of encrypted private keys (diff)
downloadrust-openssl-ed9f600e2889906bb928150d7e892370062f6ca1.tar.xz
rust-openssl-ed9f600e2889906bb928150d7e892370062f6ca1.zip
Make password callback return a Result
Diffstat (limited to 'openssl/src')
-rw-r--r--openssl/src/dsa.rs2
-rw-r--r--openssl/src/macros.rs2
-rw-r--r--openssl/src/rsa.rs2
-rw-r--r--openssl/src/util.rs10
4 files changed, 11 insertions, 5 deletions
diff --git a/openssl/src/dsa.rs b/openssl/src/dsa.rs
index 39f98475..9afb952e 100644
--- a/openssl/src/dsa.rs
+++ b/openssl/src/dsa.rs
@@ -237,7 +237,7 @@ mod test {
Dsa::private_key_from_pem_callback(key, |password| {
password_queried = true;
password[..6].copy_from_slice(b"mypass");
- 6
+ Ok(6)
})
.unwrap();
diff --git a/openssl/src/macros.rs b/openssl/src/macros.rs
index 6c37f7b0..0be5ff17 100644
--- a/openssl/src/macros.rs
+++ b/openssl/src/macros.rs
@@ -81,7 +81,7 @@ macro_rules! private_key_from_pem {
pub fn private_key_from_pem_callback<F>(pem: &[u8],
callback: F)
-> Result<$t, ::error::ErrorStack>
- where F: FnOnce(&mut [u8]) -> usize
+ where F: FnOnce(&mut [u8]) -> Result<usize, ::error::ErrorStack>
{
unsafe {
ffi::init();
diff --git a/openssl/src/rsa.rs b/openssl/src/rsa.rs
index 5f94fd82..f2dd8d00 100644
--- a/openssl/src/rsa.rs
+++ b/openssl/src/rsa.rs
@@ -421,7 +421,7 @@ mod test {
Rsa::private_key_from_pem_callback(key, |password| {
password_queried = true;
password[..6].copy_from_slice(b"mypass");
- 6
+ Ok(6)
})
.unwrap();
diff --git a/openssl/src/util.rs b/openssl/src/util.rs
index dea94668..f4883976 100644
--- a/openssl/src/util.rs
+++ b/openssl/src/util.rs
@@ -4,6 +4,8 @@ use std::cell::UnsafeCell;
use std::panic::{self, AssertUnwindSafe};
use std::slice;
+use error::ErrorStack;
+
/// Wraps a user-supplied callback and a slot for panics thrown inside the callback (while FFI
/// frames are on the stack).
///
@@ -64,7 +66,7 @@ pub unsafe extern fn invoke_passwd_cb<F>(buf: *mut c_char,
_rwflag: c_int,
cb_state: *mut c_void)
-> c_int
- where F: FnOnce(&mut [u8]) -> usize
+ where F: FnOnce(&mut [u8]) -> Result<usize, ErrorStack>
{
let callback = &mut *(cb_state as *mut CallbackState<F>);
@@ -74,7 +76,11 @@ pub unsafe extern fn invoke_passwd_cb<F>(buf: *mut c_char,
}));
match result {
- Ok(len) => len as c_int,
+ Ok(Ok(len)) => len as c_int,
+ Ok(Err(_)) => {
+ // FIXME restore error stack
+ 0
+ }
Err(err) => {
callback.panic = Some(err);
0