diff -urN ../z-push-2.6.2+0.orig/src/backend/imap/config.php ./src/backend/imap/config.php --- ../z-push-2.6.2+0.orig/src/backend/imap/config.php 2021-06-25 11:55:30.000000000 +0300 +++ ./src/backend/imap/config.php 2021-12-23 21:52:36.817808000 +0200 @@ -158,6 +158,7 @@ define('IMAP_FROM_LDAP_EMAIL', '#mail'); define('IMAP_FROM_LDAP_FROM', '#givenname #sn <#mail>'); define('IMAP_FROM_LDAP_FULLNAME', '#givenname #sn'); +define('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR', false); diff -urN ../z-push-2.6.2+0.orig/src/backend/imap/user_identity.php ./src/backend/imap/user_identity.php --- ../z-push-2.6.2+0.orig/src/backend/imap/user_identity.php 2021-06-25 11:55:30.000000000 +0300 +++ ./src/backend/imap/user_identity.php 2021-12-23 21:52:48.295723000 +0200 @@ -158,15 +158,30 @@ } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - No entry found in LDAP")); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromLdap() - No entry found in LDAP for %s@%s", $username, ($domain ? '@' : '') . $domain)); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - No entry found in LDAP for %s@%s", $username, ($domain ? '@' : '') . $domain)); + } } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Not authenticated in LDAP server")); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromLdap() - Unable to bind to LDAP server %s", IMAP_FROM_LDAP_SERVER_URI)); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Not authenticated in LDAP server %s", IMAP_FROM_LDAP_SERVER_URI)); + } } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Not connected to LDAP server")); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromLdap() - Unable to create LDAP object")); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Unable to create LDAP object")); + } } } else { @@ -175,10 +190,15 @@ } catch(Exception $ex) { ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->getIdentityFromLdap() - Error getting From value from LDAP server: %s", $ex)); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) $ret_value = ''; } if ($ldap_conn != null) { ldap_close($ldap_conn); + } + + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true) and ($ret_value == '')) { + throw new ServiceUnavailableException(sprintf("Error getting identity from LDAP server %s for %s%s", IMAP_FROM_LDAP_SERVER_URI, $username, ($domain ? '@' : '') . $domain)); } return $ret_value;