DNs-record-Interface ist jetzt read/write
bernd

bernd commited on 2009-04-30 14:19:40
Zeige 4 geänderte Dateien mit 172 Einfügungen und 42 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1353 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -15,43 +15,57 @@ $domain = new Domain((int) $_REQUEST['dom']);
15 15
 
16 16
 DEBUG($domain);
17 17
 
18
-$output .= '<h3>DNS-Records für <em>'.filter_input_general($domain->fqdn).'</em></h3>';
18
+output('<h3>DNS-Records für <em>'.filter_input_general($domain->fqdn).'</em></h3>');
19 19
 
20 20
 $records = get_domain_records($domain->id);
21 21
 $auto_records = get_domain_auto_records($domain->fqdn);
22 22
 
23
-$output .= '<table><tr><th>Hostname</th><th>Typ</th><th>IP-Adresse/Inhalt</th><th>TTL</th><th>&#160;</th></tr>
24
-';
23
+output('<table><tr><th>Hostname</th><th>Typ</th><th>IP-Adresse/Inhalt</th><th>TTL</th><th>&#160;</th></tr>
24
+');
25 25
 foreach ($records AS $rec)
26 26
 {
27 27
   $data = ( $rec['ip'] ? $rec['ip'] : $rec['data'] );
28 28
   if ($rec['dyndns'])
29
-    $data = internal_link('dyndns_edit', '<em>DynDNS #'.$rec['dyndns'].'</em>', 'id='.$rec['dyndns']);
29
+  {
30
+    $dyndns = get_dyndns_account($rec['dyndns']);
31
+    $data = internal_link('dyndns_edit', '<em>DynDNS #'.$rec['dyndns'].' ('.$dyndns['handle'].')</em>', 'id='.$rec['dyndns']);
32
+  }
33
+  if ($rec['type'] == 'mx')
34
+  {
35
+    $data .= ' ('.$rec['spec'].')';
36
+  }
30 37
   $ttl = ($rec['ttl'] ? $rec['ttl'] : 3600);
31
-  $output .= "<tr><td>".internal_link('dns_record_edit', $rec['fqdn'], "id={$rec['id']}")."</td><td>".strtoupper($rec['type'])."</td><td>$data</td><td>{$ttl} Sek.</td><td>".internal_link('save', '<img src="'.$prefix.'images/delete.png" width="16" height="16" alt="löschen" title="Record löschen" />', "id={$rec['id']}&type=dns&action=delete")."</td></tr>\n";
38
+  output("<tr><td>".internal_link('dns_record_edit', $rec['fqdn'], "id={$rec['id']}")."</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");
32 39
 }  
33 40
 foreach ($auto_records AS $rec)
34 41
 {
35 42
   $data = ( $rec['ip'] ? $rec['ip'] : $rec['data'] );
36 43
   $ttl = ($rec['ttl'] ? $rec['ttl'] : 3600);
37
-  $output .= "<tr><td><em>{$rec['fqdn']}</td><td>".strtoupper($rec['type'])."</td><td>$data</td><td>{$ttl} Sek.</td><td>&#160;</td></tr>\n";
44
+  output("<tr><td><em>{$rec['fqdn']}</td><td>".strtoupper($rec['type'])."</td><td>$data</td><td>{$ttl} Sek.</td><td>&#160;</td></tr>\n");
38 45
   
39 46
 }
40 47
 
41 48
 
42
-$output .= '</table>';
49
+output('</table>');
43 50
 
44 51
 if ($domain->autodns)
45
-  $output .= '<p style="font-size: 80%;"><em>Kursive Hostnames bezeichnen automatisch erzeugte Records. Diese können nicht geändert werden.</em></p>';
52
+  output('<p style="font-size: 80%;"><em>Kursive Hostnames bezeichnen automatisch erzeugte Records. Diese können nicht geändert werden.</em></p>');
46 53
 else
47
-  $output .= '<p style="font-size: 80%;"><em>Für diese Domain wurde die Erzeugung automatischer Records deaktiviert.</em></p>';
48
-
49
-
50
-$output .= html_form('dns_record_new', 'dns_record_edit', 'id=new&dom='.$domain->id, 
51
-'<h4>Neuen DNS-Record anlegen</h4>
52
-<p>
53
-<label for="type">Typ:</label>&#160;'.html_select('type', array('a' => 'A', 'aaaa' => 'AAAA', 'mx' => 'MX', 'ns' => 'NS', 'spf' => 'SPF', 'txt' => 'TXT', 'cname' => 'CNAME', 'ptr' => 'PTR', 'srv' => 'SRV', 'raw' => 'RAW'), 'a').'
54
-&#160;&#160;&#160;<input type="submit" value="Anlegen" />
55
-</p>');
54
+  output('<p style="font-size: 80%;"><em>Für diese Domain wurde die Erzeugung automatischer Records deaktiviert.</em></p>');
55
+
56
+
57
+output('<h4>Neuen DNS-Record anlegen</h4>
58
+<p>Je nach dem, welchen Eintrags-Typ Sie anlegen möchten, werden im nächsten Schritt unterschiedliche Daten abgefragt. Bitte klicken Sie auf den Eintrags-Typ, den Sie anlegen möchten. Momentan werden noch nicht alle Eintrags-Typen über dieses System bereitgestellt. Hier nicht aufgeführte Eintragsarten können Sie beim Support beantragen.</p>
59
+
60
+<ul>
61
+<li>'.internal_link('dns_record_edit', 'DynDNS (Hostname für einen DynDNS-Account setzen))', 'id=new&type=dyndns&domain='.$domain->id).'</li>
62
+<li>'.internal_link('dns_record_edit', 'A (normaler Hostname/normale Subdomain)', 'id=new&type=a&domain='.$domain->id).'</li>
63
+<li>'.internal_link('dns_record_edit', 'MX (Posteingangsserver)', 'id=new&type=mx&domain='.$domain->id).'</li>
64
+</ul>
65
+<ul>
66
+<li>'.internal_link('dns_record_edit', 'AAAA (IPv6-Adresse)', 'id=new&type=aaaa&domain='.$domain->id).'</li>
67
+<li>'.internal_link('dns_record_edit', 'CNAME (Aliasnamen)', 'id=new&type=cname&domain='.$domain->id).'</li>
68
+</ul>
69
+');
56 70
 
57 71
 ?>
... ...
@@ -14,51 +14,93 @@ $section = 'dns_dns';
14 14
 $data = array();
15 15
 $type = NULL;
16 16
 
17
+$dyndns = false;
18
+$dyndns_accounts = array();
19
+foreach (get_dyndns_accounts() AS $t)
20
+{
21
+  $dyndns_accounts[$t['id']] = $t['handle'];
22
+}
23
+
24
+if ($_REQUEST['type'] == "dyndns")
25
+{
26
+  $_REQUEST['type'] = 'a';
27
+  $dyndns = true;
28
+}
29
+
17 30
 $new = false;
18 31
 if ($_REQUEST['id'] == 'new')
19 32
 {
20 33
   $new = true;
21 34
   $data = blank_dns_record($_REQUEST['type']);
22
-  $domain = new Domain((int) $_REQUEST['dom']);
23
-  $type = $_POST['type'];
35
+  $domain = new Domain((int) $_REQUEST['domain']);
36
+  $type = $_REQUEST['type'];
24 37
   if (! in_array($type, $valid_record_types))
25 38
     system_failure('Ungültiger Record-Typ!');
26 39
   $data['domain'] = $domain->id;
40
+  if ($dyndns)
41
+    $data['ttl'] = 120;
27 42
 }
28 43
 
29 44
 if (! $new)
30 45
 {
31 46
   $data = get_dns_record($_REQUEST['id']);
32 47
   $type = $data['type'];
48
+  $dyndns = isset($data['dyndns']);
49
+  $domain = new Domain((int) $data['domain']);
33 50
   if (! in_array($type, $valid_record_types))
34 51
     system_failure('Ungültiger Record-Typ!');
35 52
 }
36 53
 
37 54
 
38
-
39
-
40 55
 if ($new)
41
-  $output .= '<h3>DNS-Record erstellen</h3>';
56
+  output('<h3>DNS-Record erstellen</h3>');
42 57
 else
43
-  $output .= '<h3>DNS-Record bearbeiten</h3>';
58
+  output('<h3>DNS-Record bearbeiten</h3>');
44 59
 
45
-
46
-$action = 'create';
47
-if (! $new)
48
-  $action = 'edit&id='.(int)$_REQUEST['id'];
60
+output('<p>Record-Typ: '.strtoupper($type).'</p>');
49 61
 
50 62
 $submit = 'Speichern';
51 63
 if ($new) 
52 64
   $submit = 'Anlegen';
53 65
 
54
-$domain = new Domain( (int) $data['domain'] );
66
+$form = '';
67
+
68
+if (! $dyndns && ($type == 'a' || $type == 'aaaa'))
69
+{
70
+  $form .= '
71
+<tr><td><label for="ip">IP-Adresse:</label></td><td><input type="text" name="ip" id="ip" value="'.$data['ip'].'" /></td></tr>
72
+';
73
+}
74
+
75
+if ($type == 'ptr' || $type == 'cname')
76
+{
77
+  $form .= '
78
+<tr><td><label for="data">Ziel:</label></td><td><input type="text" name="data" id="data" value="'.$data['data'].'" /></td></tr>
79
+';
80
+}
81
+
82
+if ($dyndns)
83
+{
84
+  $form .= '
85
+<tr><td><label for="dyndns">DynDNS-Zugang:</label></td><td>'.html_select('dyndns', $dyndns_accounts, $data['dyndns']).'</td></tr>
86
+';
87
+}
88
+
89
+if ($type == 'mx')
90
+{
91
+  $form .= '
92
+<tr><td><label for="spec">Priorität:</label></td><td><input type="text" name="spec" id="spec" value="'.$data['spec'].'" /></td></tr>
93
+<tr><td><label for="data">Posteingangsserver:</label></td><td><input type="text" name="data" id="data" value="'.$data['data'].'" /></td></tr>
94
+';
95
+}
55 96
 
56 97
 
57
-$output .= html_form('dns_record_edit', 'save', 'type=dns&action='.$action, 
58
-'<p>
59
-<label for="hostname">Hostname:</label>&#160;<input type="text" name="hostname" id="hostname" value="'.$data['hostname'].'" />&#160;<strong>.'.$domain->fqdn.'</strong><p>
60
-<p>Typ: 
98
+output(html_form('dns_record_edit', 'dns_record_save', "type={$type}&domain={$domain->id}&id={$_REQUEST['id']}", '<table>
99
+<tr><td><label for="hostname">Hostname:</label></td><td><input type="text" name="hostname" id="hostname" value="'.$data['hostname'].'" />&#160;<strong>.'.$domain->fqdn.'</strong></td></tr>
100
+'.$form.'
101
+<tr><td><label for="ttl">TTL:</label></td><td><input type="text" name="ttl" id="ttl" value="'.$data['ttl'].'" /></td></tr>
102
+</table>
61 103
 <p><input type="submit" value="'.$submit.'" /></p>
62
-</p>');
104
+</p>'));
63 105
 
64 106
 ?>
... ...
@@ -0,0 +1,72 @@
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_role(ROLE_CUSTOMER);
9
+
10
+require_once('dnsinclude.php');
11
+
12
+$section = 'dns_dns';
13
+
14
+
15
+$record = NULL;
16
+
17
+$id = NULL;
18
+if ($_REQUEST['id'] == 'new')
19
+{
20
+  $record = blank_dns_record($_REQUEST['type']);
21
+}
22
+else
23
+{
24
+  $id = (int) $_REQUEST['id'];
25
+  $record = get_dns_record($id);
26
+}
27
+
28
+
29
+if ($_GET['action'] == 'delete') {
30
+  $sure = user_is_sure();
31
+  if ($sure === NULL)
32
+  {
33
+    $domain = new Domain((int) $record['domain']);
34
+    $fqdn = $domain->fqdn;
35
+    if ($record['hostname'])
36
+    {
37
+      $fqdn = $record['hostname'].'.'.$fqdn;
38
+    }
39
+    are_you_sure("action=delete&id={$id}", "Möchten Sie den ".strtoupper($record['type'])."-Record für ".$fqdn." wirklich löschen?");
40
+  }
41
+  elseif ($sure === true)
42
+  {
43
+    delete_dns_record($id);
44
+    if (! $debugmode)
45
+      header("Location: dns_domain?dom=".$record['domain']);
46
+  }
47
+  elseif ($sure === false)
48
+  {
49
+    if (! $debugmode)
50
+      header("Location: dns_domain?dom=".$record['domain']);
51
+  }
52
+}
53
+else
54
+{
55
+  // Sicherheitsprüfungen passieren im Backend
56
+  
57
+  $record['hostname'] = $_REQUEST['hostname'];
58
+  $record['domain'] = (int) $_REQUEST['domain'];
59
+  $record['ip'] = $_REQUEST['ip'];
60
+  $record['data'] = $_REQUEST['data'];
61
+  $record['dyndns'] = (int) $_REQUEST['dyndns'];
62
+  $record['spec'] = (int) $_REQUEST['spec'];
63
+  $record['ttl'] = (int) $_REQUEST['ttl'];
64
+  
65
+  save_dns_record($id, $record);
66
+
67
+  if (!$debugmode)
68
+    header('Location: dns_domain?dom='.$record['domain']);
69
+}
70
+
71
+
72
+
... ...
@@ -191,7 +191,7 @@ function save_dns_record($id, $record)
191 191
       break;
192 192
     case 'aaaa':
193 193
       $record['dyndns'] = '';
194
-      verify_input_ipv4($record['ip']);
194
+      verify_input_ipv6($record['ip']);
195 195
       $record['data'] = '';
196 196
       $record['spec'] = '';
197 197
       break;
... ...
@@ -205,10 +205,8 @@ function save_dns_record($id, $record)
205 205
         system_failure('MX hostname missing');
206 206
       $record['ip'] = '';
207 207
       break;
208
-    case 'spf':
209
-    case 'txt':
210
-      system_failure('not implemented yet');
211 208
     case 'cname':
209
+    case 'ptr':
212 210
       $record['dyndns'] = '';
213 211
       $record['spec'] = '';
214 212
       $record['ip'] = '';
... ...
@@ -217,7 +215,8 @@ function save_dns_record($id, $record)
217 215
         system_failure('MX hostname missing');
218 216
       break;
219 217
 
220
-    case 'ptr':
218
+    case 'spf':
219
+    case 'txt':
221 220
     case 'srv':
222 221
       system_failure('not implemented yet');
223 222
     default:
... ...
@@ -225,22 +224,25 @@ function save_dns_record($id, $record)
225 224
   }
226 225
   $id = (int) $id;
227 226
   $record['hostname'] = maybe_null($record['hostname']);
228
-  $record['ttl'] = ($recory['ttl'] == 0 ? 'NULL' : (int) $record['ttl']);
227
+  $record['ttl'] = ($record['ttl'] == 0 ? 'NULL' : (int) $record['ttl']);
229 228
   $record['ip'] = maybe_null($record['ip']);
230 229
   $record['data'] = maybe_null($record['data']);
231 230
   $record['spec'] = maybe_null($record['spec']);
232 231
   $record['dyndns'] = maybe_null($record['dyndns']);
233 232
   if ($id)
234
-    db_query("UPDATE dns.custom_records SET hostname={$record['hostname']}, domain={$dom->id}, type={$record['type']}, ttl={$record['ttl']}, ip={$record['ip']}, dyndns={$record['dyndns']}, data={$record['data']}, spec={$record['spec']} WHERE id={$id} LIMIT 1");
233
+    db_query("UPDATE dns.custom_records SET hostname={$record['hostname']}, domain={$dom->id}, type='{$record['type']}', ttl={$record['ttl']}, ip={$record['ip']}, dyndns={$record['dyndns']}, data={$record['data']}, spec={$record['spec']} WHERE id={$id} LIMIT 1");
235 234
   else
236
-    db_query("INSERT INTO dns.custom_records (hostname, domain, type, ttl, ip, dyndns, data, spec) VALUES ({$record['hostname']}, {$dom->id}, {$record['type']}, {$record['ttl']}, {$record['ip']}, {$record['dyndns']}, {$record['data']}, {$record['spec']})");
235
+    db_query("INSERT INTO dns.custom_records (hostname, domain, type, ttl, ip, dyndns, data, spec) VALUES ({$record['hostname']}, {$dom->id}, '{$record['type']}', {$record['ttl']}, {$record['ip']}, {$record['dyndns']}, {$record['data']}, {$record['spec']})");
237 236
 
238 237
 }
239 238
 
240 239
 
241 240
 function delete_dns_record($id)
242 241
 {
243
- // ...
242
+  $id = (int) $id;
243
+  // Diese Funktion prüft, ob der Eintrag einer eigenen Domain gehört
244
+  $record = get_dns_record($id);
245
+  db_query("DELETE FROM dns.custom_records WHERE id={$id} LIMIT 1");
244 246
 }
245 247
 
246 248
 ?>
247 249