123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- function knotcConfExec($cmds) {
- exec(CONF['dns']['knotc_path'] . " conf-begin", $output['begin'], $code['begin']);
- if ($code['begin'] !== 0)
- serverError("knotcConfExec: <code>knotc</code> failed with exit code <samp>" . $code['begin'] . "</samp>: <samp>" . $output['begin'][0] . "</samp>.");
- foreach ($cmds as $cmd) {
- exec(CONF['dns']['knotc_path'] . " conf-" . $cmd, $output['op'], $code['op']);
- if ($code['op'] !== 0) {
- exec(CONF['dns']['knotc_path'] . " conf-abort");
- serverError("knotcConfExec: <code>knotc</code> failed with exit code <samp>" . $code['op'] . "</samp>: <samp>" . $output['op'][0] . "</samp>.");
- }
- }
- exec(CONF['dns']['knotc_path'] . " conf-commit", $output['commit'], $code['commit']);
- if ($code['commit'] !== 0) {
- exec(CONF['dns']['knotc_path'] . " conf-abort");
- serverError("knotcConfExec: <code>knotc</code> failed with exit code <samp>" . $code['commit'] . "</samp>: <samp>" . $output['commit'][0] . "</samp>.");
- }
- }
- function knotcZoneExec($zone, $cmd) {
- $action = checkAction($_POST['action']);
- exec(CONF['dns']['knotc_path'] . " zone-begin " . $zone, $output['begin'], $code['begin']);
- if ($code['begin'] !== 0)
- serverError("knotcZoneExec: <code>knotc</code> failed with exit code <samp>" . $code['begin'] . "</samp>: <samp>" . $output['begin'][0] . "</samp>.");
- exec(CONF['dns']['knotc_path'] . " zone-" . $action . "set " . $zone . " " . implode(" ", $cmd), $output['op'], $code['op']);
- if ($code['op'] !== 0) {
- exec(CONF['dns']['knotc_path'] . " zone-abort " . $zone);
- serverError("knotcZoneExec: <code>knotc</code> failed with exit code <samp>" . $code['op'] . "</samp>: <samp>" . $output['op'][0] . "</samp>.");
- }
- exec(CONF['dns']['knotc_path'] . " zone-commit " . $zone, $output['commit'], $code['commit']);
- if ($code['commit'] !== 0) {
- exec(CONF['dns']['knotc_path'] . " zone-abort " . $zone);
- serverError("knotcZoneExec: <code>knotc</code> failed with exit code <samp>" . $code['commit'] . "</samp>: <samp>" . $output['commit'][0] . "</samp>.");
- }
- }
- function checkIpFormat($ip) {
- if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
- return "A";
- if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
- return "AAAA";
- userError("IP address malformed.");
- }
- function checkAbsoluteDomainFormat($domain) {
- // If the domain must end with a dot
- if (!filter_var($domain, FILTER_VALIDATE_DOMAIN) OR !preg_match("/^([a-z0-9_-]{1,63}\.){2,127}$/", $domain))
- userError("Domain malformed.");
- }
- function formatEndWithDot($str) {
- if (!str_ends_with($str, '.'))
- $str .= '.';
- return $str;
- }
- function formatAbsoluteDomain($domain) {
- $domain = formatEndWithDot(strtolower($domain));
- checkAbsoluteDomainFormat($domain);
- return $domain;
- }
- function checkAction($action) {
- return match ($action) {
- 'add' => '',
- 'delete' => 'un',
- default => userError("Wrong value for action."),
- };
- }
|