/** Update All Zone Records for Zone ID with Zone Template * * @param int $zone_id Zone ID to update * @param int $zone_template_id Zone Template ID to use for update * * @return null */ function update_zone_records($zone_id, $zone_template_id) { global $db; global $dns_ttl; global $db_type; if (do_hook('verify_permission', 'zone_content_edit_others')) { $perm_edit = "all"; } elseif (do_hook('verify_permission', 'zone_content_edit_own')) { $perm_edit = "own"; } else { $perm_edit = "none"; } $user_is_zone_owner = do_hook('verify_user_is_owner_zoneid', $zone_id); if (do_hook('verify_permission', 'zone_master_add')) { $zone_master_add = "1"; } if (do_hook('verify_permission', 'zone_slave_add')) { $zone_slave_add = "1"; } $soa_rec = get_soa_record($zone_id); $response = $db->beginTransaction(); if (0 != $zone_template_id) { if ($perm_edit == "all" || $perm_edit == "own" && $user_is_zone_owner == "1") { if (is_numeric($zone_id)) { $db->exec("DELETE FROM records WHERE id IN (SELECT record_id FROM records_zone_templ WHERE " . "domain_id = " . $db->quote($zone_id, 'integer') . " AND " . "zone_templ_id = " . $db->quote($zone_template_id, 'integer') . ")"); $db->exec("DELETE FROM records_zone_templ WHERE domain_id = " . $db->quote($zone_id, 'integer')); } else { error(sprintf(ERR_INV_ARGC, "delete_domain", "id must be a number")); } } else { error(ERR_PERM_DEL_ZONE); } if ($zone_master_add == "1" || $zone_slave_add == "1") { $domain = get_zone_name_from_id($zone_id); $now = time(); $templ_records = get_zone_templ_records($zone_template_id); if ($templ_records == -1) { return; } foreach ($templ_records as $r) { //fixme: appears to be a bug and regex match should occur against $domain if (preg_match('/in-addr.arpa/i', $zone_id) && ($r["type"] == "NS" || $r["type"] == "SOA") || !preg_match('/in-addr.arpa/i', $zone_id)) { $name = parse_template_value($r["name"], $domain); $type = $r["type"]; if ($type == "SOA") { $content = get_updated_soa_record($soa_rec); } else { $content = parse_template_value($r["content"], $domain); } $ttl = $r["ttl"]; $prio = intval($r["prio"]); if (!$ttl) { $ttl = $dns_ttl; } $query = "INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) VALUES (" . $db->quote($zone_id, 'integer') . "," . $db->quote($name, 'text') . "," . $db->quote($type, 'text') . "," . $db->quote($content, 'text') . "," . $db->quote($ttl, 'integer') . "," . $db->quote($prio, 'integer') . "," . $db->quote($now, 'integer') . ")"; $response = $db->exec($query); if ($db_type == 'pgsql') { $record_id = $db->lastInsertId('records_id_seq'); } else { $record_id = $db->lastInsertId(); } $query = "INSERT INTO records_zone_templ (domain_id, record_id, zone_templ_id) VALUES (" . $db->quote($zone_id, 'integer') . "," . $db->quote($record_id, 'integer') . "," . $db->quote($zone_template_id, 'integer') . ")"; $response = $db->query($query); } } } } $query = "UPDATE zones\n SET zone_templ_id = " . $db->quote($zone_template_id, 'integer') . "\n WHERE domain_id = " . $db->quote($zone_id, 'integer'); $response = $db->exec($query); if (PEAR::isError($response)) { $response = $db->rollback(); } else { $response = $db->commit(); } }
function update_soa_serial($domain_id) { $soa_rec = get_soa_record($domain_id); if ($soa_rec == NULL) { return false; } $curr_serial = get_soa_serial($soa_rec); $new_serial = get_next_serial($curr_serial); if ($curr_serial != $new_serial) { $soa_rec = set_soa_serial($soa_rec, $new_serial); return update_soa_record($domain_id, $soa_rec); } return true; }