|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Vitaly E. Lavrov <lve@cit.aanet.ru> 10 Nov 2005 11:05:16 To : Andrey Ostanovsky Subject : Re: cyrus-imapd and virtual domains -------------------------------------------------------------------------------- > Hello Vitaly! > 09 Nov 05 10:48, you wrote to me: > >> VL> Патчик тривиальный . Правится imap/lmtpengine.c > >> VL> в 3-х местах где встречается '@' > Посмтрел я вчера в исходники этой lmtpengine.c, к сожалению, я с этом > коде ничего не понимаю. Может покажешь фрагмент, который надо заменить, > и на что? > >> Так говорилось то, что cyrus "умеет виртуальные домены в поставке > >> из-коробки". :( > >> VL> Есть официальный путь через обратный DNS, но я его не победил. > >> А где про это почитать можно? Hе нашел я что-то такого способа. > VL> В доке :) Hо там на эту тему всего несколько строк. > VL> В комплекте с sendmail я проблему поборол только патчем. > VL> ВОЗМОЖЕHО гуру сендмейла скажут что я чайник, и все существенно > проще. > Гуру молчат, считая задачу чересчур легкой для себя, или чересчур > сложной для объяснения чайникам.:) - --- /usr/src/cyrus/cyrus-imapd-2.2.12.orig/imap/lmtpengine.c 2004-08-10 21:18:38.000000000 +0400 +++ lmtpengine.c 2005-05-30 23:39:06.000000000 +0400 @@ -839,7 +850,7 @@ quoted = detail = 0; while (*addr && (quoted || - ((config_virtdomains || *addr != '@') && *addr != '>'))) { + ((config_virtdomains || *addr != '@' || *addr != '%' ) && *addr != '>'))) { /* start/end of quoted localpart, skip the quote */ if (*addr == '\"') { quoted = !quoted; @@ -856,7 +867,7 @@ if (*addr == '+') detail = 1; /* end of localpart (unless quoted) */ - if (*addr == '@' && !quoted) detail = 0; + if ((*addr == '@' || *addr == '%') && !quoted) detail = 0; } /* downcase everything accept the detail */ @@ -872,11 +883,16 @@ /* find domain */ ret->domain = NULL; - if (config_virtdomains && (ret->domain = strrchr(ret->rcpt, '@'))) { + if (config_virtdomains) { + char *dlm = strrchr(ret->rcpt, '@'); + if(!dlm) dlm = strrchr(ret->rcpt, '%'); + if(dlm) { + ret->domain = dlm; *(ret->domain)++ = '\0'; /* ignore default domain */ if (config_defdomain && !strcasecmp(config_defdomain, ret->domain)) ret->domain = NULL; + } } /* translate any separators in user & mailbox */ - ------------------------------------------------------------------------------ --- -- Vitaliy E. Lavrov | nic-hdl: VEL1-RIPN --- FIDOGATE 4.3.6-snp8 * Origin: St. Petersburg State University of Aerospace Instrume (2:5030/580.0) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/287037ac0dc7c.html, оценка из 5, голосов 10
|