[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: dovecot virtual users / postfix



Hoi,

On 12/09/2012 07:08 PM, mourik jan heupink wrote:
> Hoi!
> 
>> Er staat twee keer een regel met result_format erin?
> Goed gezien...! De laatste was de bedoeling, en die wordt ook gebruikt
> door postfix. Maar thanks!
> 
>> Nee, dat is er niet. Probeer je niet teveel dingen tegelijk in 1 ldap
>> object te stoppen, waarbij er spaghettigevaar ontstaat? Het lijkt erop
>> dat je gebruikers-object ook tegelijk een groepsobject is? Kun je een
>> voorbeeld geven van hoe de objecten in je database er uitzien?
>>
>> Eerder zei je dat je een posixGroup had met memberUid erin, en nu een
>> groupOfNames met zowel members (DNs?) als mail, uid, en rfc822MailMember
>> erin?
> 
> Ja, moet misschien uitleggen dat ik van het hergebruiken van de al
> bestaande posixGroups ben afgestapt, en nu groupOfNames gebruik, die ik
> specifiek voor de mail inricht.
> 
> Een voorbeeld van een groupOfNames:
>    dn: cn=student-L,ou=mail,dc=example,dc=com
>    cn: student-L
>    description: student-L distribution list
>    objectclass: groupOfNames
>    objectclass: extensibleObject
>    mail: student-L@example.com
> 1) member: cn=student-2012-L,ou=mail,dc=example,dc=com
> 2) member: uid=a_sample,ou=users,dc=example,dc=com
> 3) member: cn=Al_Ias,ou=aliases,dc=example,dc=com
> 
> In deze voorbeeld groep zitten dus:
> 1) sub-groupOfNames
> 2) reguliere gebruikers
> 3) aliases

Aha. Ik moet bekennen dat ik het flink complex vind worden, maar als je
zelf nog makkelijk kan volgen wat er allemaal gebeurt...

Wat is de reden dat je alles in een laag ldap 'wrapt'? Je doet nu zowel
alias-expansie met postfix, als met ldap zelf, en dat door elkaar heen.

> M'n postfix ldap config bestandjes:
> root@sogo:/etc/postfix# cat ldap-mailboxes.cf
> server_host = filehost.example.com
> search_base = ou=mail,dc=example,dc=com
> bind = no
> query_filter = (mail=%s)
> result_attribute = uid
> result_format = %s@test.example.com
> 
> root@sogo:/etc/postfix# cat ldap-aliases.cf
> server_host = filehost.example.com
> search_base = ou=aliases,dc=example,dc=com
> bind = no
> query_filter = (&(objectClass=nisMailAlias)(cn=%u))
> result_attribute = rfc822MailMember
> result_format = %s
> 
> root@sogo:/etc/postfix# cat ldap-groups.cf
> server_host = filehost.example.com
> search_base = ou=mail,dc=example,dc=com
> bind = no
> query_filter = (&(objectClass=groupOfNames)(mail=%s))
> result_attribute = uid, rfc822MailMember
> special_result_attribute = member
> leaf_result_attribute = uid
> result_format = %s@test.example.com
> 
> Dit werkt allemaal eigenlijk hartstikke goed voor mailboxen, aliases,
> groepen, nested groepen, alles. :-)

In welke volgorde zet je nu ldap-mailboxes.cf, ldap-aliases.cf, en
ldap-groups.cf in je main.cf? Want postfix probeert ze een voor een, en
gaat niet de resultaten van alle drie met elkaar combineren, tenminste,
niet in 1 iteratie postfix-alias-expansie, wel in opeenvolgende, waarbij
weer de eerste die resultaten geeft wint.

Merk op trouwens dat de cn=%u in ldap-aliases.cf nu dus op alle
mogelijke domeinen matcht die je mailserver voert.

Ik moest de documentatie van postfix over expanding in ldap intern net
ook ongeveer 7 keer lezen voordat ik snapte wat er precies gebeurt... :|
http://www.postfix.org/LDAP_README.html#example_group

> De reden voor die result_format = %s@test.example.com truc:
> Als een gebruiker meerdere mail velden in ldap heeft, wordt alle mail
> afgeleverd in dezelfde mailbox van die gebruiker. Zo kun je gemakkelijk
> een paar secundaire mailadressen toevoegen, en wordt toch alles vertaald
> in uid@example.com. Dit lijkt ook goed te werken.
> 
> Maar nu het probleem/de vraag:
> 
> Ik wil nu ook graag aliases aan een groep kunnen toevoegen. Echter van
> een alias hebben we alleen een cn en een rfc822MailMember. Geen 'normale
> uid' dus, en daardoor werkt die 'vertaling' met "result_format =
> %s@test.example.com" niet:
> 
> Resultaat van een test postmap query op ldap-groups.cf wordt dan bv:
> 
> user1@example.com,user2@example.com,alias1@gmail.com@example.com
> En dat laatste resultaat klopt dus niet.

Hm, je zou een rfc822MailMember met test.example.com er al in in het
object kunnen zetten naast de uid, en dan gewoon alleen result
rfc822MailMember en format %s. :-)

> Of zou ik dit anders op een andere manier kunnen oplossen?

Laat ik eens schaamteloos mijn eigen oplossing promoten, :-D waarbij ik
alleen maar alias expansie van postfix zelf gebruik (result gaat gewoon
nog een keer ldap in, net zolang totdat de iteratie stopt naar een
extern adres, of naar het adres zelf). In dat geval zou wat je met
bovenstaande wil doen er zo uit komen te zien (fantasie-attribuutnamen):

Aliassen/Groepen
----------------

dn: cn=Student L,ou=alias,dc=example,dc=com
description: student-L distribution list
mail_voor: student-L@example.com
afleveren_naar: student-2012-L@example.com
afleveren_naar: a_sample@example.com
afleveren_naar: al_ias@example.com

dn: cn=Alias voor Al Ias,ou=alias,dc=example,dc=com
mail_voor: al_ias@example.com
mail_voor: al_zn_tweede_ias@example.com
afleveren_naar: alias1@gmail.invalid

dn: cn=Sublijst Student L 2012,ou=alias,dc=example,dc=com
mail_voor: student-2012-L@example.com
afleveren_naar: jantje@example.com
afleveren_naar: pietje@example.com

dn: cn=Dit kan dus ook,ou=alias,dc=example,dc=com
mail_voor: student-L@example.com
afleveren_naar: komtookinresultterecht@example.com

dn: cn=Pietje heeft hier geen mailbox,ou=alias,dc=example,dc=com
mail_voor: pietje@example.com
afleveren_naar: pietje@gmail.invalid

Mailboxen
---------

dn: uid=a_sample,ou=users,dc=example,dc=com
uid: a_sample

dn: uid=henk,ou=users,dc=example,dc=com
uid: henk

dn: uid=jantje,ou=users,dc=example,dc=com
uid: jantje

-- ldap-alias-maps.cf
search_base = ou=alias,dc=example,dc=com
bind = no
query_filter = (mail_voor=%s)
result_attribute = afleveren_naar
result_format = %s

-- ldap-mailbox-maps.cf:
search_base = ou=users,dc=example,dc=com
bind = no
domain = example.com
query_filter = (uid=%u)
result_attribute = uid
result_format = %s@users.example.com

-- main.cf:
virtual_alias_maps = ldap:ldap-alias-maps.cf
virtual_mailbox_maps = ldap:ldap-mailbox-maps.cf

N.B. een adres dat puur in de mailbox is genoemd is ook geldig, (bijv
henk) en heeft geen alias nodig. Het kan wel, als je bijv mail voor henk
zowel naar henk z'n mailbox wil doen, en naar een extern adres (alias
naar zichzelf wijzen stopt recursie):

dn: cn=Henk Speciaal Geval,ou=alias,dc=example,dc=com
mail_voor: henk@example.com
afleveren_naar: henkje@ergensanders.example.com
afleveren_naar: henk@example.com

Ik vind dit zelf een stuk makkelijker te begrijpen en na te spelen,
omdat de resultaten van afleveren_naar weer opgezocht worden bij
mail_voor daarna door postfix, net zolang totdat ofwel het niet gevonden
is in mail_voor (of wel maar naar zichzelf wijst, wat ook iteratie
stopt) Dan is het dus of een extern adres, ofwel het wordt gezocht in de
volgende stap, virtual_mailbox_maps.

Daarom vroeg ik net of er een bepaalde reden is waarom je ook op
ldap-niveau dingen wil doen met member-dn's in andere objecten stoppen etc?

Hans


Reply to: