--- lib/PXElator/httpd.pm 2009/08/28 22:29:08 330 +++ lib/PXElator/httpd.pm 2009/08/30 15:22:41 376 @@ -56,6 +56,8 @@ use wireshark; use syslogd; use nmap; +use ping; +use wol; use CouchDB; @@ -224,38 +226,40 @@ if ( ! $ip ) { my $peer_ip = $client->peerhost; - my $netmask = ip::to_int $server::netmask; - my $network = ip::to_int $server::ip & $netmask; - my ( $from, $to ) = ( $network | $server::ip_from, $network | $server::ip_to ); - my $ip_int = ip::to_int $peer_ip; + my $netmask = ip::to_int $server::netmask; + my $network = ip::to_int($server::ip) & $netmask; + my $from_int = $network | $server::ip_from; + my $to_int = $network | $server::ip_to; + my $ip_int = ip::to_int $peer_ip; # show edit for clients in our dhcp range - if ( $ip_int >= ( $network | $server::ip_from ) && $ip_int <= ( $network | $server::ip_to ) ) { + if ( $ip_int >= $from_int && $ip_int <= $to_int ) { $ip = $peer_ip; } } if ( $ip && $ip ne $server::ip ) { - my $hostname = client::conf( $ip, 'hostname' => $param->{hostname} ); + my @editable = ( qw/hostname config homepage/ ); + + client::conf( $ip, $_ => $param->{$_} ) foreach @editable; + + my $conf = client::all_conf( $ip ); + my $config = delete $conf->{config}; + + my $nmap = qq|nmap|; my @table = ( + 'ping' => ping::host($ip) + ? qq|up $nmap| + : qq|down wol $nmap| + , 'ip' => qq|