diff --git a/includes/class/PdnsApi.php b/includes/class/PdnsApi.php index 25a1581..901c4d7 100644 --- a/includes/class/PdnsApi.php +++ b/includes/class/PdnsApi.php @@ -84,6 +84,14 @@ class PdnsAPI { return $this->loadzone($zone['id']); } + public function notifyzone($zoneid) { + $api = clone $this->http; + $api->method = 'PUT'; + $api->url = "/servers/localhost/zones/$zoneid/notify"; + $api->call(); + + return $api->json; + } public function deletezone($zoneid) { $api = clone $this->http; diff --git a/includes/config.inc.php-dist b/includes/config.inc.php-dist index 8991b81..38fb67a 100644 --- a/includes/config.inc.php-dist +++ b/includes/config.inc.php-dist @@ -9,6 +9,7 @@ $allowzoneadd = FALSE; # Allow normal users to add zones $logging = TRUE; $allowclearlogs = TRUE; # Allow clearing of log entries $allowrotatelogs = FALSE;# Allow rotation to text file on server +$notifyafterupdate = TRUE;# send notify to slaves after zone update # Log directory - if allowrotatelogs is set, this is where the logs will # be written. It must be writeable by the web server user. diff --git a/zones.php b/zones.php index a784673..27da9ef 100644 --- a/zones.php +++ b/zones.php @@ -304,6 +304,7 @@ case "create": } $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); $zone = new Zone(); $zone->parse($api->loadzone($zonename)); @@ -327,7 +328,8 @@ case "create": $rrset->delete(); } } - $api->savezone($zone->export()); + $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); foreach ($template['records'] as $record) { $name = $record['name'] != '' ? join(Array($record['name'],'.',$zonename)) : $zonename; @@ -340,6 +342,7 @@ case "create": } $zone = $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); writelog("Created zone ".$zone['name']); jtable_respond($zone, 'single'); break; @@ -370,6 +373,7 @@ case "update": writelog("Updated zone ".$zone->name); jtable_respond($api->savezone($zone->export()), 'single'); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); break; case "createrecord": @@ -411,6 +415,7 @@ case "createrecord": $record = $zone->addRecord($name, $type, $content, $_POST['disabled'], $_POST['ttl'], $_POST['setptr']); $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); writelog("Created record: ".$record['id']); jtable_respond($record, 'single'); @@ -436,6 +441,7 @@ case "editrecord": $zone->addRecord($_POST['name'], $_POST['type'], $content, $_POST['disabled'], $_POST['ttl'], $_POST['setptr']); $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); $record = $zone->getRecord($_POST['name'], $_POST['type'], $content); writelog("Updated record ".$_POST['id']." to ".$record['id']); @@ -453,6 +459,7 @@ case "deleterecord": $rrset->deleteRecord($old_record['content']); $api->savezone($zone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); writelog("Deleted record ".$_POST['id']); jtable_respond(null, 'delete'); @@ -486,6 +493,7 @@ case "clone": $srczone->setKind($_POST['kind']); $zone = $api->savezone($srczone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); $srczone->parse($zone); @@ -504,6 +512,7 @@ case "clone": } $zone = $api->savezone($srczone->export()); + if ($notifyafterupdate) $api->notifyzone($_GET['zoneid']); writelog("Cloned zone $src into $name"); jtable_respond($zone, 'single');