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

Опять DirectAdmin и Exim

Добавлено: 2007-12-18 17:22:50
ExH
Значится так, есть директадмин, с ним живёт exim.
При установке php директадмин патчит функцию mail таким образом что все письма отправляются от user@domain.ru, где user -- имя пользователя от которого запущен скрипт, domain.ru -- общий домен домен.
Т.е. к примеру, главным является домен domain.ru, пользователь hosting запускает скрипт http://www.xxxx.ru/mail.php, письмо уходит от hosting@domain.ru.

Соответственно проблемка.
В exim стоит проверка на существование пользователя на уровне ACL, я про неё где-то на форуме уже писал, работает она по принципу проверки существования пользователя в файле /etc/virtual/xxxx.ru/passwd
Оно отлично работает пока не встречаются конструкции вида, указанного выше.

Для того чтобы исправить ситуацию, я перед правилом на проверку пользователя в passwd пишу:

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

accept message = our user
           domains = +local_domains
           host = !+relay_hosts
           condition = ${if \
                            and {\
                                  { eq {$domain} {domain.ru} } \
                                  { !eq {} {${lookup{$local_part}lsearch{/etc/passwd}}} } \
                            } \
                       } {yes}{no}
Всё работает, но не нравится то что поиск идёт по файлу /etc/passwd, ведь в нём есть не только пользователи хостинга в понимании directadmin, но и куча других пользователей.
Хочется сделать чтобы поиск шёл по файлу /etc/virtual/domainowners.
Файл в формате:
domain1.ru: user_domain1_ru
domain2.ru: user_domain2_ru

Как я только не изгалялся с extract и иже с ним ничего не получалось.
Lookup lsearch использовать тоже не получается, ибо оно отчего-то хочет чтобы ключём была именно первая запись, а у меня ключ -- вторая.

За ранее спасибо!

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 17:44:45
Alex Keda
я непонял что ты хочешь...

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 18:00:28
ExH
Хочу сделать проверку существования пользователя по local_part из файла /etc/virtual/domainowners.
Он в формате:

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

domain1.ru: user_domain1_ru
domain2.ru: user_domain2_ru
т.е. lsearch не канает, потому как ключ у меня не domain, а local_part, который второй в списке.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 22:43:17
Alex Keda
посмотрел этот файл...
посмотрел оригинальный конфиг директадминовского экзима - там минимум три примера того что ты хочешь.
или я снова непонял?

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 22:45:10
ExH
Да нет же.
Там lookup {$domain} и т.п., а мне надо lookup{$local_part}.
А так оно не хочет.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 22:49:22
Alex Keda
кого ты хочешь проверить - юзера или домен?

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 22:55:37
ExH
У меня email в формате:
юзер@мой_основной_домен

я по имени юзера хочу найти в файле есть ли домен.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-18 22:58:25
Alex Keda
какой? основной? Это домен сервера, он полюбому есть.
чётко напиши задачу с нормальными примерами имён и прочего.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 1:26:28
ExH
Попробую ещё раз.

Домен сервера:

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

server1.domain.tld
Пользователи хостинга:

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

user1, домен domainuser1.tld
user2, домен domainuser2.tld
user3, домен domainuser3.tld
Когда пользователи хостинга отправляет почту из скриптов обратный адрес ставится вида:

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

user1@server1.domain.tld
user2@server1.domain.tld
user3@server1.domain.tld
Некоторые почтовые серверы решают проверить существует ли такой пользователь, для чего заходят и спрашивают об этом.
А так как у меня проверка реализована путём проверки существования пользователя в файле /etc/virtual/{$domain}/passwd, проверяющему серверу даётся отлуп.

Значит мне надо проверить существование домена по известному пользователю.

Единственно похожее на необходимую для меня информацию я нашёл в файле /etc/virtual/domainowners, но она в виде:

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

domainuser1.tld:  user1
domainuser2.tld:  user2
domainuser3.tld:  user3
В итоге мне нужно по этому файлу найти есть ли запись для пользователя.

Пример.
Ломится ко мне проверяющий сервер (rambler.ru, к примеру любит так делать) и спрашивает, есть ли у тебя пользователь user2@server1.domain.tld?
Я каким-то образом (lsearch?) смотрю в файл /etc/virtual/domainowners, вижу там запись о существовании такого пользователя и говорю есть такой пользователь или говорю нет такого пользователя.

Вот.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 9:23:38
Alex Keda
у меня сделано так:

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

localuser:
  driver = accept
  check_local_user
  condition = "${if eq {$domain} {$primary_hostname} {yes} {no}}"
#  data = $local_part@$domain
#  transport = local_delivery
  transport = virtual_localdelivery_v2
транспорт

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

virtual_localdelivery_v2:
        driver = appendfile
        check_string = ""
        create_directory
        delivery_date_add
        group = mail
        return_path_add
        user = $local_part
        directory_mode = 770
        maildir_format
        message_prefix = ""
        message_suffix = ""
        mode = 0660
        directory = /home/${local_part}/Maildir
===============
P.S. поакуратней с конфигом.
Там неслабый конфиг, и я сам дважды из себя делал открытый релей, пока настроил.
Неприятно, но не смертельно...

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 9:24:50
Alex Keda
P.S.2
не будешь юзать кнопочку code - вообще отвечать не буду.
У меня глаза не казёные, время тоже.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 10:35:17
ExH
Про code понял. Исправлюсь.

А пропустить ли твой код сообщение пользователю

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

root@primary_hostname
?

И мне не хочется рулить на уровне транспортов, хочется рулить на уровне ACL.
Так можно?

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 13:16:53
Alex Keda
про рута - тут уже как альясы скажут.
=======
а ACL - надо придумывать чё-то - в лоб помоему не решается

P.S. хотя можно поля по разделителю извлекать и сравнивать...

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 14:29:55
ExH
lissyara писал(а):P.S. хотя можно поля по разделителю извлекать и сравнивать...
Вот это и надо.
Я пробовал, у меня не получается.

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 14:50:10
Alex Keda

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 19:11:22
ExH
Вот про это я и писал в начале.
Насколько я понимаю, надо делать extract списку, который я загружу.
Я пытался сделать так:

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

${extract{2}{:}{lookup;/etc/virtual/domainowners}}
Не работает.
Т.е. теперь вопрос переформулируется так.
Как загрузить списокв exim?

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

${extract{2}{:}{вот_сюда_список}}

Re: Опять DirectAdmin и Exim

Добавлено: 2007-12-19 21:58:08
Alex Keda
дык строку вначале надо найти.