From 9967e37ce23ef112fddc2606390ba5a89a51adaa Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 25 Feb 2016 15:16:35 -0800 Subject: [PATCH 1/1] allow records with password history to be deleted, from #32456 --- FS/FS/Password_Mixin.pm | 20 ++++++++++++++++++++ FS/FS/access_user.pm | 3 ++- FS/FS/contact.pm | 3 ++- FS/FS/svc_acct.pm | 3 ++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/FS/FS/Password_Mixin.pm b/FS/FS/Password_Mixin.pm index bdfab1881..f07f772c9 100644 --- a/FS/FS/Password_Mixin.pm +++ b/FS/FS/Password_Mixin.pm @@ -214,6 +214,26 @@ sub insert_password_history { } +=item delete_password_history; + +Removes all password history records attached to this object, in preparation +to delete the object. + +=cut + +sub delete_password_history { + my $self = shift; + my @records = qsearch('password_history', { + $self->password_history_key => $self->get($self->primary_key) + }); + my $error = ''; + foreach (@records) { + $error ||= $_->delete; + } + return $error . ' (clearing password history)' if $error; + ''; +} + =item _blowfishcrypt PASSWORD For internal use: takes PASSWORD and returns a new diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm index ffbe7ac75..1f5cec38d 100644 --- a/FS/FS/access_user.pm +++ b/FS/FS/access_user.pm @@ -173,7 +173,8 @@ sub delete { my $dbh = dbh; my $error = - $self->SUPER::delete(@_) + $self->delete_password_history + || $self->SUPER::delete(@_) || $self->htpasswd_kludge('-D') ; diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index d906dc9a2..4012109a7 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -233,7 +233,8 @@ sub delete { } } - my $error = $self->SUPER::delete; + my $error = $self->delete_password_history + || $self->SUPER::delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index af152a82e..8a70c1acd 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -925,7 +925,8 @@ sub delete { } } - my $error = $self->SUPER::delete; # usergroup here + my $error = $self->delete_password_history + || $self->SUPER::delete; # usergroup here if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; -- 2.11.0