This appears to be a bug in Cyrus SASL 1.5.24. It's fixed in Cyrus's CVS tree. --- lib/server.c.orig Thu Sep 21 08:01:33 2000 +++ lib/server.c Thu Sep 21 08:01:51 2000 @@ -895,7 +895,7 @@ s_conn->base.oparams.user = (char *) canonuser; } - return SASL_OK; + return ret; }