Index: /trunk/DNSDB.pm
===================================================================
--- /trunk/DNSDB.pm	(revision 295)
+++ /trunk/DNSDB.pm	(revision 296)
@@ -2285,24 +2285,42 @@
   my $dbh = shift;
   my $id = shift;
-  my $newstatus = shift;
+  my $newstatus = shift || 'mu';
 
   return undef if $id !~ /^\d+$/;
 
-  my $sth;
-
-# ooo, fun!  let's see what we were passed for status
-  if ($newstatus) {
-    $sth = $dbh->prepare("update users set status=? where user_id=?");
-    # ass-u-me caller knows what's going on in full
-    if ($newstatus =~ /^[01]$/) {	# only two valid for now.
-      $sth->execute($newstatus,$id);
-    } elsif ($newstatus =~ /^usero(?:n|ff)$/) {
-      $sth->execute(($newstatus eq 'useron' ? 1 : 0),$id);
-    }
-  }
-
-  $sth = $dbh->prepare("select status from users where user_id=?");
-  $sth->execute($id);
-  my ($status) = $sth->fetchrow_array;
+  my $userdata = getUserData($dbh, $id);
+
+  # Allow transactions, and raise an exception on errors so we can catch it later.
+  # Use local to make sure these get "reset" properly on exiting this block
+  local $dbh->{AutoCommit} = 0;
+  local $dbh->{RaiseError} = 1;
+
+  if ($newstatus ne 'mu') {
+    # ooo, fun!  let's see what we were passed for status
+    eval {
+      $newstatus = 0 if $newstatus eq 'useroff';
+      $newstatus = 1 if $newstatus eq 'useron';
+      $dbh->do("UPDATE users SET status=? WHERE user_id=?", undef, ($newstatus, $id));
+
+      $resultstr = ($newstatus ? 'Enabled' : 'Disabled')." user ".$userdata->{username};
+
+      my %loghash;
+      $loghash{group_id} = parentID($dbh, (id => $id, type => 'user'));
+      $loghash{entry} = $resultstr;
+      _log($dbh, %loghash);
+
+      $dbh->commit;
+    };
+    if ($@) {
+      my $msg = $@;
+      eval { $dbh->rollback; };
+      $resultstr = '';
+      $errstr = $msg;
+##fixme: failure logging?
+      return;
+    }
+  }
+
+  my ($status) = $dbh->selectrow_array("SELECT status FROM users WHERE user_id=?", undef, ($id));
   return $status;
 } # end userStatus()
Index: /trunk/dns.cgi
===================================================================
--- /trunk/dns.cgi	(revision 295)
+++ /trunk/dns.cgi	(revision 296)
@@ -1159,7 +1159,5 @@
     if ($flag && ($permissions{admin} || $permissions{user_edit})) {
       my $stat = userStatus($dbh,$webvar{id},$webvar{userstatus});
-      logaction(0, $session->param("username"), parentID($dbh, (id => $webvar{id}, type => 'user')),
-	($stat ? 'Enabled' : 'Disabled')." ".userFullName($dbh, $webvar{id}, '%u'));
-      $page->param(resultmsg => ($stat ? 'Enabled' : 'Disabled')." ".userFullName($dbh, $webvar{id}, '%u'));
+      $page->param(resultmsg => $DNSDB::resultstr);
     } else {
       $page->param(errmsg => "You are not permitted to view or change the requested user");
