Ошибка траспорта в EXIM

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Ошибка траспорта в EXIM

Непрочитанное сообщение Liv » 2010-05-04 1:43:05

EXIM
Имеется транспорт:

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

local_delivery:
        driver = appendfile
        delivery_date_add
        envelope_to_add
        return_path_add
        file = "${perl{gethome}{$local_part}{$domain}}/mbox"
        group = ${extract{2}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}
        user = ${extract{1}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}
        mode = 0600
        no_mode_fail_narrower
При попытке доставить локальному пользователю возникает ошибка:

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

#esend 1O90fk-000PKM-Oa
delivering 1O90fk-000PKM-Oa
LOG: MAIN
  == proba@proba.ru R=localuser T=local_delivery defer (13): Permission denied: creating lock file hitching post /mbox.lock.proba.com.4bdf4ce7.00001f1c (euid=1002 egid=1007)
Дело в том, что здесь (и именно здесь - в ручную проверяю - всё в порядке) perl-функция не отдаёт необходимые данные (в данном случае путь к каталогу).
Если пытаюсь использовать вместо perl-функции extract:

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

local_delivery:
        driver = appendfile
        delivery_date_add
        envelope_to_add
        return_path_add
        file = ${extract{3}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}/mbox
        group = ${extract{2}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}
        user = ${extract{1}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}
        mode = 0600
        no_mode_fail_narrower
то возникает уже другая ошибка:

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

#esend 1O90fk-000PKM-Oa
delivering 1O90fk-000PKM-Oa
LOG: MAIN PANIC
  == proba@proba.ru R=localuser T=local_delivery defer (-1): Expansion of "${extract{3}{:}{${lookup{$local_part\@$domain} lsearch{/usr/local/etc/exim/passwd}{$value}{}}}}/mbox" (file or directory name for local_delivery transport) failed: failed to open /usr/local/etc/exim/passwd for linear search: Permission denied (euid=1002 egid=1007)
то доступ к файлу данных запрещён! тогда как такое же обращение за UID & GID в этот же файл нормально проходит!

И тут вообще становится интересно! Если убрать в траспорте установку пользователя и группы:

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

local_delivery:
        driver = appendfile
        delivery_date_add
        envelope_to_add
        return_path_add
        file = "${perl{gethome}{$local_part}{$domain}}/mbox"
        mode = 0600
        no_mode_fail_narrower
то путь выдаётся нормально, но т.к. тот каталог открыт только для пользователя, то происходит ошибка:

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

#esend 1O90fk-000PKM-Oa
delivering 1O90fk-000PKM-Oa
LOG: MAIN
  == proba@proba.ru R=localuser T=local_delivery defer (13): Permission denied: creating lock file hitching post /home/proba/data/email/proba.ru/proba/mbox.lock.proba.com.4bdf4f62.00001fb3 (euid=26 egid=0)
Как можно видеть, сейчас функция выдала требуемый путь!...

Что здесь может быть?

Хостинговая компания 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/

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Ошибка траспорта в EXIM

Непрочитанное сообщение Liv » 2010-05-04 17:10:37

И ещё вопрос:
Когда сервер отсылает письма, то добавляет заголовки:

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

Return-path: <"liv@proba.ru"@proba.com>
        (envelope-from <"liv@proba.ru"@proba.com>)
А должно быть так:

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

Return-path: <liv@proba.ru>
        (envelope-from <liv@proba.ru)
Может кто-нибудь подсказать почему так, где править, что изменить?!...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Ошибка траспорта в EXIM

Непрочитанное сообщение dikens3 » 2010-05-04 18:59:08

Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Ошибка траспорта в EXIM

Непрочитанное сообщение Liv » 2010-05-04 20:19:14

dikens3, спасибо, помогло! :good: :"": :drinks:
Странно, что я сам не нашёл!

Остался вопрос по транспорту! :st:

Liv
рядовой
Сообщения: 39
Зарегистрирован: 2008-09-12 0:25:42

Re: Ошибка траспорта в EXIM

Непрочитанное сообщение Liv » 2010-05-05 3:23:53

Нашёл!! :Yahoo!: :Yahoo!:
Проблема была в том, что в транспорте устанавливается пользователь (и группа) указанный в свойствах user и group и после чего делается всё остальное. Соответсвенно, какому-там пользователю запрещено читать этот файл!

Из этого положения вышел просто - читая файл перед транспортом и помещая нужные данные в переменную:

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

 warn   set acl_c10 = ${perl{gethome}{$local_part}{$domain}}/mbox
и в транспорте уже используя саму переменную:

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

local_delivery:
        driver = appendfile
        file = ${acl_c10}
        delivery_date_add
        envelope_to_add
        return_path_add
        group = "${perl{getgidname}{$local_part}{$domain}}"
        user = "${perl{getuidname}{$local_part}{$domain}}"
        mode = 0600
        no_mode_fail_narrower