#!/usr/bin/perl -w
use DBI;
use strict;
my $db_user = "stg";
my $db_pass = "";
my $db_host = "localhost";
my $db_name = "stargazer";
my $dhcp_conf = "/usr/local/etc/dhcpd.conf"; # where dhcp.conf ?
my $dhcp_rc = "/usr/local/etc/rc.d/isc-dhcpd"; # where dhcp init script?
my $dsn = "DBI:mysql:$db_name:$db_host";
my $conf = "default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style interim;
log-facility local7;
subnet 10.10.2.0 netmask 255.255.255.0 {
range 10.10.2.10 10.10.2.100;
option routers 10.10.2.1;
option domain-name-servers 10.10.1.1;
}
subnet 10.10.3.0 netmask 255.255.255.0 {
range 10.10.3.1 10.10.3.100;
option routers 10.10.3.1;
option domain-name-servers 10.10.1.1;
}
subnet 10.10.4.0 netmask 255.255.255.0 {
range 10.10.4.1 10.10.4.100;
option routers 10.10.4.1;
option domain-name-servers 10.10.1.1;
}
subnet 10.10.5.0 netmask 255.255.255.0 {
range 10.10.5.1 10.10.5.100;
option routers 10.10.6.1;
option domain-name-servers 10.10.1.1;
}
subnet 10.10.7.0 netmask 255.255.255.0 {
range 10.10.7.1 10.10.7.100;
option routers 10.10.7.1;
option domain-name-servers 10.10.1.1;
}
";
my $dbh = DBI->connect($dsn, $db_user, $db_pass) || die "Could not connect to database: $DBI::errstr";
my $sql = "SELECT IP, Userdata0, Userdata1, login FROM users";
my $sth = $dbh->prepare($sql);
$sth->execute();
my @row;
while ( @row = $sth->fetchrow_array() ) {
if ( $row[1] ne "" && $row[2] ne "" ) {
$conf = join "", $conf, "
host $row[3].local {
hardware ethernet $row[1];
fixed-address $row[0];
option routers $row[2];
}
" ;
}
}
$sth->finish();
$dbh->disconnect();
open(DHCP, "> $dhcp_conf");
print DHCP $conf;
close DHCP;
my @args = ("$dhcp_rc", "restart");
system(@args) == 0 or die "system @args failed: $?";