saslauthd cache / cyrus-imap and several passwords per login

Andrew Morgan morgan at orst.edu
Mon Jan 28 20:39:55 EST 2013


On Mon, 28 Jan 2013, Patrick Boutilier wrote:

> On 01/27/2013 09:03 PM, Andrew Morgan wrote:
>> On Sat, 5 Jan 2013, Patrick Lamaiziere wrote:
>> 
>>> Helo,
>>> 
>>> We use cyrus-imapd on Centos 6 at work and I've got the following issue
>>> on authentication:
>>> 
>>> Users can login via a mailer (imap/pop) or use a webmail (horde). The
>>> webmail uses a SSO-CAS and horde uses a CAS token to log in
>>> cyrus-imap). As the CAS tokens are one-time tokens they must been
>>> cached by saslauthd.
>>> 
>>> For this we use PAM with saslauthd and 3 PAM modules. pam_cas checks if
>>> the password is a valid CAS token, then we try ldap and then a local
>>> account.
>>> 
>>> cyrus-imap -> saslauthd (cache) -> PAM (pam_cas, pam_ldap, pam_unix)
>>> 
>>> That works fine.
>>> 
>>> The problem is: when a user uses the webmail and uses also a mailer
>>> (using imap), saslauthd will remove the CAS token previously cached when
>>> the mailer connects. So the webmail is disconnected.
>>> 
>>> There is a patch to allow saslauthd to cache several passwords for one
>>> login but I would like to avoid this.
>>> 
>>> As far I can see, the cache depends on the service used (ie if I
>>> connect via pop, the imap password is not cleared from the
>>> saslauthd cache).
>>> 
>>> So I'm asking if there is a way to introduce another "service" on
>>> cyrus-imap that will be used by the webmail (on another port than 143).
>>> I mean a service in the saslauthd / PAM way (the parameter '-s' in
>>> testsaslauthd: imap, pop, sieve).
>>> 
>>> I don't know where to start. Is there a way to achieve this?
>>> Thanks, best regards.
>> 
>> Sorry I have taken so long to respond.  I saw this message a while ago but
>> I didn't have time to reply then.  It doesn't look like anyone else has
>> responded according to the list archives.
>> 
>> You can easily run multiple Cyrus imapd processes with different service
>> names.  In your cyrus.conf, make a copy of your "imap" service and name it
>> something like "imap_webmail", listening on a different port.  Then make a
>> /etc/pam.d/imap_webmail file with your desired PAM config.
>
>
> I just gave the above a try since I currently modify the source to force 
> which pam service the imapd binary calls but this entry still calls 
> /etc/pam.d/imap instead of /etc/pam.d/imaptest
>
>
> imaptest    cmd="imapd" listen="imaptest"
>
>
> imaptest is in /etc/services on port 146

Well shoot, it looks like the SASL service name is hard-coded in imapd.c:

     /* create the SASL connection */
     if (sasl_server_new("imap", config_servername,
                         NULL, NULL, NULL, NULL, 0,
                         &imapd_saslconn) != SASL_OK) {
         fatal("SASL failed initializing: sasl_server_new()", EC_TEMPFAIL);
     }


It would be nice if there was a way to override this somehow...  Perhaps 
file a bug on the bugzilla!

 	Andy


More information about the Info-cyrus mailing list