File tree Expand file tree Collapse file tree 3 files changed +30
-14
lines changed Expand file tree Collapse file tree 3 files changed +30
-14
lines changed Original file line number Diff line number Diff line change @@ -63,6 +63,7 @@ md-5 = "0.9.1"
63
63
os_info = { version = " 3.0.1" , default-features = false }
64
64
percent-encoding = " 2.0.0"
65
65
rand = { version = " 0.8.3" , features = [" small_rng" ] }
66
+ rustls-pemfile = " 0.2.1"
66
67
serde_with = " 1.3.1"
67
68
sha-1 = " 0.9.4"
68
69
sha2 = " 0.9.3"
Original file line number Diff line number Diff line change @@ -51,14 +51,18 @@ pub(super) async fn authenticate_stream(
51
51
server_api : Option < & ServerApi > ,
52
52
server_first : impl Into < Option < Document > > ,
53
53
) -> Result < ( ) > {
54
- let server_response = match server_first. into ( ) {
55
- Some ( server_first ) => server_first ,
54
+ let server_response: Document = match server_first. into ( ) {
55
+ Some ( _ ) => return Ok ( ( ) ) ,
56
56
None => send_client_first ( conn, credential, server_api)
57
57
. await ?
58
58
. auth_response_body ( "MONGODB-X509" ) ?,
59
59
} ;
60
60
61
- if server_response. get_str ( "dbname" ) != Ok ( "$external" ) {
61
+ if server_response
62
+ . get ( "ok" )
63
+ . and_then ( crate :: bson_util:: get_int)
64
+ != Some ( 1 )
65
+ {
62
66
return Err ( Error :: authentication_error (
63
67
"MONGODB-X509" ,
64
68
"Authentication failed" ,
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ use rustls::{
26
26
ServerCertVerifier ,
27
27
TLSError ,
28
28
} ;
29
+ use rustls_pemfile:: { read_one, Item } ;
29
30
use serde:: {
30
31
de:: { Error , Unexpected } ,
31
32
Deserialize ,
@@ -846,22 +847,32 @@ impl TlsOptions {
846
847
} ;
847
848
848
849
file. seek ( SeekFrom :: Start ( 0 ) ) ?;
849
- let key = match pemfile:: rsa_private_keys ( & mut file) {
850
- Ok ( key) => key,
851
- Err ( ( ) ) => {
852
- return Err ( ErrorKind :: InvalidTlsConfig {
853
- message : format ! (
854
- "Unable to parse PEM-encoded RSA key from {}" ,
855
- path. display( )
856
- ) ,
850
+ let key = loop {
851
+ match read_one ( & mut file) {
852
+ Ok ( Some ( Item :: PKCS8Key ( bytes) ) ) | Ok ( Some ( Item :: RSAKey ( bytes) ) ) => {
853
+ break rustls:: PrivateKey ( bytes)
854
+ }
855
+ Ok ( Some ( _) ) => continue ,
856
+ Ok ( None ) => {
857
+ return Err ( ErrorKind :: InvalidTlsConfig {
858
+ message : format ! ( "No PEM-encoded keys in {}" , path. display( ) ) ,
859
+ }
860
+ . into ( ) )
861
+ }
862
+ Err ( _) => {
863
+ return Err ( ErrorKind :: InvalidTlsConfig {
864
+ message : format ! (
865
+ "Unable to parse PEM-encoded item from {}" ,
866
+ path. display( )
867
+ ) ,
868
+ }
869
+ . into ( ) )
857
870
}
858
- . into ( ) )
859
871
}
860
872
} ;
861
873
862
- // TODO: Get rid of unwrap.
863
874
config
864
- . set_single_client_cert ( certs, key. into_iter ( ) . next ( ) . unwrap ( ) )
875
+ . set_single_client_cert ( certs, key)
865
876
. map_err ( |e| ErrorKind :: InvalidTlsConfig {
866
877
message : e. to_string ( ) ,
867
878
} ) ?;
You can’t perform that action at this time.
0 commit comments