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 }}
build_docker:
needs:
- build
- cross_build
- cross_build_tools
name: Build Docker image for ${{ matrix.platform }}
runs-on: ubuntu-latest
if: '!cancelled()'

View file

@ -240,10 +240,11 @@ impl Directory for LdapDirectory {
async fn query(&self, query: &str, params: &[&str]) -> crate::Result<bool> {
let mut conn = self.pool.get().await?;
tracing::trace!(context = "directory", event = "query", query = query, params = ?params);
Ok(if !params.is_empty() {
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 let Some(param) = params.get(pos - 1) {
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> {
tracing::trace!(context = "directory", event = "query", query = query, params = ?params);
let mut q = sqlx::query(query);
for param in params {
q = q.bind(param);

View file

@ -39,7 +39,17 @@ async fn ldap_directory() {
.unwrap();*/
// 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
assert_eq!(

View file

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

View file

@ -31,13 +31,15 @@ async fn sql_directory() {
// Enable logging
/*tracing::subscriber::set_global_default(
tracing_subscriber::FmtSubscriber::builder()
.with_max_level(tracing::Level::DEBUG)
.with_max_level(tracing::Level::TRACE)
.finish(),
)
.unwrap();*/
// 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_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", "@catchall.org", "alias").await;
// Text lookup
assert!(lookups
.get("sql/domains")
.unwrap()
.contains("example.org")
.await
.unwrap());
// Test authentication
assert_eq!(
handle