Mercurial > dovecot > core-2.2
changeset 20847:4a5429a7c7c4
auth: Introduce db_ldap_bind_sasl() function
Do refactoring in db_ldap_connect() before fixing the SASL bind issue in the next commit.
author | Matwey V. Kornilov <matwey.kornilov@gmail.com> |
---|---|
date | Wed, 21 Sep 2016 10:50:02 +0300 |
parents | 9d70a6f86e24 |
children | 89c2722e9bd1 |
files | src/auth/db-ldap.c |
diffstat | 1 files changed, 35 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/db-ldap.c Thu Oct 06 15:22:13 2016 +0300 +++ b/src/auth/db-ldap.c Wed Sep 21 10:50:02 2016 +0300 @@ -993,6 +993,40 @@ db_ldap_conn_close(conn); } +#ifdef HAVE_LDAP_SASL +static int db_ldap_bind_sasl(struct ldap_connection *conn) +{ + struct db_ldap_sasl_bind_context context; + int ret; + + memset(&context, 0, sizeof(context)); + context.authcid = conn->set.dn; + context.passwd = conn->set.dnpass; + context.realm = conn->set.sasl_realm; + context.authzid = conn->set.sasl_authz_id; + + /* There doesn't seem to be a way to do SASL binding + asynchronously.. */ + ret = ldap_sasl_interactive_bind_s(conn->ld, NULL, + conn->set.sasl_mech, + NULL, NULL, LDAP_SASL_QUIET, + sasl_interact, &context); + if (db_ldap_connect_finish(conn, ret) < 0) + return -1; + + conn->conn_state = LDAP_CONN_STATE_BOUND_DEFAULT; + + return 0; +} +#else +static int db_ldap_bind_sasl(struct ldap_connection *conn) +{ + i_unreached(); /* already checked at init */ + + return -1; +} +#endif + static int db_ldap_bind(struct ldap_connection *conn) { int msgid; @@ -1195,27 +1229,8 @@ } if (conn->set.sasl_bind) { -#ifdef HAVE_LDAP_SASL - struct db_ldap_sasl_bind_context context; - - memset(&context, 0, sizeof(context)); - context.authcid = conn->set.dn; - context.passwd = conn->set.dnpass; - context.realm = conn->set.sasl_realm; - context.authzid = conn->set.sasl_authz_id; - - /* There doesn't seem to be a way to do SASL binding - asynchronously.. */ - ret = ldap_sasl_interactive_bind_s(conn->ld, NULL, - conn->set.sasl_mech, - NULL, NULL, LDAP_SASL_QUIET, - sasl_interact, &context); - if (db_ldap_connect_finish(conn, ret) < 0) + if (db_ldap_bind_sasl(conn) < 0) return -1; -#else - i_unreached(); /* already checked at init */ -#endif - conn->conn_state = LDAP_CONN_STATE_BOUND_DEFAULT; } else { if (db_ldap_bind(conn) < 0) return -1;