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"
46
46
os_info = { version = " 3.0.1" , default-features = false }
47
47
percent-encoding = " 2.0.0"
48
48
rand = { version = " 0.7.2" , features = [" small_rng" ] }
49
+ rustls-pemfile = " 0.2.1"
49
50
serde_with = " 1.3.1"
50
51
sha-1 = " 0.9.4"
51
52
sha2 = " 0.9.3"
Original file line number Diff line number Diff line change @@ -51,16 +51,20 @@ 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 => {
57
57
send_client_first ( conn, credential, server_api)
58
58
. await ?
59
59
. raw_response
60
60
}
61
61
} ;
62
62
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
+ {
64
68
return Err ( Error :: authentication_error (
65
69
"MONGODB-X509" ,
66
70
"Authentication failed" ,
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ use rustls::{
22
22
ServerCertVerifier ,
23
23
TLSError ,
24
24
} ;
25
+ use rustls_pemfile:: { read_one, Item } ;
25
26
use serde:: {
26
27
de:: { Error , Unexpected } ,
27
28
Deserialize ,
@@ -615,19 +616,23 @@ impl TlsOptions {
615
616
} ;
616
617
617
618
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 ( ) )
624
631
}
625
- . into ( ) )
626
632
}
627
633
} ;
628
634
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) ?;
631
636
}
632
637
633
638
Ok ( config)
You can’t perform that action at this time.
0 commit comments