File tree Expand file tree Collapse file tree 3 files changed +22
-12
lines changed Expand file tree Collapse file tree 3 files changed +22
-12
lines changed Original file line number Diff line number Diff line change @@ -46,6 +46,7 @@ md-5 = "0.9.1"
4646os_info = { version = " 3.0.1" , default-features = false }
4747percent-encoding = " 2.0.0"
4848rand = { version = " 0.7.2" , features = [" small_rng" ] }
49+ rustls-pemfile = " 0.2.1"
4950serde_with = " 1.3.1"
5051sha-1 = " 0.9.4"
5152sha2 = " 0.9.3"
Original file line number Diff line number Diff line change @@ -51,16 +51,20 @@ pub(super) async fn authenticate_stream(
5151 server_api : Option < & ServerApi > ,
5252 server_first : impl Into < Option < Document > > ,
5353) -> 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 ( ( ) ) ,
5656 None => {
5757 send_client_first ( conn, credential, server_api)
5858 . await ?
5959 . raw_response
6060 }
6161 } ;
6262
63- if server_response. get_str ( "dbname" ) != Ok ( "$external" ) {
63+ if server_response
64+ . get ( "ok" )
65+ . and_then ( crate :: bson_util:: get_int)
66+ != Some ( 1 )
67+ {
6468 return Err ( Error :: authentication_error (
6569 "MONGODB-X509" ,
6670 "Authentication failed" ,
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ use rustls::{
2222 ServerCertVerifier ,
2323 TLSError ,
2424} ;
25+ use rustls_pemfile:: { read_one, Item } ;
2526use serde:: {
2627 de:: { Error , Unexpected } ,
2728 Deserialize ,
@@ -615,19 +616,23 @@ impl TlsOptions {
615616 } ;
616617
617618 file. seek ( SeekFrom :: Start ( 0 ) ) ?;
618- let key = match pemfile:: rsa_private_keys ( & mut file) {
619- Ok ( key) => key,
620- Err ( ( ) ) => {
621- return Err ( ErrorKind :: ParseError {
622- data_type : "PEM-encoded RSA key" . to_string ( ) ,
623- file_path : path,
619+ let key = loop {
620+ match read_one ( & mut file) {
621+ Ok ( Some ( Item :: PKCS8Key ( bytes) ) ) | Ok ( Some ( Item :: RSAKey ( bytes) ) ) => {
622+ break rustls:: PrivateKey ( bytes)
623+ }
624+ Ok ( Some ( _) ) => continue ,
625+ Ok ( None ) | Err ( _) => {
626+ return Err ( ErrorKind :: ParseError {
627+ data_type : "PEM-encoded keys" . to_string ( ) ,
628+ file_path : path,
629+ }
630+ . into ( ) )
624631 }
625- . into ( ) )
626632 }
627633 } ;
628634
629- // TODO: Get rid of unwrap.
630- config. set_single_client_cert ( certs, key. into_iter ( ) . next ( ) . unwrap ( ) ) ?;
635+ config. set_single_client_cert ( certs, key) ?;
631636 }
632637
633638 Ok ( config)
You can’t perform that action at this time.
0 commit comments