diff --git a/configure.ac b/configure.ac
index ff074b6088f079f09447dc2613ac5ac5d859143b..f7e262fb5f069a0d114e7ef6628d038afa6e4f41 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,9 +107,12 @@ have_ldap=no
 if test $want_ldap != no; then
 	AC_CHECK_LIB(ldap, ldap_init, [
 		AC_CHECK_HEADER(ldap.h, [
-			AC_CHECK_LIB(ldap, ldap_initialize, [
-				AC_DEFINE(LDAP_HAVE_INITIALIZE,, [Define if you have ldap_initialize])
-			])
+			AC_CHECK_LIB(ldap, ldap_initialize, :, [
+				AC_MSG_ERROR([
+					cannot build with LDAP support: function ldap_initialize() not found
+					(OpenLDAP >= 2.4 required)
+				])
+			], $LDAP_LIBS)
 			AC_CHECK_LIB(ldap, ldap_start_tls_s, [
 				AC_DEFINE(LDAP_HAVE_START_TLS_S,, [Define if you have ldap_start_tls_s])
 			])
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
index 1e783c36235cd7beab6db4bc45e94f4c71571936..9c412f81a56d7e366afd8c8c38d93d470dcae409 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-db.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
@@ -260,9 +260,7 @@ static int db_ldap_connect_finish(struct ldap_connection *conn, int ret)
 
 	if (ret == LDAP_SERVER_DOWN) {
 		e_error(storage->event, "db: "
-			"Can't connect to server: %s",
-			*set->uris != '\0' ?
-			set->uris : set->hosts);
+			"Can't connect to server: %s", set->uris);
 		return -1;
 	}
 	if (ret != LDAP_SUCCESS) {
@@ -754,24 +752,10 @@ int sieve_ldap_db_connect(struct ldap_connection *conn)
 		i_gettimeofday(&start);
 	i_assert(conn->pending_count == 0);
 	if (conn->ld == NULL) {
-		if (*set->uris != '\0') {
-#ifdef LDAP_HAVE_INITIALIZE
-			if (ldap_initialize(&conn->ld,
-					    set->uris) != LDAP_SUCCESS)
-				conn->ld = NULL;
-#else
-			e_error(storage->event, "db: "
-				"Your LDAP library doesn't support "
-				"'uris' setting, use 'hosts' instead.");
-			return -1;
-#endif
-		} else
-			conn->ld = ldap_init(set->hosts, LDAP_PORT);
-
-		if (conn->ld == NULL) {
+		if (ldap_initialize(&conn->ld, set->uris) != LDAP_SUCCESS) {
 			e_error(storage->event, "db: "
-				"ldap_init() failed with hosts: %s",
-				set->hosts);
+				"ldap_init() failed with uris: %s",
+				set->uris);
 			return -1;
 		}
 
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
index 7324eb1d4bcf037e24450c55703bdbc466eefdab..f80dcd66e34e72751162120169ea6d99de06caba 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
@@ -25,7 +25,6 @@ static bool
 sieve_ldap_settings_check(void *_set, pool_t pool, const char **error_r);
 
 static const struct setting_define sieve_ldap_setting_defines[] = {
-	DEF(STR, hosts),
 	DEF(STR, uris),
 	DEF(STR, dn),
 	DEF(STR, dnpass),
@@ -51,7 +50,6 @@ static const struct setting_define sieve_ldap_setting_defines[] = {
 };
 
 const struct sieve_ldap_settings sieve_ldap_default_settings = {
-	.hosts = "",
 	.uris = "",
 	.dn = "",
 	.dnpass = "",
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
index 420a405569806c7f6c36d67c02ead2333201af38..21038342ed72a2515459fce0e9a405fe8958d90d 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
@@ -4,7 +4,6 @@
 struct sieve_ldap_settings {
 	pool_t pool;
 
-	const char *hosts;
 	const char *uris;
 	const char *dn;
 	const char *dnpass;
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage.c b/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
index 38edfef3a068f2a23939709a74a3f9ccc4764ec0..3777448d03c45b8633363fcaabae6d044ff7f36a 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
@@ -60,7 +60,7 @@ sieve_ldap_storage_init(struct sieve_storage *storage)
 		sieve_storage_set_critical(storage, "%s", error);
 		return -1;
 	}
-	if (*ldap_set->uris == '\0' && *ldap_set->hosts == '\0') {
+	if (*ldap_set->uris == '\0') {
 		sieve_storage_set_critical(storage,
 			"sieve_script %s { ldap_uris / ldap_hosts } not set",
 			storage->name);