]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Introduce db_ldap_bind_sasl() function
authorMatwey V. Kornilov <matwey.kornilov@gmail.com>
Wed, 21 Sep 2016 07:50:02 +0000 (10:50 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 13 Oct 2016 08:27:16 +0000 (10:27 +0200)
Do refactoring in db_ldap_connect() before fixing the SASL bind issue in the next commit.

src/auth/db-ldap.c

index f5f974d9c94d253b2cf05ba63baada67442612cc..520e9fdc3a24ee59a2317266412dc3c4ecd90f3c 100644 (file)
@@ -993,6 +993,40 @@ static void ldap_connection_timeout(struct ldap_connection *conn)
        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 @@ int db_ldap_connect(struct ldap_connection *conn)
        }
 
        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;