diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/MailReset.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/MailReset.pm index 6f3a84691..552578d1d 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/MailReset.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/MailReset.pm @@ -321,8 +321,9 @@ sub changePassword { } # Modify the password + $self->{portalRequireOldPassword} = 0; my $result = $self->modifyPassword(); - + # Mail token can be used only one time, delete the session if all is ok if ( $result == PE_PASSWORD_OK or $result == PE_OK ) { diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDBI.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDBI.pm index 0f2bad4f5..6658bb890 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDBI.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDBI.pm @@ -41,6 +41,14 @@ sub modifyPassword { # Exit if no password change requested return PE_OK unless ( $self->{newpassword} ); + # Check if portal require old password + if ( $self->{portalRequireOldPassword } ) { + unless ( $self->{oldpassword} ) { + $self->lmLog( "Portal require old password", 'error' ); + return PE_PP_MUST_SUPPLY_OLD_PASSWORD; + } + } + # Verify confirmation password matching return PE_PASSWORD_MISMATCH unless ( $self->{newpassword} eq $self->{confirmpassword} ); diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDemo.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDemo.pm index 2e08993da..df5d13c34 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDemo.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/PasswordDBDemo.pm @@ -35,6 +35,14 @@ sub modifyPassword { # Exit if no password change requested return PE_OK unless ( $self->{newpassword} ); + + # Check if portal require old password + if ( $self->{portalRequireOldPassword} ) { + unless ( $self->{oldpassword} ) { + $self->lmLog( "Portal require old password", 'error'); + return PE_PP_MUST_SUPPLY_OLD_PASSSWORD; + } + } # Verify confirmation password matching return PE_PASSWORD_MISMATCH