report error without nmap output
[pxelator] / lib / PXElator / client.pm
index 4a51714..13ca3fd 100644 (file)
@@ -50,7 +50,8 @@ sub conf {
        }
 
        my $path = ip_path $ip;
-       mkdir $path unless -d $path;
+       mkdir $path unless -e $path;
+       warn "WARNING: $path not directory" unless -d $path;
        $path .= '/' . $name;
 
        if ( defined $value ) {
@@ -62,8 +63,11 @@ sub conf {
                write_file $path, $default;
                warn "default $path = $default";
                $value = $default;
+       } elsif ( -l $path ) {
+               $value = readlink $path;
        } elsif ( -f $path ) {
                $value = read_file $path;
+               chomp $value;
        } else {
                warn "# $name missing $path\n" if $debug;
        }
@@ -74,10 +78,14 @@ sub all_conf {
        my $ip = shift;
        my $path = ip_path $ip || return;
        my $conf;
-       foreach my $file ( glob("$path/*") ) {
+       foreach my $file ( glob("$path/*"), glob("$path/*/*") ) {
                my $name = $file;
-               $name =~ s{^.+/([^/]+)$}{$1};
-               $conf->{ $name } = read_file $file;
+               $name =~ s{^$path/+}{} || die "can't remove $path from $name";
+               next if -d $file;
+               $conf->{ $name } =
+                       -l $file ? readlink  $file :
+                       -f $file ? read_file $file :
+                       '?';
        }
        return $conf;
 }
@@ -173,9 +181,8 @@ sub all_ips {
 
 sub remove {
        my $ip = shift;
-       unlink $_ foreach grep { -e $_ } ( glob "$server::conf/ip/$ip/*" );
        if ( my $mac = mac_from_ip $ip ) {
-               unlink "$server::conf/mac/$mac";
+               unlink mac_path($mac);
        }
        rmtree "$server::conf/ip/$ip";
 }
@@ -202,6 +209,7 @@ sub rebuild_mac_links {
                my $mac = ip_path $ip, 'mac';
                if ( -e $mac ) {
                        $mac = read_file $mac;
+                       chomp $mac;
                        save_ip_mac( $ip, $mac );
                        warn "## $ip $mac\n";
                }