Autodns ein- und ausschaltbar, Konversion von autorecords
bernd

bernd commited on 2009-09-07 07:11:50
Zeige 4 geänderte Dateien mit 129 Einfügungen und 4 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1463 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -37,7 +37,7 @@ foreach ($records AS $rec)
37 37
   }
38 38
   $ttl = ($rec['ttl'] ? $rec['ttl'] : 3600);
39 39
   $link = $rec['fqdn'];
40
-  if (in_array($rec['type'], array('a', 'aaaa', 'mx', 'cname'))) {
40
+  if (in_array($rec['type'], array('a', 'aaaa', 'mx', 'cname', 'ns', 'txt', 'spf'))) {
41 41
       $link = internal_link('dns_record_edit', $rec['fqdn'], "id={$rec['id']}");
42 42
   }
43 43
   output("<tr><td>{$link}</td><td>".strtoupper($rec['type'])."</td><td>$data</td><td>{$ttl} Sek.</td><td>".internal_link('dns_record_save', '<img src="'.$prefix.'images/delete.png" width="16" height="16" alt="löschen" title="Record löschen" />', "id={$rec['id']}&action=delete")."</td></tr>\n");
... ...
@@ -70,9 +70,23 @@ output('<h4>Neuen DNS-Record anlegen</h4>
70 70
 <ul>
71 71
 <li>'.internal_link('dns_record_edit', 'AAAA (IPv6-Adresse)', 'id=new&type=aaaa&domain='.$domain->id).'</li>
72 72
 <li>'.internal_link('dns_record_edit', 'CNAME (Aliasnamen)', 'id=new&type=cname&domain='.$domain->id).'</li>
73
-<li>'.internal_link('dns_record_edit', 'SPF', 'id=new&type=spf&domain='.$domain->id).'</li>
73
+<li>'.internal_link('dns_record_edit', 'NS (Nameserver)', 'id=new&type=ns&domain='.$domain->id).'</li>
74
+<li>'.internal_link('dns_record_edit', 'SPF (sender policy framework)', 'id=new&type=spf&domain='.$domain->id).'</li>
74 75
 <li>'.internal_link('dns_record_edit', 'TXT', 'id=new&type=txt&domain='.$domain->id).'</li>
75 76
 </ul>
77
+
78
+<h4>Automatische DNS-Records</h4>
76 79
 ');
77 80
 
81
+if ($domain->autodns)
82
+{
83
+  output("<p>Automatische Einträge können nicht geändert werden. Möchten Sie davon abweichende Records setzen, so können Sie hiermit alle automatischen Einträge in normale Einträge konvertieren und die Erzeugung neuer automatischer Einträge abschalten. Diese Einstellung betrifft nur diese Domain und kann jederzeit geändert werden.</p>
84
+<p>".internal_link('dns_save', 'Automatisch erzeugte Einträge umwandeln', "type=autodns&action=disable&dom={$domain->id}")."</p>");
85
+}
86
+else
87
+{
88
+  output("<p>Sie verwealten Ihre DNS-Einträge selbst. Wenn Sie möchten, können Sie die DNS-Einträge auch automatisch anhand der angelegten Webserver-VHosts und anderer Einstellungen festlegen lassen. Diese Eintäge können Sie dann nicht direkt ändern. Ihre bestehenden Einträge bleiben unberührt und zusätzlich erhalten. Bitte löschen Sie dadurch entstehende Duplikate!</p>
89
+<p>".internal_link('dns_save', 'Automatisch erzeugte Einträge aktivieren', "type=autodns&action=enable&dom={$domain->id}")."</p>");
90
+}
91
+
78 92
 ?>
... ...
@@ -21,7 +21,7 @@ foreach (get_dyndns_accounts() AS $t)
21 21
   $dyndns_accounts[$t['id']] = $t['handle'];
22 22
 }
23 23
 
24
-if ($_REQUEST['type'] == "dyndns")
24
+if (isset($_REQUEST['type']) && $_REQUEST['type'] == "dyndns")
25 25
 {
26 26
   $_REQUEST['type'] = 'a';
27 27
   $dyndns = true;
... ...
@@ -77,6 +77,13 @@ if (! $dyndns && ($type == 'a' || $type == 'aaaa'))
77 77
 ';
78 78
 }
79 79
 
80
+if ($type == 'ns')
81
+{
82
+  $form .= '
83
+<tr><td><label for="data">DNS-Server:</label></td><td><input type="text" name="data" id="data" value="'.$data['data'].'" /></td></tr>
84
+';
85
+}
86
+
80 87
 if ($type == 'ptr' || $type == 'cname')
81 88
 {
82 89
   $form .= '
... ...
@@ -0,0 +1,66 @@
1
+<?php
2
+
3
+require_once('inc/base.php');
4
+require_once('inc/debug.php');
5
+global $debugmode;
6
+require_once('inc/security.php');
7
+
8
+require_once('class/domain.php');
9
+
10
+require_role(ROLE_CUSTOMER);
11
+
12
+require_once('dnsinclude.php');
13
+
14
+$section = 'dns_dns';
15
+
16
+if ($_GET['type'] == 'autodns')
17
+{
18
+  if ($_GET['action'] == 'enable')
19
+  {
20
+    $dom = new Domain( (int) $_GET['dom'] );
21
+    $dom->ensure_customerdomain();
22
+
23
+    $sure = user_is_sure();
24
+    if ($sure === NULL)
25
+    {
26
+      are_you_sure("type=autodns&action=enable&dom={$dom->id}", "Möchten Sie die automatischen DNS-records für {$dom->fqdn} einschalten?");
27
+    }
28
+    elseif ($sure === true)
29
+    {
30
+      enable_autorecords($dom->id);
31
+      sync_autorecords();
32
+      if (! $debugmode)
33
+        header("Location: dns_domain?dom={$dom->id}");
34
+    }
35
+    elseif ($sure === false)
36
+    {
37
+      if (! $debugmode)
38
+        header("Location: dns_domain?dom={$dom->id}");
39
+    }
40
+  }
41
+  elseif ($_GET['action'] == 'disable')
42
+  {
43
+    $dom = new Domain( (int) $_GET['dom'] );
44
+    $dom->ensure_customerdomain();
45
+
46
+    $sure = user_is_sure();
47
+    if ($sure === NULL)
48
+    {
49
+      are_you_sure("type=autodns&action=disable&dom={$dom->id}", "Möchten Sie die automatischen DNS-records für {$dom->fqdn} in manuelle Einträge umwandeln?");
50
+    }
51
+    elseif ($sure === true)
52
+    {
53
+      convert_from_autorecords($dom->id);
54
+      sync_autorecords();
55
+      if (! $debugmode)
56
+        header("Location: dns_domain?dom={$dom->id}");
57
+    }
58
+    elseif ($sure === false)
59
+    {
60
+      if (! $debugmode)
61
+        header("Location: dns_domain?dom={$dom->id}");
62
+    }
63
+  }
64
+}
65
+
66
+
... ...
@@ -166,7 +166,7 @@ function get_domain_auto_records($domainname)
166 166
 }
167 167
 
168 168
 
169
-$implemented_record_types = array('a', 'aaaa', 'mx', 'spf', 'txt', 'cname', 'ptr', 'srv');
169
+$implemented_record_types = array('a', 'aaaa', 'mx', 'spf', 'txt', 'cname', 'ptr', 'srv', 'ns');
170 170
 
171 171
 function save_dns_record($id, $record)
172 172
 {
... ...
@@ -217,6 +217,7 @@ function save_dns_record($id, $record)
217 217
       break;
218 218
     case 'cname':
219 219
     case 'ptr':
220
+    case 'ns':
220 221
       $record['dyndns'] = '';
221 222
       $record['spec'] = '';
222 223
       $record['ip'] = '';
... ...
@@ -262,4 +263,41 @@ function delete_dns_record($id)
262 263
   db_query("DELETE FROM dns.custom_records WHERE id={$id} LIMIT 1");
263 264
 }
264 265
 
266
+
267
+function convert_from_autorecords($domainid)
268
+{
269
+  $dom = new Domain( (int) $domainid );
270
+  $dom->ensure_customerdomain();
271
+  $dom = $dom->id;
272
+
273
+  db_query("INSERT IGNORE INTO dns.custom_records SELECT r.id, r.lastchange, type, d.id, hostname, ip, NULL AS dyndns, data, spec, ttl FROM dns.v_tmptable_allrecords AS r INNER JOIN dns.v_domains AS d ON (d.name=r.domain) WHERE d.id={$dom}");
274
+  disable_autorecords($dom);
275
+}
276
+
277
+
278
+function enable_autorecords($domainid)
279
+{
280
+  $dom = new Domain( (int) $domainid );
281
+  $dom->ensure_customerdomain();
282
+  $dom = $dom->id;
283
+
284
+  db_query("UPDATE kundendaten.domains SET autodns=1 WHERE id={$dom} LIMIT 1");
285
+}
286
+
287
+function disable_autorecords($domainid)
288
+{
289
+  $dom = new Domain( (int) $domainid );
290
+  $dom->ensure_customerdomain();
291
+  $dom = $dom->id;
292
+
293
+  db_query("UPDATE kundendaten.domains SET autodns=0 WHERE id={$dom} LIMIT 1");
294
+}
295
+
296
+
297
+function sync_autorecords()
298
+{
299
+  db_query("CALL dns.sync_autorecords()");
300
+}
301
+
302
+
265 303
 ?>
266 304