После длительного перерыва, снова возвращаюсь к любимому exim.
Задача - извлекать данные по ldap из AD, проверяя по условию разрешена ли исходящая(входящая) почта на этапе авторизации.
Что сделано (тянем email из AD)
Код: Выделить всё
###LDAP###
hide ldap_default_servers = 192.168.1.14
hide ldap_version = 3
LDAP_BIND_USER = "exim@domain.sp.ru"
LDAP_BIND_PASS = "***"
LDAP_SIZE = 100
LDAP_BASE_SEARCH = DC=domain,DC=sp,DC=ru
LDAP_AD_MAIL_RCPT = user=LDAP_BIND_USER pass=LDAP_BIND_PASS ldap:///LDAP_BASE_SEARCH?mail?sub?(&(objectCLass=top)(objectClass=person)(objectClass=organizationalPerson)(objectClass=user)(mail=${quote_ldap:${local_part}@${domain}}))
#тесты
LDAP_AD_MAIL_USER_LOCAL = user=LDAP_BIND_USER pass=LDAP_BIND_PASS ldap:///LDAP_BASE_SEARCH?mail?sub?(&(&(&!(physicalDeliveryOfficeName=local)(mail=${quote_ldap:${local_part}@${domain}}))))
#рабочий вариант с базой mysql
deny message = Sorry. Sender Access Limited.
hosts = +relay_from_hosts
domains = !+local_domains
# senders = ${lookup mysql{SELECT login FROM users WHERE `login`='${quote_mysql:$sender_address}' and `noinet`='1'}} ###working mysql query
#тесты ldap
senders = ${lookup ldap {LDAP_AD_MAIL_USER_LOCAL}}
Никак не получается переписать ldap запрос с mysql'я, можно воспользоваться костылем по обновлению локальной mysql базы из ldap благо скрипт на pel имеется и работает
Код: Выделить всё
#!/usr/bin/perl
# Программа, выполняющая запросы к AD
use strict;
use Net::LDAP;
my $dc = 'server.domain.sp.ru';
my $user = 'exim@domain.sp.ru';
my $passwd = '****';
my $base = "dc=domain, dc=sp, dc=ru";
my $scope = "subtree";
#my $filter = "(&(!(physicalDeliveryOfficeName=local))(mail=emailuser*))";
my $filter = "(&(&(&(physicalDeliveryOfficeName=local)(mail=emailuser*))))";
my $ldap = Net::LDAP->new($dc) or die $@;
my $rc = $ldap->bind($user, password => $passwd);
die $rc->error if $rc->code;
my $search = $ldap->search(
base => $base,
scope => $scope,
filter => $filter
);
die $search->error if $search->code;
foreach my $entry ($search->entries) {
$entry->dump;
}
$ldap->unbind;
Код: Выделить всё
my $filter = "(&(!(physicalDeliveryOfficeName=local))(mail=emailuser*))";
my $filter = "(&(&(&(physicalDeliveryOfficeName=local)(mail=emailuser*))))";