MT#21871 setting the allowed_ips via api and panel corrupts the db

+there are different implementations of obtaining a
 fresh id from voip_aig_sequence for panel and api
+api call fails, when there are more than one id's
 in that table. which can happen after concurrently
 using the panel UI for that.

+now modified to always use mysql's autoincrement,
 otherwise api will stop working again, once it
 filled up id gaps coming from panel usage.

Change-Id: I9c699e19f7161e744ae858e75089b333cbc2b128
changes/87/7587/4
Rene Krenn 9 years ago
parent 687588fbec
commit 158ed2c1c2

@ -645,27 +645,23 @@ sub update_item {
/^(man_)?allowed_ips$/ && do {
my $pref_name = $pref . "_grp";
my $aig_rs;
my $seq;
my $aig_group_id;
my $rs = $self->get_preference_rs($c, $type, $elem, $pref_name);
if($rs->first) {
$aig_group_id = $rs->first->value;
$aig_rs = $c->model('DB')->resultset('voip_allowed_ip_groups')->search({
group_id => $rs->first->value
group_id => $aig_group_id
});
$aig_rs->delete;
} else {
my $aig_seq = $c->model('DB')->resultset('voip_aig_sequence')->search({},{
for => 'update',
});
unless($aig_seq->first) {
$seq = 1;
$aig_seq->create({ id => $seq });
} else {
$seq = $aig_seq->first->id + 1;
$aig_seq->first->update({ id => $seq });
}
my $new_group = $c->model('DB')->resultset('voip_aig_sequence')->create({});
$aig_group_id = $new_group->id;
$aig_rs = $c->model('DB')->resultset('voip_allowed_ip_groups')->search({
group_id => $seq
group_id => $aig_group_id
});
$c->model('DB')->resultset('voip_aig_sequence')->search_rs({
id => { '<' => $aig_group_id },
})->delete_all;
}
foreach my $ip(@{ $resource->{$pref} }) {
unless($self->validate_ipnet($c, $pref, $ip)) {
@ -675,8 +671,9 @@ sub update_item {
$aig_rs->create({ ipnet => $ip });
}
unless($rs->first) {
$rs->create({ value => $seq });
$rs->create({ value => $aig_group_id });
}
# in contrast to panel, it does not drop the allowed_ips_grp pref, if empty ipnets.
last SWITCH;
};
# default

Loading…
Cancel
Save