#!/usr/bin/perl

# Einen DaytimeServer anzapfen und die Systemuhr stellen
$hostname = "216.136.10.198";

# aus einem gegebenen Monatsnamen (englisch) die Nr. des Monats herausgeben: 0 bei Fehler
@mon = ( "", "Jan", "Feb", "Mar", "Avr", "Mai", 
  "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );

sub month {
  local ($p) = @_;
  for ($i = 1; $i < 13; $i++) {
    if ($p =~ /^$mon[$i]/) {
      return $i;
    }
  }
  return 0;
}


# Ab hier gehts los
use IO::Socket;
$client_sock = new IO::Socket::INET (
  PeerAddr => $hostname,
  PeerPort => 13,
  Proto => 'tcp')|| die "Kein Socket... $!\n";

$server_time = <$client_sock>;
$client_sock->close();

# Zeitstring kommt in der Form "Monday, November 27, 2001 05:56:37-MET" also splitten
@z = split(/ /,$server_time);
print "Genaue Uhrzeit: $server_time\n";

# Die Uhrzeit an das System übergeben
$t = substr($z[4],0,8);     # die Uhrzeit hh:mm:ss extrahieren
$m = month($z[1]);          # die Nr. des Monats
$m = "0" . $m if ($m < 10); # mit führender Null
chop($z[2]);                # ohne Komma
$z[2] = "0" . $z[2] if ($z[2] < 10); # mit führender Null
$y = substr($z[3],2,2);     # nur die letzten beiden Ziffern der Jahreszahl
`sudo /sbin/hwclock --set --date="$m/$z[2]/$y $t"`;
if(!$?){
  print "Systemzeit richtig gestellt!\n";
}else{ print "Systemzeit konnte nicht gestellt werden\n"; }
                                