mirror of
https://github.com/stalwartlabs/mail-server.git
synced 2025-02-22 15:03:26 +08:00
Fixed LDAP lookups from SMTP rules
This commit is contained in:
parent
ee9d85a318
commit
e8df912b27
6 changed files with 30 additions and 7 deletions
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
|
@ -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()'
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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!(
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue