Fixed LDAP lookups from SMTP rules
This commit is contained in:
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -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()'
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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!(
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user