Changeset 295 for trunk/DNSDB.pm
- Timestamp:
- 03/29/12 17:06:10 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/DNSDB.pm
r294 r295 154 154 my %userdata; 155 155 156 # Entity-relationship reference hashes. 157 my %par_tbl = ( 158 group => 'groups', 159 user => 'users', 160 defrec => 'default_records', 161 defrevrec => 'default_rev_records', 162 domain => 'domains', 163 revzone => 'revzones', 164 record => 'records' 165 ); 166 my %id_col = ( 167 group => 'group_id', 168 user => 'user_id', 169 defrec => 'record_id', 170 defrevrec => 'record_id', 171 domain => 'domain_id', 172 revzone => 'rdns_id', 173 record => 'record_id' 174 ); 175 my %par_col = ( 176 group => 'parent_group_id', 177 user => 'group_id', 178 defrec => 'group_id', 179 defrevrec => 'group_id', 180 domain => 'group_id', 181 revzone => 'group_id', 182 record => 'domain_id' 183 ); 184 my %par_type = ( 185 group => 'group', 186 user => 'group', 187 defrec => 'group', 188 defrevrec => 'group', 189 domain => 'group', 190 revzone => 'group', 191 record => 'domain' 192 ); 156 193 157 194 ## … … 1231 1268 #return ('FAIL', "Missing 1232 1269 1270 return ('FAIL', "Can't change the group of a $type") 1271 unless grep /^$type$/, ('domain','revzone','user','group'); # could be extended for defrecs? 1272 1273 # Collect some names for logging and messages 1274 my $entname; 1233 1275 if ($type eq 'domain') { 1234 $dbh->do("UPDATE domains SET group_id=? WHERE domain_id=?", undef, ($newgrp, $id)) 1235 or return ('FAIL','Group change failed: '.$dbh->errstr); 1276 $entname = domainName($dbh, $id); 1277 } elsif ($type eq 'revzone') { 1278 $entname = revName($dbh, $id); 1236 1279 } elsif ($type eq 'user') { 1237 $dbh->do("UPDATE users SET group_id=? WHERE user_id=?", undef, ($newgrp, $id)) 1238 or return ('FAIL','Group change failed: '.$dbh->errstr); 1280 $entname = userFullName($dbh, $id, '%u'); 1239 1281 } elsif ($type eq 'group') { 1240 $dbh->do("UPDATE groups SET parent_group_id=? WHERE group_id=?", undef, ($newgrp, $id)) 1241 or return ('FAIL','Group change failed: '.$dbh->errstr); 1242 } 1243 return ('OK','OK'); 1282 $entname = groupName($dbh, $id); 1283 } 1284 1285 my ($oldgid) = $dbh->selectrow_array("SELECT group_id FROM $par_tbl{$type} WHERE $id_col{$type}=?", 1286 undef, ($id)); 1287 my $oldgname = groupName($dbh, $oldgid); 1288 my $newgname = groupName($dbh, $newgrp); 1289 1290 return ('FAIL', "Can't move things into a group that doesn't exist") if !$newgname; 1291 1292 return ('WARN', "Nothing to do, new group is the same as the old group") if $oldgid == $newgrp; 1293 1294 # Allow transactions, and raise an exception on errors so we can catch it later. 1295 # Use local to make sure these get "reset" properly on exiting this block 1296 local $dbh->{AutoCommit} = 0; 1297 local $dbh->{RaiseError} = 1; 1298 1299 eval { 1300 $dbh->do("UPDATE $par_tbl{$type} SET group_id=? WHERE $id_col{$type}=?", undef, ($newgrp, $id)); 1301 # Log the change in both the old and new groups 1302 _log($dbh, (group_id => $oldgid, entry => "Moved $type $entname from $oldgname to $newgname")); 1303 _log($dbh, (group_id => $newgrp, entry => "Moved $type $entname from $oldgname to $newgname")); 1304 $dbh->commit; 1305 }; 1306 if ($@) { 1307 my $msg = $@; 1308 eval { $dbh->rollback; }; 1309 if ($config{log_failures}) { 1310 _log($dbh, (group_id => $oldgid, entry => "Error moving $type $entname to $newgname: $msg")); 1311 $dbh->commit; # since we enabled transactions earlier 1312 } 1313 return ('FAIL',"Error moving $type $entname to $newgname: $msg"); 1314 } 1315 1316 return ('OK',"Moved $type $entname from $oldgname to $newgname"); 1244 1317 } # end changeGroup() 1245 1318 … … 1409 1482 $msg = $@; 1410 1483 eval { $dbh->rollback; }; 1411 $loghash{entry} = "Delete $zone: $failmsg: $msg"; 1412 _log($dbh, %loghash) if $config{log_failures}; 1413 $dbh->commit; # since we enabled transactions earlier 1414 return ('FAIL',"Delete $zone: $failmsg: $msg"); 1484 $loghash{entry} = "Error deleting $zone: $msg ($failmsg)"; 1485 if ($config{log_failures}) { 1486 _log($dbh, %loghash); 1487 $dbh->commit; # since we enabled transactions earlier 1488 } 1489 return ('FAIL', $loghash{entry}); 1415 1490 } else { 1416 return ('OK', $msg);1491 return ('OK', $msg); 1417 1492 } 1418 1493 … … 2751 2826 return ('OK',$logdata{entry}); 2752 2827 } # end delRec() 2753 2754 2755 # Reference hashes.2756 my %par_tbl = (2757 group => 'groups',2758 user => 'users',2759 defrec => 'default_records',2760 defrevrec => 'default_rev_records',2761 domain => 'domains',2762 revzone => 'revzones',2763 record => 'records'2764 );2765 my %id_col = (2766 group => 'group_id',2767 user => 'user_id',2768 defrec => 'record_id',2769 defrevrec => 'record_id',2770 domain => 'domain_id',2771 revzone => 'rdns_id',2772 record => 'record_id'2773 );2774 my %par_col = (2775 group => 'parent_group_id',2776 user => 'group_id',2777 defrec => 'group_id',2778 defrevrec => 'group_id',2779 domain => 'group_id',2780 revzone => 'group_id',2781 record => 'domain_id'2782 );2783 my %par_type = (2784 group => 'group',2785 user => 'group',2786 defrec => 'group',2787 defrevrec => 'group',2788 domain => 'group',2789 revzone => 'group',2790 record => 'domain'2791 );2792 2828 2793 2829
Note:
See TracChangeset
for help on using the changeset viewer.