diff -urN ../z-push-2.6.4+0.orig/src/backend/imap/config.php ./src/backend/imap/config.php --- ../z-push-2.6.4+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.4+0.orig/src/backend/imap/user_identity.php ./src/backend/imap/user_identity.php --- ../z-push-2.6.4+0.orig/src/backend/imap/user_identity.php 2021-06-25 11:55:30.000000000 +0300 +++ ./src/backend/imap/user_identity.php 2023-06-18 22:02:56.007395000 +0300 @@ -158,15 +158,33 @@ } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - No entry found in LDAP")); + $message = sprintf("BackendIMAP->getIdentityFromLdap() - No entry found in LDAP for %s@%s", $username, ($domain ? '@' : '') . $domain); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_ERROR, $message); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_WARN, $message); + } } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Not authenticated in LDAP server")); + $message = sprintf("BackendIMAP->getIdentityFromLdap() - Unable to bind to LDAP server %s", IMAP_FROM_LDAP_SERVER_URI); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_ERROR, $message); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_WARN, $message); + } } } else { - ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->getIdentityFromLdap() - Not connected to LDAP server")); + $message = sprintf("BackendIMAP->getIdentityFromLdap() - Unable to create LDAP object. May be incorrect IMAP_FROM_LDAP_SERVER_URI %s", IMAP_FROM_LDAP_SERVER_URI); + if (defined('IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR') and (IMAP_FROM_LDAP_SERVICE_UNAVAILABLE_ON_ERROR === true)) { + ZLog::Write(LOGLEVEL_ERROR, $message); + $ret_value = ''; + } else { + ZLog::Write(LOGLEVEL_WARN, $message); + } } } else { @@ -175,10 +193,16 @@ } 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("BackendIMAP->getIdentityFromLdap() - Error getting identity from LDAP server %s for %s%s", + IMAP_FROM_LDAP_SERVER_URI, $username, ($domain ? '@' : '') . $domain)); } return $ret_value;