Страница 1 из 1

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

Добавлено: 2010-05-04 1:43:05
Liv
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)
Как можно видеть, сейчас функция выдала требуемый путь!...

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

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

Добавлено: 2010-05-04 17:10:37
Liv
И ещё вопрос:
Когда сервер отсылает письма, то добавляет заголовки:

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

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

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

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

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

Добавлено: 2010-05-04 18:59:08
dikens3

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

Добавлено: 2010-05-04 20:19:14
Liv
dikens3, спасибо, помогло! :good: :"": :drinks:
Странно, что я сам не нашёл!

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

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

Добавлено: 2010-05-05 3:23:53
Liv
Нашёл!! :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