diff options
Diffstat (limited to 'roles/install_dhcp/files')
-rw-r--r-- | roles/install_dhcp/files/fastd-services-api.php | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/roles/install_dhcp/files/fastd-services-api.php b/roles/install_dhcp/files/fastd-services-api.php new file mode 100644 index 0000000..4eedd73 --- /dev/null +++ b/roles/install_dhcp/files/fastd-services-api.php @@ -0,0 +1,44 @@ +#!/usr/bin/php -f +<?php +// add include "/etc/dhcpd.hosts.conf"; to your dhcp config +$url = 'https://www.freifunk-myk.de/services/ips'; +$out = '/etc/dhcpd.hosts.conf'; + +if(!is_writable($out)) die('Output file perms'); + +if( ($data = file_get_contents($url)) === FALSE ) die('Error getting ips'); +$data = unserialize($data); + +$active=array(); + +foreach($data as $host) { + if(!preg_match('/^[a-f0-9]{12}$/', $host['mac'])) { + trigger_error('Host mit falscher MAC?!', E_USER_WARNING); + }elseif(!preg_match('/^10\.222\.\(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\)\.\(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\)$/', $host['staticip'])) { + trigger_error('Host mit falscher IP?!'.$host['mac'], E_USER_WARNING); + }else{ + $active[] = $host; + } +} +if(count($active) < 5) die('Less than 5 hosts? Database broken?'); +$oldhash = hash_file("sha256", $out); +$fp=fopen($out, 'w'); +foreach($active as $host) { + fwrite($fp, "host host".$host['mac']." {"."\n"); + fwrite($fp, "\thardware ethernet ". + substr($host['mac'],0,2).":". + substr($host['mac'],2,2).":". + substr($host['mac'],4,2).":". + substr($host['mac'],6,2).":". + substr($host['mac'],8,2).":". + substr($host['mac'],10,2). + ';'."\n"); + fwrite($fp, "\tfixed-address ".$host['staticip'].';'."\n"); + fwrite($fp, "}\n\n"); +} +fclose($fp); +$newhash = hash_file("sha256", $out); +if($oldhash != $newhash) { + exec('systemctl restart dhcpd4.service'); +} +?> |