This commit is contained in:
Lev
2022-06-27 17:01:40 -07:00
parent 7667fefead
commit 186f8be5b3
3 changed files with 14 additions and 19 deletions

View File

@@ -1,6 +1,6 @@
/// Handle clients by pretending to be a PostgreSQL server. /// Handle clients by pretending to be a PostgreSQL server.
use bytes::{Buf, BufMut, BytesMut}; use bytes::{Buf, BufMut, BytesMut};
use log::{debug, error, trace, info}; use log::{debug, error, info, trace};
use std::collections::HashMap; use std::collections::HashMap;
use tokio::io::{split, AsyncReadExt, BufReader, ReadHalf, WriteHalf}; use tokio::io::{split, AsyncReadExt, BufReader, ReadHalf, WriteHalf};
use tokio::net::TcpStream; use tokio::net::TcpStream;
@@ -82,7 +82,6 @@ pub async fn client_entrypoint(
let addr = stream.peer_addr().unwrap(); let addr = stream.peer_addr().unwrap();
match get_startup::<TcpStream>(&mut stream).await { match get_startup::<TcpStream>(&mut stream).await {
// Client requested a TLS connection. // Client requested a TLS connection.
Ok((ClientConnectionType::Tls, _)) => { Ok((ClientConnectionType::Tls, _)) => {
let config = get_config(); let config = get_config();
@@ -105,7 +104,6 @@ pub async fn client_entrypoint(
Err(err) => Err(err), Err(err) => Err(err),
} }
} }
// TLS is not configured, we cannot offer it. // TLS is not configured, we cannot offer it.
else { else {
// Rejecting client request for TLS. // Rejecting client request for TLS.
@@ -225,14 +223,13 @@ pub async fn startup_tls(
// TLS negotitation failed. // TLS negotitation failed.
Err(err) => { Err(err) => {
error!("TLS negotiation failed: {:?}", err); error!("TLS negotiation failed: {:?}", err);
return Err(Error::TlsError) return Err(Error::TlsError);
} }
}; };
// TLS negotitation successful. // TLS negotitation successful.
// Continue with regular startup using encrypted connection. // Continue with regular startup using encrypted connection.
match get_startup::<TlsStream<TcpStream>>(&mut stream).await { match get_startup::<TlsStream<TcpStream>>(&mut stream).await {
// Got good startup message, proceeding like normal except we // Got good startup message, proceeding like normal except we
// are encrypted now. // are encrypted now.
Ok((ClientConnectionType::Startup, bytes)) => { Ok((ClientConnectionType::Startup, bytes)) => {

View File

@@ -4,15 +4,15 @@ use log::{error, info};
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use serde_derive::Deserialize; use serde_derive::Deserialize;
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::path::Path;
use std::sync::Arc; use std::sync::Arc;
use tokio::fs::File; use tokio::fs::File;
use tokio::io::AsyncReadExt; use tokio::io::AsyncReadExt;
use toml; use toml;
use std::path::Path;
use crate::errors::Error; use crate::errors::Error;
use crate::{ClientServerMap, ConnectionPool};
use crate::tls::{load_certs, load_keys}; use crate::tls::{load_certs, load_keys};
use crate::{ClientServerMap, ConnectionPool};
/// Globally available configuration. /// Globally available configuration.
static CONFIG: Lazy<ArcSwap<Config>> = Lazy::new(|| ArcSwap::from_pointee(Config::default())); static CONFIG: Lazy<ArcSwap<Config>> = Lazy::new(|| ArcSwap::from_pointee(Config::default()));
@@ -264,7 +264,7 @@ impl Config {
Some(tls_private_key) => { Some(tls_private_key) => {
info!("TLS private key: {}", tls_private_key); info!("TLS private key: {}", tls_private_key);
info!("TLS support is enabled"); info!("TLS support is enabled");
}, }
None => (), None => (),
} }
@@ -272,7 +272,7 @@ impl Config {
None => { None => {
info!("TLS support is disabled"); info!("TLS support is disabled");
}, }
}; };
} }
} }
@@ -400,15 +400,13 @@ pub async fn parse(path: &str) -> Result<(), Error> {
Ok(_) => { Ok(_) => {
// Cert is okay, but what about the private key? // Cert is okay, but what about the private key?
match config.general.tls_private_key.clone() { match config.general.tls_private_key.clone() {
Some(tls_private_key) => { Some(tls_private_key) => match load_keys(&Path::new(&tls_private_key)) {
match load_keys(&Path::new(&tls_private_key)) { Ok(_) => (),
Ok(_) => (), Err(err) => {
Err(err) => { error!("tls_private_key is incorrectly configured: {:?}", err);
error!("tls_private_key is incorrectly configured: {:?}", err); return Err(Error::BadConfig);
return Err(Error::BadConfig);
}
} }
} },
None => { None => {
error!("tls_certificate is set, but the tls_private_key is not"); error!("tls_certificate is set, but the tls_private_key is not");
@@ -422,7 +420,7 @@ pub async fn parse(path: &str) -> Result<(), Error> {
return Err(Error::BadConfig); return Err(Error::BadConfig);
} }
} }
}, }
None => (), None => (),
}; };

View File

@@ -163,7 +163,7 @@ async fn main() {
addr, addr,
format_duration(&duration) format_duration(&duration)
); );
}, }
Err(err) => { Err(err) => {
debug!("Client disconnected with error {:?}", err); debug!("Client disconnected with error {:?}", err);