Timo Sirainen wrote:
> We have a new documentation structure, but I don't know if it's any better 
> regarding that. For some reason people aren't super interested in spending 
> much time on writing documentation. :)

Well, I'd be willing to do that - unfortunately not regularly, as Dovecot is 
not my day job, but at least when I stumble upon something that takes me hours 
debugging/analyzing/understanding, then it's not much of a deal to document 
what you just found out. Actually in such situations I sometimes make my own 
notes, in case I need it in future. Writing it down usually makes you 
understand it even better (or realize that you still don't quite get it...). So 
then I'd just have to commit/post somewhere what I wrote anyway.

> One big idea behind v2.4 config rewrite is that now all settings are global 
> settings. You can add any setting inside any filter { .. } section, although 
> it might get just ignored there.

That's a good idea, although in the short term it's a bit confusing when you're 
used to the old way of doing things. At least now it's more systematic, and 
makes userdb/passdb and other section-style settings behave like filters, 
similar to protocol/local/remote, etc.  That's another thing I found confusing  
at the beginning, that the section syntax is used for like 5 different things, 
depending on context.

> How about your passdb/userdb contains only u...@example.com, and then you set 
> auth_default_domain=example.com?

Somehow I always thought the "auth_default_realm" (as it was called before) was 
only for NTLM/GSSAPI authentications, probably due to the word "realm". Didn't 
realize it leads to appending @domain for passwd-file authentication. Another 
example where the new name of the config parameter in 2.4 makes it more 
intuitive - thumbs up.

Yes, that would be one possible solution in my case. It does mean that the 
"@domain" has to be repeated in every single line in the passwd-file, but at 
least you can reuse the same file for authentication and LMTP recipient 
validation, which eliminates maintaining two separate user lists.

> Another possibility could be to add a new userdb before the real one, which 
> drops the domain for valid domains:
> userdb drop-domain {
>   driver = passed-file
>   passwd_file_path = /etc/dovecot/valid-domains
>   result_success = continue
>   fields {
>     user = %{user | username}
>   }
> }
>
> valid-domains file would just list all valid domains, one per line

If I'm understanding your idea correctly, you'd also need "auth_username_format 
= %{user | domain}" (or "username_format = %d" in the old syntax), right?
Also, I'd change "result_success" to "continue-fail", because otherwise the 
overall userdb result will be successful even if the next userdb (containing 
the actual users) does NOT find the user. This means that 
anyrandomuser@correctdomain would validate.
Probably we also need "result_failure = return-fail" in order to abort 
searching if the domain is not found.

I'm still not quite sure about the new "fields" section - does this replace the 
old "default_fields" or "override_fields" or both? In the above example, does 
user rename (dropping the domain part) get executed only if the userdb is 
successful or always? If it's always executed, then we definitely need 
"result_failure = return-fail".

But thanks a lot for the pointers! I'll play around with these and see which 
one works best for me.

> Yet another possibility could be to use %{if} to drop the domain in the 
> existing userdb passwd-file { auth_username_format }

Another very good idea, actually the simplest one to implement, although 
probably not the most efficient runtime-wise. (Does that if-expression get 
re-parsed for every lookup or only once at config load time?)

Again, very valuable input, thank you Timo!

Regards,
Mike
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to