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

exim. роутер-> local_part ->транспорт

Добавлено: 2007-04-24 12:19:50
cyrus_user
Привет. Каким образом можно передать из роутера значение local_part в транспорт, чтобы он был в виде $local_part@$domain?
зачем мне это нужно: есть почтовая система, где аккаунты хранятся в виде:
mail=bob@xxx uid=bob
необходимо завести в неё второй домен, тогда аккаунты будут в таком виде
(возможно я слишком идеализировал, но мне именно так представляется правильным ):
mail=bob@xxx uid=bob@xxx
mail=bob@yyy uid=bob@yyy
доступ к cyrus2.213 в таком виде работает. остаётся связать это с exim4.67
вообщем-то неважно какой из транспортов я использую, в любом случае
queued for cyrus_trans transport: local_part = bob
тщетные попытки роутера redirect где data=$local_part@$domain проваливаются:
router skipped: previously routed bob@xxx
и далее всё равно local_part = bob
если сделать вывод, что средствами роутера это не решить, то как в транспорте заменить local_part вообще не нахожу зацепок. использую такой:
cyrus_trans:
driver = smtp
protocol = lmtp
--skip--

Наставьте на путь правильный.

Добавлено: 2007-04-24 12:26:48
Alex Keda
путь истинный - использовать вместо соббаки что-то иное.

Добавлено: 2007-04-24 13:30:33
cyrus_user
lissyara писал(а):путь истинный - использовать вместо соббаки что-то иное.
подумал.. ну учётная запись в cyrus понимает замены символов '@' c '%',
делаем в redirect
data=$local_part%$domain и он зачем то входит в луп и начинает наращивать имя
как-то можно его ограничить?

или что-то другое имелось в виду?

Добавлено: 2007-04-24 14:19:58
Alex Keda
слэш заюзай... например...
или равно...

вроде получается, но...

Добавлено: 2007-04-25 7:32:35
cyrus_user
вообщем сделал так.
существующий пользователь остаётся
mail=bob@xxx uid=bob
а с новым доменом так
mail=bob@yyy uid=bob_yyy

теперь самое интересное в интересующих роутерах
тут я заменяю $local_part с bob на bob_yyy в почтовом адресе bob@yyy.
тогда не пройдёт через роутер cyrus_router
total_rewrite:
driver = redirect
allow_fail
allow_defer
domains = yyy
data = ${lookup ldapm {ldap:///dc=aaa?uid?sub?(&(mail=$local_part@yyy)(objectClass=inetOrgPerson))}}

этот роутер последний, проверка наличия почтового адреса в системе тут не даёт принимать письмо целиком, обрывает соединение на этапе rcpt to
cyrus_router:
driver = accept
transport = cyrus_trans
condition = ${lookup ldap {ldap:///dc=aaa?mail?sub?(&(objectClass=inetOrgPerson)(mail=${local_part}@${domain}))}{$value} fail}
cannot_route_message = no such mailbox here.

если я поставлю этот роутер перед cyrus_router (в нём уберу проверку на ящик), то письмо примется целиком, что мне совершенно ненужно

user_check_router:
no_verify
driver = redirect
data="${lookup ldap {ldap:///dc=aaa?mail?sub?(&(objectClass=inetOrgPerson)(mail=${local_part}@${domain}))}{$value} {:fail: no such mailbox here.}}"
allow_fail

как тут поступать? пока есть мысль делать на каждый домен cyrus_router.
Для существующих юзеров домена xxx оставляем старый
cyrus_router:
driver = accept
transport = cyrus_trans
добавляем только домен
domains= xxx
condition = ${lookup ldap {ldap:///dc=aaa?mail?sub?(&(objectClass=inetOrgPerson)(mail=${local_part}@${domain}))}{$value} fail}
cannot_route_message = no such mailbox here.

для новых пользователей домена yyy.
cyrus_router_yyy:
driver = accept
transport = cyrus_trans
domains= yyy
condition = ${lookup ldap {ldap:///dc=aaa?uid?sub?(&(objectClass=inetOrgPerson)(mail=${local_part}@${domain}))}{$value} fail}
cannot_route_message = no such mailbox here.

вот только сомневаюсь, будет ли проверка rcpt работать должным образом.

Добавлено: 2007-04-25 8:15:10
Alex Keda
будет
===========
берегите нервы и время окружающих - используйте кнопочку

Добавлено: 2007-04-25 9:13:43
cyrus_user
lissyara писал(а):будет
===========
берегите нервы и время окружающих - используйте кнопочку

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

[/quote]
спасибо, обнадёжили