Fixed LDAP lookups from SMTP rules

This commit is contained in:
mdecimus
2023-07-24 09:16:20 +02:00
parent ee9d85a318
commit e8df912b27
6 changed files with 30 additions and 7 deletions

View File

@@ -244,6 +244,10 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build_docker: build_docker:
needs:
- build
- cross_build
- cross_build_tools
name: Build Docker image for ${{ matrix.platform }} name: Build Docker image for ${{ matrix.platform }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: '!cancelled()' if: '!cancelled()'

View File

@@ -240,10 +240,11 @@ impl Directory for LdapDirectory {
async fn query(&self, query: &str, params: &[&str]) -> crate::Result<bool> { async fn query(&self, query: &str, params: &[&str]) -> crate::Result<bool> {
let mut conn = self.pool.get().await?; let mut conn = self.pool.get().await?;
tracing::trace!(context = "directory", event = "query", query = query, params = ?params);
Ok(if !params.is_empty() { Ok(if !params.is_empty() {
let mut expanded_query = String::with_capacity(query.len() + params.len() * 2); let mut expanded_query = String::with_capacity(query.len() + params.len() * 2);
for (pos, item) in query.split('$').enumerate() { for (pos, item) in query.split('?').enumerate() {
if pos > 0 { if pos > 0 {
if let Some(param) = params.get(pos - 1) { if let Some(param) = params.get(pos - 1) {
expanded_query.push_str(param); expanded_query.push_str(param);

View File

@@ -140,6 +140,7 @@ impl Directory for SqlDirectory {
} }
async fn query(&self, query: &str, params: &[&str]) -> crate::Result<bool> { async fn query(&self, query: &str, params: &[&str]) -> crate::Result<bool> {
tracing::trace!(context = "directory", event = "query", query = query, params = ?params);
let mut q = sqlx::query(query); let mut q = sqlx::query(query);
for param in params { for param in params {
q = q.bind(param); q = q.bind(param);

View File

@@ -39,7 +39,17 @@ async fn ldap_directory() {
.unwrap();*/ .unwrap();*/
// Obtain directory handle // Obtain directory handle
let handle = parse_config().directories.remove("ldap").unwrap(); let mut config = parse_config();
let lookups = config.lookups;
let handle = config.directories.remove("ldap").unwrap();
// Text lookup
assert!(lookups
.get("ldap/domains")
.unwrap()
.contains("example.org")
.await
.unwrap());
// Test authentication // Test authentication
assert_eq!( assert_eq!(

View File

@@ -62,9 +62,6 @@ email = "address"
quota = "quota" quota = "quota"
type = "type" type = "type"
[directory."sql".lookup]
domains = "SELECT name FROM domains WHERE name = ?"
[directory."ldap"] [directory."ldap"]
type = "ldap" type = "ldap"
address = "ldap://localhost:3893" address = "ldap://localhost:3893"

View File

@@ -31,13 +31,15 @@ async fn sql_directory() {
// Enable logging // Enable logging
/*tracing::subscriber::set_global_default( /*tracing::subscriber::set_global_default(
tracing_subscriber::FmtSubscriber::builder() tracing_subscriber::FmtSubscriber::builder()
.with_max_level(tracing::Level::DEBUG) .with_max_level(tracing::Level::TRACE)
.finish(), .finish(),
) )
.unwrap();*/ .unwrap();*/
// Obtain directory handle // Obtain directory handle
let handle = parse_config().directories.remove("sql").unwrap(); let mut config = parse_config();
let lookups = config.lookups;
let handle = config.directories.remove("sql").unwrap();
// Create tables // Create tables
create_test_directory(handle.as_ref()).await; create_test_directory(handle.as_ref()).await;
@@ -80,6 +82,14 @@ async fn sql_directory() {
link_test_address(handle.as_ref(), "robert", "robert@catchall.org", "primary").await; link_test_address(handle.as_ref(), "robert", "robert@catchall.org", "primary").await;
link_test_address(handle.as_ref(), "robert", "@catchall.org", "alias").await; link_test_address(handle.as_ref(), "robert", "@catchall.org", "alias").await;
// Text lookup
assert!(lookups
.get("sql/domains")
.unwrap()
.contains("example.org")
.await
.unwrap());
// Test authentication // Test authentication
assert_eq!( assert_eq!(
handle handle