Browse code

Warne, wenn bei den DNS-Servern etwas nicht stimmt

Bernd Wurst authored on25/03/2014 09:50:08
Showing3 changed files
... ...
@@ -15,6 +15,7 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r
15 15
 */
16 16
 
17 17
 require_once('inc/base.php');
18
+require_once('inc/icons.php');
18 19
 require_once('inc/security.php');
19 20
 
20 21
 require_role(ROLE_SYSTEMUSER);
... ...
@@ -30,18 +31,47 @@ output('<p>Hier sehen Sie eine Übersicht über die angelegten DNS-records zu Ih
30 31
 //$output .= '<table><tr><th>Hostname</th><th>Typ</th><th>IP-Adresse/Inhalt</th><th>TTL</th><th>&#160;</th></tr>
31 32
 //';
32 33
 
33
-$output .=  '<table><tr><th>Domainname</th><th>Manuelle records</th><th>Automatische records</th></tr>';
34
+$output .=  '<table><tr><th>Domainname</th><th>Manuelle records</th><th>Automatische records</th><th>Status</th></tr>';
34 35
 
35 36
 DEBUG($domains);
36 37
 
38
+$external_domains = False;
39
+$unused_dns = False;
37 40
 foreach($domains AS $dom)
38 41
 {
39
-  if ($dom->dns == 0)
42
+  if ($dom->provider != 'terions') {
43
+    $external_domains = True;
44
+  }
45
+  $style="";
46
+  if ($dom->dns == 0) {
47
+    if (strstr($dom->domainname, '.')) {
48
+      $output .= '<tr style="color: #999;"><td>'.$dom->fqdn.'</td><td>---</td><td>---</td><td>'.icon_disabled('DNS-Server ausgeschaltet').'&nbsp;DNS-Server für Subdomains bitte mit dem Support besprechen</td></tr>';
49
+    } else {
50
+      $output .= '<tr style="color: #999;"><td>'.$dom->fqdn.'</td><td>---</td><td>---</td><td>'.icon_disabled('DNS-Server ausgeschaltet').'&nbsp;'.internal_link('save', icon_add().' Einschalten', "dom={$dom->id}&dns=1").'</td></tr>';
51
+    }
40 52
     continue;
53
+  }
41 54
   $records = get_domain_records($dom->id);
42 55
 
43 56
   $autorec = ($dom->autodns == 1 ? 'Ja' : 'Nein');
44
-  $output .= '<tr><td>'.internal_link('dns_domain', $dom->fqdn, "dom={$dom->id}").'</td><td>'.count($records).'</td><td>'.$autorec.'</td></tr>';
57
+  if ($dom->provider != 'terions' || $dom->billing != 'regular') {
58
+    $state = check_dns($dom->domainname, $dom->tld);
59
+    if ($state !== True) {
60
+      $current = 'Momentaner DNS-Server (u.A.): '.$state;
61
+      if ($state == 'NXDOMAIN') {
62
+        $current = 'Diese Domain ist aktuell nicht registriert.';
63
+      }
64
+      if (substr_compare($state, config('masterdomain'), -strlen(config('masterdomain')), strlen(config('masterdomain'))) === 0) {
65
+        $output .= '<tr><td>'.internal_link('dns_domain', $dom->fqdn, "dom={$dom->id}").'</td><td>'.count($records).'</td><td>'.$autorec.'</td><td>'.icon_enabled('DNS-Server aktiv').icon_warning('Es werden veraltete DNS-Server benutzt').'&nbsp;'.$current.'</td></tr>';
66
+        continue;
67
+      } else {
68
+        $output .= '<tr><td>'.internal_link('dns_domain', $dom->fqdn, "dom={$dom->id}").'</td><td>'.count($records).'</td><td>'.$autorec.'</td><td>'.icon_enabled('DNS-Server aktiv').icon_warning('DNS-Server eingeschaltet aber nicht genutzt').'&nbsp;'.$current.'<br />'.internal_link('save', icon_delete().' Abschalten', "dom={$dom->id}&dns=0").'</td></tr>';
69
+        $unused_dns = True;
70
+        continue;
71
+      }
72
+    }
73
+  }
74
+  $output .= '<tr><td>'.internal_link('dns_domain', $dom->fqdn, "dom={$dom->id}").'</td><td>'.count($records).'</td><td>'.$autorec.'</td><td>'.icon_enabled('DNS-Server aktiv').'</td></tr>';
45 75
 
46 76
 /*  if ($records) 
47 77
   {
... ...
@@ -62,4 +92,23 @@ foreach($domains AS $dom)
62 92
 
63 93
 $output .= '</table><br />';
64 94
 
95
+if ($external_domains) {
96
+  $own_ns = own_ns();
97
+  asort($own_ns);
98
+  $output.='<h4>Hinweis zu extern registrierten Domains</h4>
99
+<p>Wenn Sie Ihre Domains bei einem anderen Provider registrieren und dennoch unsere DNS-Server nutzen möchten, dann stellen Sie bitte sicher, dass der DNS-Server oben eingeschaltet ist und stellen Sie dann folgende DNS-Server ein:<p>
100
+<ul>';
101
+  foreach ($own_ns as $ns) {
102
+    $output.='<li>'.$ns.'</li>';
103
+  }
104
+  $output.='</ul>';
105
+}
106
+if ($unused_dns) {
107
+  $output.='<h4>Wichtiger Hinweis</h4>
108
+<p>In der obigen Liste befinden sich Domains, bei denen unser DNS-Server aktiviert ist aber die Domain momentan auf einen anderen DNS-Server eingerichtet ist. Dies ist normal bei bevorstehenden Domain-Transfers zu uns, sollte aber nicht dauerhaft so bleiben.<p>
109
+<p>Wenn Sie weiterhin einen externen DNS-Server benutzen möchten, dann schalten Sie bitte unseren DNS-Server für diese Domain aus, damit es nicht zu Fehlfunktionen kommt.</p>
110
+<p>Im Zweifel sprechen Sie bitte unseren Support an.</p>';
111
+}
112
+
113
+
65 114
 ?>
... ...
@@ -338,4 +338,77 @@ function domain_is_maildomain($domain)
338 338
 }
339 339
 
340 340
 
341
-?>
341
+$own_ns = array();
342
+
343
+function own_ns() {
344
+  global $own_ns;
345
+
346
+  if (count($own_ns) < 1) {
347
+    $auth = dns_get_record(config('masterdomain'), DNS_NS);
348
+    foreach ($auth as $ns) {
349
+      $own_ns[] = $ns['target'];   
350
+    }
351
+  }
352
+
353
+  return $own_ns;  
354
+}
355
+
356
+
357
+$tld_ns = array();
358
+
359
+function check_dns($domainname, $tld) {
360
+  global $tld_ns;
361
+  $domain=idn_to_ascii($domainname.".".$tld);
362
+
363
+  if (! isset($tld_ns[$tld])) {
364
+    $resp = shell_exec('dig @a.root-servers.net. +noall +authority -t ns '.$tld.'.');
365
+    $line = explode("\n", $resp, 2)[0];
366
+    $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+)$/", '\1', $line);
367
+    $tld_ns[$tld] = $NS;
368
+  }
369
+  
370
+  $resp = shell_exec('dig @'.$tld_ns[$tld].' +noall +authority -t ns '.$domain.'.');
371
+  $line = explode("\n", $resp, 2)[0];
372
+  if (preg_match('/^.*\\sIN\\s+NS\\s+/', $line) === 0) {
373
+    return "NXDOMAIN";
374
+  }
375
+  $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+).$/", '\1', $line);
376
+  
377
+  $own_ns = own_ns();
378
+
379
+  if (in_array($NS, $own_ns)) {
380
+    return True;
381
+  }
382
+  return $NS;
383
+}
384
+
385
+function remove_from_dns($dom) {
386
+  $domains = get_domain_list($_SESSION['customerinfo']['customerno'], $_SESSION['userinfo']['uid']);
387
+  $current = NULL;
388
+  foreach ($domains as $d) {
389
+    if ($d->id == $dom && $d->dns == 1) {
390
+      $current = $d;
391
+      break;
392
+    }
393
+  }
394
+  if (! $current) {
395
+    system_failure("Domain nicht gefunden!");
396
+  }
397
+  db_query("UPDATE kundendaten.domains SET dns=0 WHERE id=?", array($current->id));
398
+}
399
+
400
+function add_to_dns($dom) {
401
+  $domains = get_domain_list($_SESSION['customerinfo']['customerno'], $_SESSION['userinfo']['uid']);
402
+  $current = NULL;
403
+  foreach ($domains as $d) {
404
+    if ($d->id == $dom && $d->dns == 0) {
405
+      $current = $d;
406
+      break;
407
+    }
408
+  }
409
+  if (! $current) {
410
+    system_failure("Domain nicht gefunden!");
411
+  }
412
+  db_query("UPDATE kundendaten.domains SET dns=1, autodns=1 WHERE id=?", array($current->id));
413
+}
414
+
... ...
@@ -30,7 +30,7 @@ if (isset($_REQUEST['id']))
30 30
   $id = (int) $_REQUEST['id'];
31 31
 
32 32
 
33
-if ($_GET['type'] == 'dyndns') {
33
+if (isset($_GET['type']) && $_GET['type'] == 'dyndns') {
34 34
   if ($_GET['action'] == 'delete') {
35 35
     $sure = user_is_sure();
36 36
     if ($sure === NULL)
... ...
@@ -64,5 +64,49 @@ if ($_GET['type'] == 'dyndns') {
64 64
 }
65 65
 
66 66
 
67
+if (isset($_GET['dns']) && isset($_GET['dom'])) {
68
+  $section = 'dns_dns';
69
+  $domains = get_domain_list($_SESSION['customerinfo']['customerno'], $_SESSION['userinfo']['uid']);
70
+  $dom = NULL;
71
+  foreach ($domains as $d) {
72
+    if ($d->id == $_GET['dom']) {
73
+      $dom = $d;
74
+      break;
75
+    }
76
+  }
77
+  if (! $dom) {
78
+    system_failure("Domain nicht gefunden!");
79
+  }
80
+  if ($_GET['dns'] == 0) {
81
+    if ($dom->dns == 1) {
82
+      $sure = user_is_sure();
83
+      if ($sure === NULL)
84
+      {
85
+        are_you_sure("dom={$dom->id}&dns=0", "Möchten Sie die Domain {$dom->fqdn} aus dem DNS-Server entfernen?");
86
+      }
87
+      elseif ($sure === true)
88
+      {
89
+        remove_from_dns($dom->id);
90
+        redirect('dns');
91
+      }
92
+      elseif ($sure === false)
93
+      {
94
+        redirect('dns');
95
+      }      
96
+    } else {
97
+      system_failure("Diese Domain ist nicht im DNS-Server eingetragen.");
98
+    }
99
+  }
100
+  if ($_GET['dns'] == 1) {
101
+    if ($dom->dns == 0) {
102
+      add_to_dns($dom->id);
103
+      redirect('dns');
104
+    } else {
105
+      system_failure("Diese Domain ist bereits im DNS-Server eingetragen.");
106
+    }
107
+  }
108
+  
109
+}
110
+
67 111
 
68 112