#!/usr/bin/perl -w

use utf8;
use strict;
use warnings;

BEGIN {
    unshift @INC, ( $ENV{POPHOME} || '@POPHOME@' ) . '/lib'
      unless $ENV{KUNDE_NO_PERLPATH};
}

use Cf qw($ETHERWAKE);
use Dbase::Getopt;
use Dbase::Globals qw(aufzaehlung);
use Dbase::Help qw(:readonly DoSelect DoTime qquote);

my @Args = GetOptions() or die "USAGE: $0 <host>+\n";

my $now = DoTime();

for (@Args) {
    my @hosts;
    for ( '= ' . qquote($_), 'LIKE ' . qquote("$_.%") ) {
        DoSelect { push @hosts, \@_ } <<_;
    	SELECT ipkunde.name, ipkunde.mac
	FROM   ipkunde, kunde
	WHERE  ( ipkunde.ende IS NULL OR ipkunde.ende >= $now )
	   AND ipkunde.kunde = kunde.id
	   AND kunde.name    = 'POP'
	   AND ipkunde.mac IS NOT NULL
	   AND ipkunde.name $_
_
        last if @hosts;
    }

    die
      qq(Zu "$_" wurde kein passender Host mit MAC-Adresse bei POP gefunden.\n)
      unless @hosts;

    die qq(Zu "$_" wurde mehr als ein einschlägiger Host gefunden:\n)
      . aufzaehlung( map $_->[0], @hosts ) . "\n"
      if @hosts > 1;

    my ( $name, $mac ) = @{ shift @hosts };
    $mac =~ s/(..)/$1:/g;
    chop $mac;

    $| = 1;
    print "Wecke $name..." if -t STDOUT;
    system "$ETHERWAKE $mac" and die "Fehler $?";
    print " OK\n" if -t STDOUT;
}

__END__

=head1 NAME

wakeup - Hosts via Wake-on-LAN aufwecken

=head1 SYNOPSE

    wakeup fany.office.noris.de delle

Sucht für jedes Kommandozeilenargument in der Datenbank nach einem zu
POP gehörenden IP-Adressobjekt, bei dem eine MAC-Adresse eingetragen ist.
Zunächst wird nach Hosts gesucht, die exakt den angegebenen Namen tragen,
dann nach Hosts, deren Name mit der angegebenen Folge an DNS-Labeln
beginnt.
Sofern bei einem Suchschritt mehrere oder bei allen keine passenden Hosts
gefunden wurden, wird eine Fehlermeldung ausgegeben.

=head1 OPTIONEN

=over 4

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 für die noris network AG

=cut

