Sorry to flood the list with this... but I've _finally_ figured out the problem.
From what appears t be the correct syntax I find this difficult to read:
passdb pam {
# [-session] [cache_key=<key>] [<service name>]
#
# -session makes Dovecot open and immediately close PAM session.
Some # PAM plugins need this to work. # # If service name is "*", it means the authenticating service name # is used, eg. pop3 or imap. args = "*" }
That suggests to me that some of the following are valid syntax:
passdb pam {
-session cache_key=%n
args = "*"
}
or: passdb pam { -session cache_key=%n imap } or: passdb pam { -session cache_key=%n imap } or: passdb pam { -session cache_key=%n args="imap" }
For some of these, Dovecot refuses to start, for others it starts but "-session" appears to be ignored. I think that for others the user can't authenticate at all, but I've been trying a LOT of combinations this evening, and I'm not clear on the correct logic of this & if the guilty one is a combination I haven't remembered.
IMHO the best way to document this in the supplied dovecot.conf would be:
# PAM authentication. Preferred nowadays by most systems. # Note that PAM can only be used to verify if user's password is correct, # so it can't be used as userdb. If you don't want to use a separate user # database (passwd usually), you can use static userdb. passdb pam { # [-session] [cache_key=<key>] [<service name>] # # -session makes Dovecot open and immediately close PAM session. Some # PAM plugins need this to work. # # cache_key can be used to enable authentication caching for PAM # (auth_cache_size also needs to be set). It isn't enabled by default # because PAM modules can do all kinds of checks besides checking password, # such as checking IP address. Dovecot can't know about these checks # without some help. cache_key is simply a list of variables (see # doc/variables.txt) which must match for the cached data to be used. # Here are some examples: # %u - Username must match. Probably sufficient for most uses. # %u%r - Username and remote IP address must match. # %u%s - Username and service (ie. IMAP, POP3) must match. # # If service name is "*", it means the authenticating service name # is used, eg. pop3 or imap. # # EXAMPLES: # # args = "-session cache_key=%n imap" # args = "-session *" # args = "*" args = "*" }
Or have I been really dumb to miss this?
It took me ages to get:
passdb pam {
args = "-session *"
}
And the moment I did, it worked PERFECTLY.
Stroller.