150479Speter#! @PATH_PERL@ -w
26059Samurai
36059Samuraidie "perl5 needed\n" unless ($] > 5);
446686Sbrian
546686Sbrianuse Getopt::Std;
664802Sbrian
746686Sbrian$opt_f = 0;			# 'Hard' failure if 'state' is unknown
846686Sbrian$opt_n = 1000;			# How many tries before we give up? (10 min+)
947061Sbrian$opt_s = 6;			# Seconds to sleep between tries (6s = 10/min)
1036288Sbrian$opt_v = 0;			# Be verbose?
1143313Sbrian
1243313Sbriangetopts('fn:s:v');
1364802Sbrian
1464802Sbrian$cmd = 'ntpq -c "rv 0 state"';
1564802Sbrian
1650438Sjkh$| = 1;				# Autoflush output.
1740530Sbrian
1864802Sbrianprint "Waiting for ntpd to synchronize...  " if ($opt_v);
1929083Sbrianfor ($i = 0; $i < $opt_n; ++$i) {
2036285Sbrian    open(Q, $cmd." 2>&1 |") || die "Can't start ntpq: $!";
2136285Sbrian    while(<Q>) {
2232860Sbrian      if (/^state=4/) {
2332860Sbrian	print "\bOK!\n" if ($opt_v);
2432860Sbrian	exit 0;
2532860Sbrian      }
2651526Sbrian
2751526Sbrian      if (/request variable was unknown/) {
2851526Sbrian	print "\bCan't tell!\nPerhaps you are running an old version of ntpd.\n" if ($opt_v);
2951526Sbrian	exit $opt_f;
3058071Sbrian      }
3158071Sbrian
3258071Sbrian      if (/Connection refused/) {
3358071Sbrian	print "\bntpd is not running!\n" if ($opt_v);
3450264Sbrian	exit 1;
3550191Sbrian      }
3631343Sbrian    }
3737191Sbrian    close(Q);
3851075Sbrian    print "\b".substr("*+:.", $i % 4, 1) if ($opt_v);
3937191Sbrian    sleep($opt_s);
4037191Sbrian}
4131343Sbrianprint "\bNo!\nntpd did not synchronize.\n" if ($opt_v);
4237191Sbrianexit 1;
4331343Sbrian