freebsd-dev/contrib/ntp/scripts/ntp-wait/ntp-wait.in
Xin LI e27abb6689 MFV r301238:
ntp 4.2.8p8.

Security:	CVE-2016-4957, CVE-2016-4953, CVE-2016-4954
Security:	CVE-2016-4955, CVE-2016-4956
Security:	FreeBSD-SA-16:24.ntp
With hat:	so
2016-06-03 08:00:22 +00:00

67 lines
1.5 KiB
Plaintext

#! @PATH_PERL@
package ntp_wait;
use 5.006_000;
use strict;
use warnings;
use lib "@PERLLIBDIR@";
use NTP::Util qw(ntp_read_vars);
exit run(@ARGV) unless caller;
sub run {
my $opts;
if (!processOptions(\@_, $opts)) {
usage(1);
};
my $tries = $opts->{tries}; # How many tries before we give up? (10 min+)
my $sleep = $opts->{sleep}; # Seconds to sleep between tries (6s = 10/min)
my $verbose = $opts->{verbose}; # Be verbose?
# Autoflush stdout
$| = 1;
print "Waiting for ntpd to synchronize... " if $verbose;
for my $i (1 .. $tries) {
my $info = ntp_read_vars(0, []);
if (!defined $info) {
print "\bntpd is not running!\n" if $verbose;
return 1;
}
if (!exists $info->{status_line}{leap}) {
print "\bLeap status not available\n";
return 1;
}
my $leap = $info->{status_line}{leap};
my $sync = $info->{status_line}{sync};
if ($leap =~ /(sync|leap)_alarm/) {
print "\b".(substr "*+:.", $i % 4, 1) if $verbose;
sleep $sleep if $i < $tries;
next;
}
if ($leap =~ /leap_(none|((add|del)_sec))/) {
# We could check $sync here to make sure we like the source...
print "\bOK!\n" if $verbose;
return 0;
}
print "\bUnexpected 'leap' status <$leap>\n";
return 1;
}
print "\bNo!\nntpd did not synchronize.\n" if $verbose;
return 1;
}
@ntp_wait_opts@
1;
__END__