zone-add.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. if (processForm()) {
  3. $_POST['domain'] = formatAbsoluteDomain($_POST['domain']);
  4. if (query('select', 'zones', ['zone' => $_POST['domain']], 'zone') !== [])
  5. output(403, 'Cette zone existe déjà sur ce service.');
  6. exec(CONF['ns']['kdig_path'] . " " . ltrim(strstr($_POST['domain'], '.'), '.') . " NS +short", $parentAuthoritatives);
  7. foreach ($parentAuthoritatives as $parentAuthoritative)
  8. checkAbsoluteDomainFormat($parentAuthoritative);
  9. exec(CONF['ns']['kdig_path'] . " " . $_POST['domain'] . " NS @" . $parentAuthoritatives[0], $results);
  10. preg_match_all('/' . preg_quote($_POST['domain'], '/') . '[\t ]+[0-9]{1,8}[\t ]+IN[\t ]+NS[\t ]+(.+)\n/', implode("\n", $results), $matches);
  11. if (equalArrays(CONF['ns']['servers'], $matches[1]) !== true)
  12. output(403, 'Les serveurs ayant autorité dans cette zone indiqués par la zone parente ne sont pas ceux de Niver.');
  13. insert('zones', [
  14. 'zone' => $_POST['domain'],
  15. 'username' => $_SESSION['username'],
  16. ]);
  17. $knotZonePath = CONF['ns']['knot_zones_path'] . "/" . $_POST['domain'] . "zone";
  18. $knotZone = $_POST['domain'] . ' 3600 SOA ' . CONF['ns']['servers'][0] . ' admin.niver.test. 1 21600 7200 3628800 3600' . "\n";
  19. foreach (CONF['ns']['servers'] as $server)
  20. $knotZone .= $_POST['domain'] . ' 86400 NS ' . $server . "\n";
  21. if (is_int(file_put_contents($knotZonePath, $knotZone)) !== true)
  22. output(500, 'Failed to write new zone file.');
  23. if (chmod($knotZonePath, 0660) !== true)
  24. output(500, 'Failed to chmod new zone file.');
  25. knotcConfExec([
  26. "set 'zone[" . $_POST['domain'] . "]'",
  27. "set 'zone[" . $_POST['domain'] . "].template' 'niver-ns'",
  28. ]);
  29. output(200, 'La requête a été traitée.');
  30. }
  31. ?>
  32. <p>
  33. Le domaine doit avoir pour enregistrements NS :
  34. <ul>
  35. <?php
  36. foreach (CONF['ns']['servers'] as $server)
  37. echo ' <li><code>' . $server . '</code></li>';
  38. ?>
  39. </ul>
  40. </p>
  41. <form method="post">
  42. <label for="domain">Domaine</label><br>
  43. <input required="" placeholder="domain.<?= PLACEHOLDER_DOMAIN ?>." id="domain" name="domain" type="text"><br>
  44. <input value="Ajouter" type="submit">
  45. </form>