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>
Sun, 28 Feb 2016 03:28:04 +0000 (19:28 -0800)
FS/FS/Password_Mixin.pm
FS/FS/access_user.pm
FS/FS/contact.pm
FS/FS/svc_acct.pm

index bdfab18..f07f772 100644 (file)
@@ -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
index ffbe7ac..1f5cec3 100644 (file)
@@ -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')
   ;
 
index d906dc9..4012109 100644 (file)
@@ -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;
index af152a8..8a70c1a 100644 (file)
@@ -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;