Problems getting Cyrus Imapd to with with SASL (PostgreSQL engine)

Jesper K. Pedersen jkp at solnet-data.dk
Mon Apr 11 15:50:14 EDT 2005


I have been wanting to upgrade our small mail server to use a
PostgreSQL database to authenticate users.

As the server needed a full overhaul I have installed a test server with
Slackware 10.1
Downloaded Cyrus SASL 2.1.20, Cyrus IMAPD 2.2.12

I already have my postgres server running without a problem.

I also have SASL compiled for supporting the PostgreSQL database via the
auxprop, and finally also have compiled Imapd and have it all running.

I have created a couple of test users in the sql database with cleartext
passwords.

I am not able to successfully run the imtest:
An example run:
Command: imtest -s -a mailman at solnet localhost
Result:
verify error:num=18:self signed certificate
TLS connection established: TLSv1 with cipher AES256-SHA (256/256 bits)
S: * OK vega Cyrus IMAP4 v2.2.12 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS
NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND
BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE
AUTH=PLAIN SASL-IR S: C01 OK Completed
Please enter your password: 
C: A01 AUTHENTICATE PLAIN AG1haWxtYW5Ac29sbmV0AGFkbWluMjAwNQ==
S: A01 NO authentication failure
Authentication failed. generic failure
Security strength factor: 256
C: Q01 LOGOUT
Connection closed.


My imapd log says the following (please note I made my own self signing
SSL certificate so I could test using TLS/SSL):
------------------------
Apr 11 21:32:59 vega imaps[5666]: starttls: TLSv1 with cipher AES256-SHA
	(256/256 bits new) no authentication 
Apr 11 21:33:02 vega imaps[5666]: Password verification failed
Apr 11 21:33:02 vega imaps[5666]: badlogin: localhost [127.0.0.1] PLAIN
	[SASL(-13): authentication failure: Password verification
	failed]
------------------------


Postgres database log:
------------------------
LOG:  connection received: host=127.0.0.1 port=32870
LOG:  connection authorized: user=/*removed*/ database=emaildb
LOG:  statement: BEGIN;
LOG:  statement: select clearpw from users where email =
	'mailman at solnet'; 
LOG:  statement: select clearpw from users where email =
	'mailman at solnet'; 
LOG:  statement: COMMIT;
------------------------

Doing the SQL query manually using pgsql command line interface to
PostgreSQL gives me the expected password in the field "clearpw".


(cyrus imapd) imapd.conf:
------------------------
configdirectory: /var/imap
partition-default: /var/spool/imap

admins: mailman at solnet mailman

virtdomains: yes
defaultdomain: solnet

sasl_pwcheck_method: auxprop
sasl_mech_list: plain
sasl_auxprop_plugin: sql
sasl_sql_engine: pgsql
sasl_sql_hostnames: localhost
sasl_sql_user: /*removed*/
sasl_sql_passwd: /*removed*/
sasl_sql_database: emaildb
sasl_sql_select: select clearpw from users where email = '%u@%r'
sasl_sql_verbose: yes

tls_key_file: /var/imap/certs/cyrus-global.pem
tls_ca_file: /var/imap/certs/cyrus-global.pem
tls_cert_file: /var/imap/certs/cyrus-global.pem

sendmail: /usr/sbin/sendmail

lmtp_downcase_rcpt: yes
------------------------


cyrus.conf:
------------------------
START {
  recover       cmd="ctl_cyrusdb -r"

  # this is only necessary if using idled for IMAP IDLE
  #  idled              cmd="idled"
}

# UNIX sockets start with a slash and are put into /var/imap/socket
SERVICES {
  # add or remove based on preferences
  imap          cmd="imapd" listen="imap" prefork=0
  imaps         cmd="imapd -s" listen="imaps" prefork=0
  pop3          cmd="pop3d" listen="pop3" prefork=0
  #  pop3s              cmd="pop3d -s" listen="pop3s" prefork=0
  sieve         cmd="timsieved" listen="sieve" prefork=0

  smmapd        cmd="smmapd" listen="/var/imap/socket/smmapd" prefork=1

  # these are only necessary if receiving/exporting usenet via NNTP
  #  nntp               cmd="nntpd" listen="nntp" prefork=0
  #  nntps              cmd="nntpd -s" listen="nntps" prefork=0

  # at least one LMTP is required for delivery
  #  lmtp               cmd="lmtpd" listen="lmtp" prefork=0
  lmtpunix      cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0

  # this is only necessary if using notifications
  #  notify     cmd="notifyd" listen="/var/imap/socket/notify"
proto="udp" prefork=1}

EVENTS {
  squatter      cmd="squatter" period=300
  # this is required

  checkpoint    cmd="ctl_cyrusdb -c" period=30
  delprune      cmd="cyr_expire -E 3" at=0400
  tlsprune      cmd="tls_prune" at=0400
}
------------------------


/usr/lib/sasl2/imapd.conf :
------------------------
pwcheck_method: auxprop
mech_list: plain
auxprop_plugin: sql
sql_engine: pgsql
sql_hostnames: localhost
sql_user: /*removed*/
sql_passwd: /*removed*/
sql_database: emaildb
sql_select: select clearpw from users where email = '%u@%r'
sql_verbose: yes
------------------------


Anyone with any ideas of what I am doing wrong, or how I could debug
this further?
Any hints are greatly appreciated.


Best regards,
Jesper K. Pedersen
--
Carpe Aptenodytes!
---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html




More information about the Info-cyrus mailing list