aboutsummaryrefslogtreecommitdiffstats
path: root/packages/tinydns/tinydns.inc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tinydns/tinydns.inc')
-rw-r--r--packages/tinydns/tinydns.inc114
1 files changed, 75 insertions, 39 deletions
diff --git a/packages/tinydns/tinydns.inc b/packages/tinydns/tinydns.inc
index f71038ea..072ed20a 100644
--- a/packages/tinydns/tinydns.inc
+++ b/packages/tinydns/tinydns.inc
@@ -134,21 +134,23 @@ function tinydns_custom_php_deinstall_command() {
function tinydns_custom_php_changeip_command() {
global $g, $config;
conf_mount_rw();
- if($config['installedpackages']['tinydns']['config'][0]['enableforwarding']){
- $ip = $config['interfaces']['lan']['ipaddr'];
- $ipmask = $config['interfaces']['lan']['subnet'];
- $arr = tinydns_get_ip_subnet_arpa($ip, $ipmask);
- $dnscacheip = $ip;
- $dnsuserip = $arr[0];
- }
+
+ $ip = $config['interfaces']['lan']['ipaddr'];
+ $ipmask = $config['interfaces']['lan']['subnet'];
+ $arr = tinydns_get_ip_subnet_arpa($ip, $ipmask);
+ $dnscacheip = $ip;
+ $dnsuserip = $arr[0];
+
/* For now force $dnsserverip to to 127.0.0.1 when registration of 'local' DNS data is required */
+ $localhost = "127.0.0.1";
if($config['installedpackages']['tinydns']['config'][0]['enableforwarding'])
- $dnsserverip = "127.0.0.1";
- if($config['installedpackages']['tinydns']['config'][0]['ipaddress'])
+ $dnsserverip = $localhost;
+ if($config['installedpackages']['tinydns']['config'][0]['ipaddress'] != $localhost)
$dnsserverip = $config['installedpackages']['tinydns']['config'][0]['ipaddress'];
if($config['installedpackages']['tinydns']['config'][0]['regdhcpstatic'] OR $config['installedpackages']['tinydns']['config'][0]['regdhcp'])
- $dnsserverip = "127.0.0.1";
+ $dnsserverip = $localhost;
$config['installedpackages']['tinydns']['config'][0]['ipaddress'] = $dnsserverip;
+
$updatecron = $config['installedpackages']['tinydns']['config'][0]['updatecron'];
/* setup daemon tools service area */
@@ -163,29 +165,28 @@ function tinydns_custom_php_changeip_command() {
exec("/usr/bin/killall -9 tinydns");
if($config['installedpackages']['tinydns']['config'][0]['enableforwarding']) {
- if(!is_dir("/service/dnscache")) {
+ if(!is_dir("/service/dnscache")) {
exec("/usr/sbin/pw useradd Gdnscache");
exec("/usr/local/bin/dnscache-conf Gdnscache Gdnslog /etc/dnscache {$dnscacheip}");
exec("/bin/ln -s /etc/dnscache /service/");
exec("/bin/cp /var/etc/resolv.conf /var/etc/resolv.conf.original");
exec("/bin/cp /var/etc/resolv.conf /var/etc/resolv.conf.dnscache");
- }
- exec("echo {$dnscacheip} > /etc/dnscache/env/IP");
- exec("echo 1 > /etc/dnscache/env/FORWARDONLY");
- tinydns_dnscache_forwarding_servers();
- exec("touch /etc/dnscache/root/ip/{$dnsuserip}");
- tinydns_create_soa_domain_list($dnsserverip);
- exec("echo domain {$config['system']['domain']} > /var/etc/resolv.conf");
- exec("echo nameserver {$dnscacheip} >> /var/etc/resolv.conf");
+ }
+ exec("echo {$dnscacheip} > /etc/dnscache/env/IP");
+ tinydns_dnscache_forwarding_servers();
+ exec("touch /etc/dnscache/root/ip/{$dnsuserip}");
+ tinydns_create_soa_domain_list($dnsserverip);
+ exec("echo domain {$config['system']['domain']} > /var/etc/resolv.conf");
+ exec("echo nameserver {$dnscacheip} >> /var/etc/resolv.conf");
+ exec("/usr/bin/killall -9 dnscache");
+ } else {
+ if(file_exists("/var/etc/resolv.conf.original"))
+ exec("/bin/cp /var/etc/resolv.conf.original /var/etc/resolv.conf");
+ if(is_dir("/etc/dnscache")) {
+ dnscache_use_root_servers();
exec("/usr/bin/killall -9 dnscache");
- } else {
- if(file_exists("/var/etc/resolv.conf.original"))
- exec("/bin/cp /var/etc/resolv.conf.original /var/etc/resolv.conf");
- if(is_dir("/etc/dnscache")) {
- exec("echo > /etc/dnscache/env/IP");
- exec("/usr/bin/killall -9 dnscache");
- }
}
+ }
conf_mount_ro();
filter_configure();
}
@@ -583,6 +584,8 @@ function tinydns_complete_soa_record($fd, $ip, $ipmask, $nsname, $domain){
}
/* Search for active leases in the dhcpd.leases file and add them to tinyDNS */
+/* Currently it will add duplicate leases that are ignored by thee tinyDNS server*/
+/* Should duplicate leases be purged by DCHCP server in a remove stale records operation? */
function tinydns_add_active_leases($fl,$fd, $leasedomain){
$i = 0;
$lip = strlen("lease") + 1;
@@ -664,11 +667,11 @@ function tinydns_get_dns_record_type($tinydnsrecord){
}
/* This function will be replaced by an auto detect DNS cache servers routine */
-/* At the moment ther is no tagging of DNSroute to a WAN port. It needs to be added */
+/* At the moment there is no tagging of DNSroute to a WAN port. It needs to be added */
function tinydns_dnscache_forwarding_servers() {
$fr = fopen("/var/etc/resolv.conf.dnscache", "r");
if (! $fr) {
- printf("Error: cannot open resolv.conf in tinydns_register_forwarding_servers().\n");
+ printf("Error: cannot open resolv.conf.dnscache in tinydns_register_forwarding_servers().\n");
return 1;
}
@@ -690,6 +693,7 @@ function tinydns_dnscache_forwarding_servers() {
}
}
fclose($fr);
+ exec("echo 1 > /etc/dnscache/env/FORWARDONLY");
if(is_dir("/etc/dnscache/root/servers/"))
exec("rm -R /etc/dnscache/root/servers/");
exec("mkdir /etc/dnscache/root/servers/");
@@ -718,22 +722,23 @@ function tinydns_create_soa_domain_list($dnsserverip){
$col1 = strpos($dnsrecord,":");
$fqdn = substr($dnsrecord,1,$col1-1);
- if(!$fqdn)$fqdn = ".";
- $rtypes = tinydns_get_dns_record_type($dnsrecord);
- if($rtypes[0] == "SOA"){
- $fr = fopen("/etc/dnscache/root/servers/{$fqdn}", "w");
- if (! $fr) {
- printf("Error: cannot open /etc/dnscache/root/servers/{$fqdn} in tinydns_create_soa_domain_list().\n");
- return 1;
+ if($fqdn) {
+ $rtypes = tinydns_get_dns_record_type($dnsrecord);
+ if($rtypes[0] == "SOA"){
+ $fr = fopen("/etc/dnscache/root/servers/{$fqdn}", "w");
+ if (! $fr) {
+ printf("Error: cannot open /etc/dnscache/root/servers/{$fqdn} in tinydns_create_soa_domain_list().\n");
+ return 1;
+ }
+ if($fqdn)fwrite($fr, $dnsserverip);
+ fclose($fr);
}
- if($fqdn)fwrite($fr, $dnsserverip);
- fclose($fr);
- }
+ }
}
}
/* This function is not called */
-/* At the moment ther is no tagging of DNSroute to a WAN port. It needs to be added */
+/* At the moment there is no tagging of DNSroute to a WAN port. It needs to be added */
function tinydns_register_forwarding_servers() {
$fr = fopen("/var/etc/resolv.conf", "r");
if (! $fr) {
@@ -800,4 +805,35 @@ EOD;
return $rootservers;
}
+function dnscache_use_root_servers() {
+$rootservers =<<<EOD
+198.41.0.4
+128.9.0.107
+192.33.4.12
+128.8.10.90
+192.203.230.10
+192.5.5.241
+192.112.36.4
+128.63.2.53
+192.36.148.17
+192.58.128.30
+193.0.14.129
+198.32.64.12
+202.12.27.33
+
+EOD;
+
+ exec("echo 0 > /etc/dnscache/env/FORWARDONLY");
+ if(is_dir("/etc/dnscache/root/servers/"))
+ exec("rm -R /etc/dnscache/root/servers/");
+ exec("mkdir /etc/dnscache/root/servers/");
+ $fr = fopen("/etc/dnscache/root/servers/@", "w");
+ if (! $fr) {
+ printf("Error: cannot write to /etc/dnscache/root/servers/@ in dnscache_use_root_servers().\n");
+ return 1;
+ }
+ fwrite($fr, $rootservers);
+ fclose($fr);
+}
+
?> \ No newline at end of file