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"
6363os_info = { version = " 3.0.1" , default-features = false }
6464percent-encoding = " 2.0.0"
6565rand = { version = " 0.8.3" , features = [" small_rng" ] }
66+ rustls-pemfile = " 0.2.1"
6667serde_with = " 1.3.1"
6768sha-1 = " 0.9.4"
6869sha2 = " 0.9.3"
Original file line number Diff line number Diff line change @@ -51,14 +51,18 @@ 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 => send_client_first ( conn, credential, server_api)
5757 . await ?
5858 . auth_response_body ( "MONGODB-X509" ) ?,
5959 } ;
6060
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+ {
6266 return Err ( Error :: authentication_error (
6367 "MONGODB-X509" ,
6468 "Authentication failed" ,
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ use rustls::{
2626 ServerCertVerifier ,
2727 TLSError ,
2828} ;
29+ use rustls_pemfile:: { read_one, Item } ;
2930use serde:: {
3031 de:: { Error , Unexpected } ,
3132 Deserialize ,
@@ -846,22 +847,32 @@ impl TlsOptions {
846847 } ;
847848
848849 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 ( ) )
857870 }
858- . into ( ) )
859871 }
860872 } ;
861873
862- // TODO: Get rid of unwrap.
863874 config
864- . set_single_client_cert ( certs, key. into_iter ( ) . next ( ) . unwrap ( ) )
875+ . set_single_client_cert ( certs, key)
865876 . map_err ( |e| ErrorKind :: InvalidTlsConfig {
866877 message : e. to_string ( ) ,
867878 } ) ?;
You can’t perform that action at this time.
0 commit comments