allow records with password history to be deleted, from #32456
authorMark Wells <mark@freeside.biz>
Thu, 25 Feb 2016 23:16:35 +0000 (15:16 -0800)
committerMark Wells <mark@freeside.biz>
Fri, 26 Feb 2016 01:11:10 +0000 (17:11 -0800)
FS/FS/Password_Mixin.pm
FS/FS/access_user.pm
FS/FS/contact.pm
FS/FS/svc_acct.pm

index 3fb787c..ac7ba50 100644 (file)
@@ -215,6 +215,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
index 72f2320..3b36e46 100644 (file)
@@ -161,7 +161,8 @@ sub delete {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error = $self->SUPER::delete(@_);
+  my $error = $self->delete_password_history
+           || $self->SUPER::delete(@_);
 
   if ( $error ) {
     $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
index a824b8e..c1b558d 100644 (file)
@@ -378,7 +378,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;
index 6bb67af..c2f5d71 100644 (file)
@@ -847,7 +847,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;