Exim + PERL

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
arez1978
ефрейтор
Сообщения: 69
Зарегистрирован: 2012-03-15 7:20:22

Exim + PERL

Непрочитанное сообщение arez1978 » 2012-03-15 7:26:49

Здравствуйте!
Настраиваю по статье и у меня произошла оказия, при отправке письма одним из пользователей на адрес другого пользователя домена получаю следующее сообщение в логах.

Код: Выделить всё

exim -bd -d+all > /var/log/exim-debug.log 2>&1

Код: Выделить всё

09:05:16 19442 Start search
09:05:16 19442 search ended by ldap_result yielding 115
09:05:16 19442 ldap_parse_result: -14
09:05:16 19442 ldap_parse_result yielded 0: Success
09:05:16 19442 LDAP search: no results
09:05:16 19442 lookup failed
09:05:16 19442 expanding: ${lookup ldap{user=CN=exim,CN=Users,DC=domen,DC=ru pass=PassMail256 ldap:///DC=domen,DC=ru?mail?sub?(&(objectClass=top)(objectClass=g
09:05:16 19442    result:
09:05:16 19442 Starting Perl interpreter
09:05:16 19442 failed to expand: ${perl{get_mail_lists}{${lookup ldap{user=CN=exim,CN=Users,DC=domen,DC=ru pass=PassMail256 ldap:///DC=domen,DC=ru?mail?sub?(&(
09:05:16 19442    error message: Undefined subroutine &main::get_mail_lists called.
09:05:16 19442
09:05:16 19442 virtual_aliases router: defer for semenovd@domen.ru
09:05:16 19442   message: failed to expand "${perl{get_mail_lists}{${lookup ldap{user=CN=exim,CN=Users,DC=domen,DC=ru pass=PassMail256 ldap:///DC=domen,DC=ru?m
09:05:16 19442
09:05:16 19442 ----------- end verify ------------
Часть кода обрезалась справа. Буду рад любому коментарию

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

arez1978
ефрейтор
Сообщения: 69
Зарегистрирован: 2012-03-15 7:20:22

Re: Exim + PERL

Непрочитанное сообщение arez1978 » 2012-03-15 8:22:23

Дополнение:

Код: Выделить всё

 uname -a
FreeBSD mx1.domen.ru 8.2-STABLE FreeBSD 8.2-STABLE #0: Thu Jan 12 07:48:52 YEKT 2012     root@mx1.domen.ru:/usr/obj/usr/src/sys/FREE  amd64
PERL_VERSION=5.8.9
EXIM=4.77

arez1978
ефрейтор
Сообщения: 69
Зарегистрирован: 2012-03-15 7:20:22

Re: Exim + PERL

Непрочитанное сообщение arez1978 » 2012-03-15 9:49:07

Дополнение 2:
содержимое перлового скрипта

Код: Выделить всё

#!/usr/bin/perl

use strict;
use warnings;
use Net::LDAP;


my %ldap_connect=(
HOST=>"192.168.0.2",
PORT=>"389",
# Timeout search
TIMEOUT=>"120",
# База поиска
BASE_DN=>"CN=Users,DC=domain,DC=ru",
# Юзер для доступа к LDAP
BIND_DN=>"CN=exim,CN=Users,DC=domain,DC=ru",
# Пароль юзера
BIND_PASS=>"PassMail256",
# Версия LDAP
VERSION=>"3"
);

sub get_mail_lists {
    my $address=shift;
    my ($user_mail, $dn, $mesg, $entry, $mail_lists);
    my (@array_of_ldap_search, @entries);
    $mail_lists=" ";
    # Подключение к хосту
    my $ldap = Net::LDAP->new($ldap_connect{'HOST'}, version=>$ldap_connect{'VERSION'}, port=>$ldap_connect{'PORT'}, timeout=>$ldap_connect{'TIMEOUT'}) or die exit 0;
    # Подключение к дереву
    $mesg=$ldap->bind($ldap_connect{'BIND_DN'}, password => $ldap_connect{'BIND_PASS'}) or die exit 0;
    # Поиск e-mail дя группы
    $mesg = $ldap->search(
        base => $ldap_connect{'BASE_DN'},
        scope => 'sub',
        filter => "(&(objectClass=top)(objectClass=group)(mail=$address))",
        attrs => ['member']
        );
    # Получение записей dn участников группы
        foreach $entry ($mesg->entries) {
            @array_of_ldap_search = $entry->get_value("member");
        }
    # Поиск в соответствии с dn почтового адреса
        foreach $dn (@array_of_ldap_search) {
            $mesg = $ldap->search(
                filter=>"(&(objectClass=top)(objectClass=user)(objectClass=person)(distinguishedName=$dn))",
                base=>$ldap_connect{'BASE_DN'},
                scope =>'sub',
                attrs=>['mail']
            );
    # Получение найденных записей e-mail'ов
    # И формирование списка
                @entries = $mesg->entries;
                foreach $entry (@entries) {
                    $user_mail = $entry->get_value("mail");
                    if ( defined $user_mail ) {
                        if ( ! defined $mail_lists ) {
                            $mail_lists = ",".$user_mail;
                        }
                        else {
                            $mail_lists = $mail_lists.",".$user_mail;
                        }
                    }
#                    $mail_lists = $mail_lists.",".$user_mail;
                }
        }
        $mail_lists = substr($mail_lists,1);
        $ldap->unbind;

        return $mail_lists;
}

# Для теста раскоментируйте
#print get_mail_lists('adm@domain.ru')
#

arez1978
ефрейтор
Сообщения: 69
Зарегистрирован: 2012-03-15 7:20:22

Re: Exim + PERL

Непрочитанное сообщение arez1978 » 2012-03-15 12:23:06

Спасибо, разобрался. Проблема была в неправильном составлении списка в перл скрипте.

Аватара пользователя
Kobzar
рядовой
Сообщения: 31
Зарегистрирован: 2011-05-30 8:38:07

Re: Exim + PERL

Непрочитанное сообщение Kobzar » 2013-03-02 12:57:37

Так а может укажете что было неправильным * а то схожая проблема ?
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости