diff --git a/server/src/main/java/password/pwm/config/PwmSetting.java b/server/src/main/java/password/pwm/config/PwmSetting.java index 08212231c..b0c2f3151 100644 --- a/server/src/main/java/password/pwm/config/PwmSetting.java +++ b/server/src/main/java/password/pwm/config/PwmSetting.java @@ -303,6 +303,8 @@ public enum PwmSetting "ldap.ignoreUnreachableProfiles", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ), LDAP_ENABLE_WIRE_TRACE( "ldap.wireTrace.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ), + LDAP_ALLOW_AUTH_REQUIRE_NEW_PWD( + "ldap.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.LDAP_GLOBAL ), PASSWORD_SYNC_ENABLE_REPLICA_CHECK( "passwordSync.enableReplicaCheck", PwmSettingSyntax.SELECT, PwmSettingCategory.LDAP_GLOBAL ), @@ -1037,8 +1039,6 @@ public enum PwmSetting // active directory AD_USE_PROXY_FOR_FORGOTTEN( "ldap.ad.proxyForgotten", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ), - AD_ALLOW_AUTH_REQUIRE_NEW_PWD( - "ldap.ad.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ), AD_ALLOW_AUTH_EXPIRED( "ldap.ad.allowAuth.expired", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ), AD_ENFORCE_PW_HISTORY_ON_SET( @@ -1047,9 +1047,6 @@ public enum PwmSetting // active directory ORACLE_DS_ENABLE_MANIP_ALLOWCHANGETIME( "ldap.oracleDS.enable.manipAllowChangeTime", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ORACLE_DS ), - ORACLE_DS_ALLOW_AUTH_REQUIRE_NEW_PWD( - "ldap.oracleDS.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ORACLE_DS ), - // helpdesk profile HELPDESK_ENABLE( @@ -1246,6 +1243,14 @@ public enum PwmSetting // deprecated. + + // deprecated 2021-01-14 + AD_ALLOW_AUTH_REQUIRE_NEW_PWD( + "ldap.ad.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ACTIVE_DIRECTORY ), + + // deprecated 2021-01-14 + ORACLE_DS_ALLOW_AUTH_REQUIRE_NEW_PWD( + "ldap.oracleDS.allowAuth.requireNewPassword", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.ORACLE_DS ), // deprecated 2019-06-01 PUBLIC_HEALTH_STATS_WEBSERVICES( diff --git a/server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java b/server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java index 1ff1a6666..6ecffce11 100644 --- a/server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java +++ b/server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java @@ -250,28 +250,18 @@ private AuthenticationResult authenticateUserImpl( userIdentity.getLdapProfileID() ).getDirectoryVendor(); if ( PwmError.PASSWORD_NEW_PASSWORD_REQUIRED == e.getError() ) { - if ( vendor == DirectoryVendor.ACTIVE_DIRECTORY ) - { - if ( pwmApplication.getConfig().readSettingAsBoolean( PwmSetting.AD_ALLOW_AUTH_REQUIRE_NEW_PWD ) ) - { - log( PwmLogLevel.DEBUG, - () -> "auth bind failed, but will allow login due to 'must change password on next login AD error', error: " - + e.getErrorInformation().toDebugStr() ); - allowBindAsUser = false; - permitAuthDespiteError = true; - } - } - else if ( vendor == DirectoryVendor.ORACLE_DS ) + + if ( pwmApplication.getConfig().readSettingAsBoolean( + PwmSetting.LDAP_ALLOW_AUTH_REQUIRE_NEW_PWD ) + && ( vendor == DirectoryVendor.ACTIVE_DIRECTORY + || vendor == DirectoryVendor.ORACLE_DS + || vendor == DirectoryVendor.OPEN_LDAP ) ) { - if ( pwmApplication.getConfig().readSettingAsBoolean( - PwmSetting.ORACLE_DS_ALLOW_AUTH_REQUIRE_NEW_PWD ) ) - { - log( PwmLogLevel.DEBUG, - () -> "auth bind failed, but will allow login due to 'pwdReset' user attribute, error: " - + e.getErrorInformation().toDebugStr() ); - allowBindAsUser = false; - permitAuthDespiteError = true; - } + log( PwmLogLevel.DEBUG, + () -> "auth bind failed, but will allow login due to 'pwdReset=TRUE' or 'pwdLastSet=0', error: " + + e.getErrorInformation().toDebugStr() ); + allowBindAsUser = false; + permitAuthDespiteError = true; } } else if ( PwmError.PASSWORD_EXPIRED == e.getError() ) @@ -279,7 +269,7 @@ else if ( PwmError.PASSWORD_EXPIRED == e.getError() ) // handle ad case where password is expired if ( vendor == DirectoryVendor.ACTIVE_DIRECTORY ) { - if ( pwmApplication.getConfig().readSettingAsBoolean( PwmSetting.AD_ALLOW_AUTH_REQUIRE_NEW_PWD ) ) + if ( pwmApplication.getConfig().readSettingAsBoolean( PwmSetting.LDAP_ALLOW_AUTH_REQUIRE_NEW_PWD ) ) { if ( !pwmApplication.getConfig().readSettingAsBoolean( PwmSetting.AD_ALLOW_AUTH_EXPIRED ) ) { diff --git a/server/src/main/resources/password/pwm/config/PwmSetting.xml b/server/src/main/resources/password/pwm/config/PwmSetting.xml index aefbf4a2f..5abb00e45 100644 --- a/server/src/main/resources/password/pwm/config/PwmSetting.xml +++ b/server/src/main/resources/password/pwm/config/PwmSetting.xml @@ -575,6 +575,17 @@ + - - + +