]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/time.cgi
Großes Update:
[ipfire-2.x.git] / html / cgi-bin / time.cgi
index 4f4a739f32abd0dee1d2ca93a9c2e1d7fa307d4d..aa96479da47ccf527253c001e7a36693a7b2f56c 100644 (file)
-#!/usr/bin/perl\r
-#\r
-# IPCop CGIs\r
-#\r
-# This file is part of the IPCop Project\r
-# \r
-# This code is distributed under the terms of the GPL\r
-#\r
-# (c) Eric Oberlander June 2002\r
-#\r
-# (c) Darren Critchley June 2003 - added real time clock setting, etc\r
-#\r
-# $Id: time.cgi,v 1.4.2.11 2005/05/28 12:16:18 eoberlander Exp $\r
-#\r
-\r
-use strict;\r
-\r
-# enable only the following on debugging purpose\r
-#use warnings;\r
-#use CGI::Carp 'fatalsToBrowser';\r
-\r
-require 'CONFIG_ROOT/general-functions.pl';\r
-require "${General::swroot}/lang.pl";\r
-require "${General::swroot}/header.pl";\r
-\r
-my %timesettings=();\r
-my $errormessage = '';\r
-\r
-&Header::showhttpheaders();\r
-\r
-$timesettings{'ACTION'} = '';\r
-$timesettings{'VALID'} = '';\r
-\r
-$timesettings{'ENABLENTP'} = 'off';\r
-$timesettings{'NTP_ADDR_1'} = '';\r
-$timesettings{'NTP_ADDR_2'} = '';\r
-$timesettings{'UPDATE_METHOD'} = 'manually';\r
-$timesettings{'UPDATE_VALUE'} = '0';\r
-$timesettings{'UPDATE_PERIOD'} = '';\r
-$timesettings{'ENABLECLNTP'} = 'off';\r
-$timesettings{'SETHOUR'} = '';\r
-$timesettings{'SETMINUTES'} = '';\r
-$timesettings{'SETDAY'} = '';\r
-$timesettings{'SETMONTH'} = '';\r
-$timesettings{'SETYEAR'} = '';\r
-\r
-&Header::getcgihash(\%timesettings);\r
-\r
-if ($timesettings{'ACTION'} eq $Lang::tr{'instant update'})\r
-{\r
-       if ($timesettings{'SETHOUR'} eq '' || $timesettings{'SETHOUR'} < 0 || $timesettings{'SETHOUR'} > 23) {\r
-               $errormessage = $Lang::tr{'invalid time entered'};\r
-               goto UPDTERROR;\r
-       }\r
-       if ($timesettings{'SETMINUTES'} eq '' || $timesettings{'SETMINUTES'} < 0 || $timesettings{'SETMINUTES'} > 59) {\r
-               $errormessage = $Lang::tr{'invalid time entered'};\r
-               goto UPDTERROR;\r
-       }\r
-       if ($timesettings{'SETDAY'} eq '' || $timesettings{'SETDAY'} < 1 || $timesettings{'SETDAY'} > 31) {\r
-               $errormessage = $Lang::tr{'invalid date entered'};\r
-               goto UPDTERROR;\r
-       }\r
-       if ($timesettings{'SETMONTH'} eq '' || $timesettings{'SETMONTH'} < 1 || $timesettings{'SETMONTH'} > 12) {\r
-               $errormessage = $Lang::tr{'invalid date entered'};\r
-               goto UPDTERROR;\r
-       }\r
-       if ($timesettings{'SETYEAR'} eq '' || $timesettings{'SETYEAR'} < 2003 || $timesettings{'SETYEAR'} > 2030) {\r
-               $errormessage = $Lang::tr{'invalid date entered'};\r
-               goto UPDTERROR;\r
-       }\r
-\r
-UPDTERROR:\r
-       if ($errormessage) {\r
-               $timesettings{'VALID'} = 'no'; }\r
-       else {\r
-               $timesettings{'VALID'} = 'yes'; }\r
-\r
-       if ($timesettings{'VALID'} eq 'yes') {\r
-               # we want date in YYYY-MM-DD HH:MM format for date command\r
-               # EAO changed datestring to ISO 6801 format 2003-08-11\r
-               my $datestring = "$timesettings{'SETYEAR'}-$timesettings{'SETMONTH'}-$timesettings{'SETDAY'}";\r
-               my $timestring = "$timesettings{'SETHOUR'}:$timesettings{'SETMINUTES'}";\r
-               # EAO setdate.c also revised for ISO 6801 date format 2003-08-11\r
-               system ('/usr/local/bin/setdate', $datestring, $timestring);\r
-               &General::log("$Lang::tr{'time date manually reset'} $datestring $timestring");\r
-       }\r
-       unless ($errormessage) {\r
-               undef %timesettings;\r
-       }\r
-}\r
-\r
-if ($timesettings{'ACTION'} eq $Lang::tr{'save'})\r
-{ \r
-       if ($timesettings{'ENABLENTP'} eq 'on')\r
-       {\r
-               if ( ! ( &General::validfqdn($timesettings{'NTP_ADDR_1'}) ||\r
-                        &General::validip  ($timesettings{'NTP_ADDR_1'})))\r
-               {\r
-                       $errormessage = $Lang::tr{'invalid primary ntp'};\r
-                       goto ERROR;\r
-               }\r
-       }\r
-       if ($timesettings{'NTP_ADDR_2'})\r
-       {\r
-               if ( ! ( &General::validfqdn($timesettings{'NTP_ADDR_2'}) ||\r
-                        &General::validip  ($timesettings{'NTP_ADDR_2'})))\r
-               {\r
-                       $errormessage = $Lang::tr{'invalid secondary ntp'};\r
-                       goto ERROR;\r
-               }\r
-       }\r
-       if (!($timesettings{'NTP_ADDR_1'}) && $timesettings{'NTP_ADDR_2'})\r
-       {\r
-               $errormessage = $Lang::tr{'cannot specify secondary ntp without specifying primary'};\r
-               goto ERROR;\r
-       }\r
-\r
-       if (!($timesettings{'UPDATE_VALUE'} =~ /^\d+$/) || $timesettings{'UPDATE_VALUE'} <= 0)\r
-       {\r
-               $errormessage = $Lang::tr{'invalid time period'};\r
-               goto ERROR;\r
-       }\r
-\r
-       if ($timesettings{'ENABLENTP'} ne "on" && $timesettings{'ENABLECLNTP'} eq "on")\r
-       {\r
-               $errormessage = $Lang::tr{'ntp must be enabled to have clients'};\r
-               goto ERROR;\r
-       }\r
-       if ($timesettings{'ENABLENTP'} eq "on" && !($timesettings{'NTP_ADDR_1'}) && !($timesettings{'NTP_ADDR_2'}))\r
-       {\r
-               $errormessage = $Lang::tr{'cannot enable ntp without specifying primary'};\r
-               goto ERROR;\r
-       }\r
-ERROR:\r
-       if ($errormessage) {\r
-               $timesettings{'VALID'} = 'no'; }\r
-       else {\r
-               $timesettings{'VALID'} = 'yes'; }\r
-\r
-               &General::writehash("${General::swroot}/time/settings", \%timesettings);\r
-               open(FILE, ">/${General::swroot}/time/settime.conf") or die "Unable to write settime.conf file";\r
-               flock(FILE, 2);\r
-               print FILE "$timesettings{'NTP_ADDR_1'} $timesettings{'NTP_ADDR_2'}\n";\r
-               close FILE;\r
-\r
-               my $updateperiod=0;\r
-\r
-               if  ($timesettings{'UPDATE_PERIOD'} eq 'daily') {\r
-                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 1440; }\r
-               elsif  ($timesettings{'UPDATE_PERIOD'} eq 'weekly') {\r
-                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 10080; }\r
-               elsif  ($timesettings{'UPDATE_PERIOD'} eq 'monthly') {\r
-                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 40320; }\r
-               else {\r
-                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 60; }\r
-\r
-               $updateperiod = $updateperiod - 5;\r
-\r
-               if ($updateperiod <= 5) {\r
-                       $updateperiod = 5; }\r
-\r
-               open(FILE, ">/${General::swroot}/time/counter.conf") or die "Unable to write counter.conf file";\r
-               flock(FILE, 2);\r
-               print FILE "$updateperiod\n";\r
-               close FILE;\r
-\r
-       if ($timesettings{'ENABLENTP'} eq 'on' && $timesettings{'VALID'} eq 'yes')\r
-       {\r
-               system ('/bin/touch', "${General::swroot}/time/enable");\r
-               &General::log($Lang::tr{'ntp syncro enabled'});\r
-               unlink "${General::swroot}/time/counter";\r
-               if ($timesettings{'UPDATE_METHOD'} eq 'periodically')\r
-               {\r
-                       open(FILE, ">/${General::swroot}/time/counter") or die "Unable to write counter file";\r
-                       flock(FILE, 2);\r
-                       print FILE "$updateperiod\n";\r
-                       close FILE;\r
-               }\r
-               if ($timesettings{'ENABLECLNTP'} eq 'on') # DPC added to 1.3.1\r
-               {\r
-                       system ('/bin/touch', "${General::swroot}/time/allowclients"); # DPC added to 1.3.1\r
-                       &General::log($Lang::tr{'ntpd restarted'}); # DPC added to 1.3.1\r
-               } else {\r
-                       unlink "${General::swroot}/time/allowclients";\r
-               }\r
-       \r
-       }\r
-       else\r
-       {\r
-               unlink "${General::swroot}/time/enable";\r
-               unlink "${General::swroot}/time/settimenow";\r
-               unlink "${General::swroot}/time/allowclients"; # DPC added to 1.3.1\r
-               &General::log($Lang::tr{'ntp syncro disabled'})\r
-       }\r
-       if (! $errormessage) {\r
-               system ('/usr/local/bin/restartntpd'); # DPC added to 1.3.1\r
-       }\r
-}\r
-\r
-# To enter an ' into a pushbutton solution is to use &#039; in it's definition\r
-# but returned value when pressed is ' not the code. Cleanhtml recode the ' to enable comparison.\r
-$timesettings{'ACTION'} = &Header::cleanhtml ($timesettings{'ACTION'});\r
-if ($timesettings{'ACTION'} eq $Lang::tr{'set time now'} && $timesettings{'ENABLENTP'} eq 'on')\r
-{\r
-       system ('/bin/touch', "${General::swroot}/time/settimenow");\r
-}\r
-\r
-&General::readhash("${General::swroot}/time/settings", \%timesettings);\r
-\r
-if ($timesettings{'VALID'} eq '')\r
-{\r
-       $timesettings{'ENABLENTP'} = 'off';\r
-       $timesettings{'UPDATE_METHOD'} = 'manually';\r
-       $timesettings{'UPDATE_VALUE'} = '1';\r
-       $timesettings{'UPDATE_PERIOD'} = 'daily';\r
-       $timesettings{'NTP_ADDR_1'} = 'pool.ntp.org';\r
-       $timesettings{'NTP_ADDR_2'} = 'pool.ntp.org';\r
-}\r
-\r
-unless ($errormessage) {\r
-       $timesettings{'SETMONTH'} = `date +'%m %e %Y %H %M'|cut -c 1-2`;\r
-       $timesettings{'SETDAY'} = `date +'%m %e %Y %H %M'|cut -c 4-5`;\r
-       $timesettings{'SETYEAR'} = `date +'%m %e %Y %H %M'|cut -c 7-10`;\r
-       $timesettings{'SETHOUR'} = `date +'%m %e %Y %H %M'|cut -c 12-13`;\r
-       $timesettings{'SETMINUTES'} = `date +'%m %e %Y %H %M'|cut -c 15-16`;\r
-       $_=$timesettings{'SETDAY'};\r
-       $timesettings{'SETDAY'}=~ tr/ /0/;\r
-}\r
-\r
-my %selected=();\r
-my %checked=();\r
-\r
-$checked{'ENABLENTP'}{'off'} = '';\r
-$checked{'ENABLENTP'}{'on'} = '';\r
-$checked{'ENABLENTP'}{$timesettings{'ENABLENTP'}} = "checked='checked'";\r
-\r
-$checked{'ENABLECLNTP'}{'off'} = '';\r
-$checked{'ENABLECLNTP'}{'on'} = '';\r
-$checked{'ENABLECLNTP'}{$timesettings{'ENABLECLNTP'}} = "checked='checked'";\r
-\r
-$checked{'UPDATE_METHOD'}{'manually'} = '';\r
-$checked{'UPDATE_METHOD'}{'periodically'} = '';\r
-$checked{'UPDATE_METHOD'}{$timesettings{'UPDATE_METHOD'}} = "checked='checked'";\r
-\r
-$selected{'UPDATE_PERIOD'}{'hourly'} = '';\r
-$selected{'UPDATE_PERIOD'}{'daily'} = '';\r
-$selected{'UPDATE_PERIOD'}{'weekly'} = '';\r
-$selected{'UPDATE_PERIOD'}{'monthly'} = '';\r
-$selected{'UPDATE_PERIOD'}{$timesettings{'UPDATE_PERIOD'}} = "selected='selected'";\r
-\r
-# added to v0.0.4 to refresh screen if syncro event queued \r
-my $refresh = '';\r
-if ( -e "${General::swroot}/time/settimenow") {\r
-       $refresh = "<meta http-equiv='refresh' content='60;' />";\r
-}\r
-\r
-&Header::openpage($Lang::tr{'ntp configuration'}, 1, $refresh);\r
-\r
-&Header::openbigbox('100%', 'left', '', $errormessage);\r
-\r
-# DPC move error message to top so it is seen!\r
-if ($errormessage) {\r
-       &Header::openbox('100%', 'left', $Lang::tr{'error messages'});\r
-       print "<font class='base'>$errormessage&nbsp;</font>\n";\r
-       &Header::closebox();\r
-       }\r
-\r
-print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";\r
-\r
-&Header::openbox('100%', 'left', $Lang::tr{'network time'});\r
-print <<END\r
-<table width='100%'>\r
-<tr>\r
-       <td><input type='checkbox' name='ENABLENTP' $checked{'ENABLENTP'}{'on'} /></td>\r
-       <td width='100%' colspan='4' class='base'>$Lang::tr{'network time from'}</td>\r
-</tr>\r
-<tr>\r
-       <td>&nbsp;</td>\r
-       <td width='100%' class='base' colspan='4'>\r
-END\r
-;\r
-\r
-if ( -e "${General::swroot}/time/lastset")\r
-{\r
-       print "$Lang::tr{'clock last synchronized at'}\n";\r
-       my $output = `cat ${General::swroot}/time/lastset`;\r
-       print $output;\r
-}\r
-else\r
-{\r
-       print "$Lang::tr{'clock has not been synchronized'}\n";\r
-}\r
-\r
-print <<END\r
-</td></tr>\r
-<tr>\r
-       <td>&nbsp;</td>\r
-       <td width='25%' class='base'>$Lang::tr{'primary ntp server'}:</td>\r
-       <td width='25%'><input type='text' name='NTP_ADDR_1' value='$timesettings{'NTP_ADDR_1'}' /></td>\r
-       <td width='25%' class='base'>$Lang::tr{'secondary ntp server'}: &nbsp;<img src='/blob.gif' align='top' alt='*' /></td>\r
-       <td width='25%'><input type='text' name='NTP_ADDR_2' value='$timesettings{'NTP_ADDR_2'}' /></td>\r
-</tr>\r
-<tr>\r
-       <td>&nbsp;</td>\r
-       <td class='base' colspan='4'><input type='checkbox' name='ENABLECLNTP' $checked{'ENABLECLNTP'}{'on'} /> $Lang::tr{'clenabled'}</td>\r
-</tr>\r
-</table>\r
-<table width='100%'>\r
-<tr>\r
-       <td colspan='4'><hr /><b>$Lang::tr{'update time'}</b></td>\r
-</tr>\r
-<tr>\r
-       <td>&nbsp;</td>\r
-       <td class='base' colspan='2'>$Lang::tr{'set time now help'}</td>\r
-</tr>\r
-<tr>\r
-       <td class='base'><input type='radio' name='UPDATE_METHOD' value='periodically' $checked{'UPDATE_METHOD'}{'periodically'} /></td>\r
-       <td width='15%'>$Lang::tr{'every'}: </td>\r
-       <td width='35%'><input type='text' name='UPDATE_VALUE' size='3' maxlength='3' value='$timesettings{'UPDATE_VALUE'}' />\r
-       <select name='UPDATE_PERIOD'>\r
-               <option value='hourly' $selected{'UPDATE_PERIOD'}{'hourly'}>$Lang::tr{'hours'}</option>\r
-               <option value='daily' $selected{'UPDATE_PERIOD'}{'daily'}>$Lang::tr{'days'}</option>\r
-               <option value='weekly' $selected{'UPDATE_PERIOD'}{'weekly'}>$Lang::tr{'weeks'}</option>\r
-               <option value='monthly' $selected{'UPDATE_PERIOD'}{'monthly'}>$Lang::tr{'months'}</option>\r
-       </select></td>\r
-       <td width='50%'>&nbsp;</td>\r
-</tr>\r
-<tr>\r
-       <td class='base'><input type='radio' name='UPDATE_METHOD' value='manually' $checked{'UPDATE_METHOD'}{'manually'} /></td>\r
-       <td colspan='2'>$Lang::tr{'manually'}</td>\r
-</tr>\r
-END\r
-;\r
-\r
-if ( -e "${General::swroot}/time/settimenow") {\r
-       print "<tr>\n<td align='center'><img src='/images/clock.gif' alt='' /></td>\n";\r
-       print "<td colspan='2'><font color='red'>$Lang::tr{'waiting to synchronize clock'}...</font></td></tr>\n";\r
-}\r
-print <<END\r
-</table>\r
-<br />\r
-<hr />\r
-<table width='100%'>\r
-<tr>\r
-       <td width='30%'><img src='/blob.gif' alt='*' /> $Lang::tr{'this field may be blank'}</td>\r
-       <td width='40%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'set time now'}' /></td>\r
-       <td width='25%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>\r
-       <td width='5%' align='right'>\r
-               <a href='${General::adminmanualurl}/services.html#services_time' target='_blank'><img src='/images/web-support.png' title='$Lang::tr{'online help en'}' /></a>\r
-       </td>\r
-</tr>\r
-</table>\r
-END\r
-;\r
-\r
-&Header::closebox();\r
-\r
-&Header::openbox('100%', 'left', $Lang::tr{'update time'});\r
-\r
-print <<END\r
-<table width='100%'>\r
-<tr>\r
-       <td width='65%' class='base'>\r
-       <table> \r
-       <tr>\r
-               <td>$Lang::tr{'year'}:&nbsp;</td>\r
-               <td><input type='text' name='SETYEAR' size='4' maxlength='4' value='$timesettings{'SETYEAR'}' /></td>\r
-               <td>&nbsp;$Lang::tr{'month'}:&nbsp;</td>\r
-               <td><input type='text' name='SETMONTH' size='2' maxlength='2' value='$timesettings{'SETMONTH'}' /></td>\r
-               <td>&nbsp;$Lang::tr{'day'}:&nbsp;</td>\r
-               <td><input type='text' name='SETDAY' size='2' maxlength='2' value='$timesettings{'SETDAY'}' /></td>\r
-               <td>&nbsp;&nbsp;&nbsp;&nbsp;$Lang::tr{'hours2'}:&nbsp;</td>\r
-               <td><input type='text' name='SETHOUR' size='2' maxlength='2' value='$timesettings{'SETHOUR'}' /></td>\r
-               <td>&nbsp;$Lang::tr{'minutes'}:&nbsp;</td>\r
-               <td><input type='text' name='SETMINUTES' size='2' maxlength='2' value='$timesettings{'SETMINUTES'}' /></td>\r
-       </tr>   \r
-       </table>\r
-       </td>\r
-       <td width='35%' align='center' class='base'><input type='submit' name='ACTION' value='$Lang::tr{'instant update'}' /></td>\r
-</tr>\r
-</table>\r
-END\r
-;\r
-&Header::closebox();\r
-\r
-print "</form>\n";\r
-\r
-&Header::closebigbox();\r
-\r
-&Header::closepage();\r
-\r
+#!/usr/bin/perl
+#
+# IPFire CGIs
+#
+# This file is part of the IPFire Project
+# 
+# This code is distributed under the terms of the GPL
+#
+# (c) Eric Oberlander June 2002
+#
+# (c) Darren Critchley June 2003 - added real time clock setting, etc
+#
+# $Id: time.cgi,v 1.4.2.11 2005/05/28 12:16:18 eoberlander Exp $
+#
+
+use strict;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require 'CONFIG_ROOT/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my %timesettings=();
+my $errormessage = '';
+
+&Header::showhttpheaders();
+
+$timesettings{'ACTION'} = '';
+$timesettings{'VALID'} = '';
+
+$timesettings{'ENABLENTP'} = 'off';
+$timesettings{'NTP_ADDR_1'} = '';
+$timesettings{'NTP_ADDR_2'} = '';
+$timesettings{'UPDATE_METHOD'} = 'manually';
+$timesettings{'UPDATE_VALUE'} = '0';
+$timesettings{'UPDATE_PERIOD'} = '';
+$timesettings{'ENABLECLNTP'} = 'off';
+$timesettings{'SETHOUR'} = '';
+$timesettings{'SETMINUTES'} = '';
+$timesettings{'SETDAY'} = '';
+$timesettings{'SETMONTH'} = '';
+$timesettings{'SETYEAR'} = '';
+
+&Header::getcgihash(\%timesettings);
+
+if ($timesettings{'ACTION'} eq $Lang::tr{'instant update'})
+{
+       if ($timesettings{'SETHOUR'} eq '' || $timesettings{'SETHOUR'} < 0 || $timesettings{'SETHOUR'} > 23) {
+               $errormessage = $Lang::tr{'invalid time entered'};
+               goto UPDTERROR;
+       }
+       if ($timesettings{'SETMINUTES'} eq '' || $timesettings{'SETMINUTES'} < 0 || $timesettings{'SETMINUTES'} > 59) {
+               $errormessage = $Lang::tr{'invalid time entered'};
+               goto UPDTERROR;
+       }
+       if ($timesettings{'SETDAY'} eq '' || $timesettings{'SETDAY'} < 1 || $timesettings{'SETDAY'} > 31) {
+               $errormessage = $Lang::tr{'invalid date entered'};
+               goto UPDTERROR;
+       }
+       if ($timesettings{'SETMONTH'} eq '' || $timesettings{'SETMONTH'} < 1 || $timesettings{'SETMONTH'} > 12) {
+               $errormessage = $Lang::tr{'invalid date entered'};
+               goto UPDTERROR;
+       }
+       if ($timesettings{'SETYEAR'} eq '' || $timesettings{'SETYEAR'} < 2003 || $timesettings{'SETYEAR'} > 2030) {
+               $errormessage = $Lang::tr{'invalid date entered'};
+               goto UPDTERROR;
+       }
+
+UPDTERROR:
+       if ($errormessage) {
+               $timesettings{'VALID'} = 'no'; }
+       else {
+               $timesettings{'VALID'} = 'yes'; }
+
+       if ($timesettings{'VALID'} eq 'yes') {
+               # we want date in YYYY-MM-DD HH:MM format for date command
+               # EAO changed datestring to ISO 6801 format 2003-08-11
+               my $datestring = "$timesettings{'SETYEAR'}-$timesettings{'SETMONTH'}-$timesettings{'SETDAY'}";
+               my $timestring = "$timesettings{'SETHOUR'}:$timesettings{'SETMINUTES'}";
+               # EAO setdate.c also revised for ISO 6801 date format 2003-08-11
+               system ('/usr/local/bin/setdate', $datestring, $timestring);
+               &General::log("$Lang::tr{'time date manually reset'} $datestring $timestring");
+       }
+       unless ($errormessage) {
+               undef %timesettings;
+       }
+}
+
+if ($timesettings{'ACTION'} eq $Lang::tr{'save'})
+{ 
+       if ($timesettings{'ENABLENTP'} eq 'on')
+       {
+               if ( ! ( &General::validfqdn($timesettings{'NTP_ADDR_1'}) ||
+                        &General::validip  ($timesettings{'NTP_ADDR_1'})))
+               {
+                       $errormessage = $Lang::tr{'invalid primary ntp'};
+                       goto ERROR;
+               }
+       }
+       if ($timesettings{'NTP_ADDR_2'})
+       {
+               if ( ! ( &General::validfqdn($timesettings{'NTP_ADDR_2'}) ||
+                        &General::validip  ($timesettings{'NTP_ADDR_2'})))
+               {
+                       $errormessage = $Lang::tr{'invalid secondary ntp'};
+                       goto ERROR;
+               }
+       }
+       if (!($timesettings{'NTP_ADDR_1'}) && $timesettings{'NTP_ADDR_2'})
+       {
+               $errormessage = $Lang::tr{'cannot specify secondary ntp without specifying primary'};
+               goto ERROR;
+       }
+
+       if (!($timesettings{'UPDATE_VALUE'} =~ /^\d+$/) || $timesettings{'UPDATE_VALUE'} <= 0)
+       {
+               $errormessage = $Lang::tr{'invalid time period'};
+               goto ERROR;
+       }
+
+       if ($timesettings{'ENABLENTP'} ne "on" && $timesettings{'ENABLECLNTP'} eq "on")
+       {
+               $errormessage = $Lang::tr{'ntp must be enabled to have clients'};
+               goto ERROR;
+       }
+       if ($timesettings{'ENABLENTP'} eq "on" && !($timesettings{'NTP_ADDR_1'}) && !($timesettings{'NTP_ADDR_2'}))
+       {
+               $errormessage = $Lang::tr{'cannot enable ntp without specifying primary'};
+               goto ERROR;
+       }
+ERROR:
+       if ($errormessage) {
+               $timesettings{'VALID'} = 'no'; }
+       else {
+               $timesettings{'VALID'} = 'yes'; }
+
+               &General::writehash("${General::swroot}/time/settings", \%timesettings);
+               open(FILE, ">/${General::swroot}/time/settime.conf") or die "Unable to write settime.conf file";
+               flock(FILE, 2);
+               print FILE "$timesettings{'NTP_ADDR_1'} $timesettings{'NTP_ADDR_2'}\n";
+               close FILE;
+
+               my $updateperiod=0;
+
+               if  ($timesettings{'UPDATE_PERIOD'} eq 'daily') {
+                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 1440; }
+               elsif  ($timesettings{'UPDATE_PERIOD'} eq 'weekly') {
+                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 10080; }
+               elsif  ($timesettings{'UPDATE_PERIOD'} eq 'monthly') {
+                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 40320; }
+               else {
+                       $updateperiod = $timesettings{'UPDATE_VALUE'} * 60; }
+
+               $updateperiod = $updateperiod - 5;
+
+               if ($updateperiod <= 5) {
+                       $updateperiod = 5; }
+
+               open(FILE, ">/${General::swroot}/time/counter.conf") or die "Unable to write counter.conf file";
+               flock(FILE, 2);
+               print FILE "$updateperiod\n";
+               close FILE;
+
+       if ($timesettings{'ENABLENTP'} eq 'on' && $timesettings{'VALID'} eq 'yes')
+       {
+               system ('/bin/touch', "${General::swroot}/time/enable");
+               &General::log($Lang::tr{'ntp syncro enabled'});
+               unlink "${General::swroot}/time/counter";
+               if ($timesettings{'UPDATE_METHOD'} eq 'periodically')
+               {
+                       open(FILE, ">/${General::swroot}/time/counter") or die "Unable to write counter file";
+                       flock(FILE, 2);
+                       print FILE "$updateperiod\n";
+                       close FILE;
+               }
+               if ($timesettings{'ENABLECLNTP'} eq 'on') # DPC added to 1.3.1
+               {
+                       system ('/bin/touch', "${General::swroot}/time/allowclients"); # DPC added to 1.3.1
+                       &General::log($Lang::tr{'ntpd restarted'}); # DPC added to 1.3.1
+               } else {
+                       unlink "${General::swroot}/time/allowclients";
+               }
+       
+       }
+       else
+       {
+               unlink "${General::swroot}/time/enable";
+               unlink "${General::swroot}/time/settimenow";
+               unlink "${General::swroot}/time/allowclients"; # DPC added to 1.3.1
+               &General::log($Lang::tr{'ntp syncro disabled'})
+       }
+       if (! $errormessage) {
+               system ('/usr/local/bin/restartntpd'); # DPC added to 1.3.1
+       }
+}
+
+# To enter an ' into a pushbutton solution is to use &#039; in it's definition
+# but returned value when pressed is ' not the code. Cleanhtml recode the ' to enable comparison.
+$timesettings{'ACTION'} = &Header::cleanhtml ($timesettings{'ACTION'});
+if ($timesettings{'ACTION'} eq $Lang::tr{'set time now'} && $timesettings{'ENABLENTP'} eq 'on')
+{
+       system ('/bin/touch', "${General::swroot}/time/settimenow");
+}
+
+&General::readhash("${General::swroot}/time/settings", \%timesettings);
+
+if ($timesettings{'VALID'} eq '')
+{
+       $timesettings{'ENABLENTP'} = 'off';
+       $timesettings{'UPDATE_METHOD'} = 'manually';
+       $timesettings{'UPDATE_VALUE'} = '1';
+       $timesettings{'UPDATE_PERIOD'} = 'daily';
+       $timesettings{'NTP_ADDR_1'} = 'pool.ntp.org';
+       $timesettings{'NTP_ADDR_2'} = 'pool.ntp.org';
+}
+
+unless ($errormessage) {
+       $timesettings{'SETMONTH'} = `date +'%m %e %Y %H %M'|cut -c 1-2`;
+       $timesettings{'SETDAY'} = `date +'%m %e %Y %H %M'|cut -c 4-5`;
+       $timesettings{'SETYEAR'} = `date +'%m %e %Y %H %M'|cut -c 7-10`;
+       $timesettings{'SETHOUR'} = `date +'%m %e %Y %H %M'|cut -c 12-13`;
+       $timesettings{'SETMINUTES'} = `date +'%m %e %Y %H %M'|cut -c 15-16`;
+       $_=$timesettings{'SETDAY'};
+       $timesettings{'SETDAY'}=~ tr/ /0/;
+}
+
+my %selected=();
+my %checked=();
+
+$checked{'ENABLENTP'}{'off'} = '';
+$checked{'ENABLENTP'}{'on'} = '';
+$checked{'ENABLENTP'}{$timesettings{'ENABLENTP'}} = "checked='checked'";
+
+$checked{'ENABLECLNTP'}{'off'} = '';
+$checked{'ENABLECLNTP'}{'on'} = '';
+$checked{'ENABLECLNTP'}{$timesettings{'ENABLECLNTP'}} = "checked='checked'";
+
+$checked{'UPDATE_METHOD'}{'manually'} = '';
+$checked{'UPDATE_METHOD'}{'periodically'} = '';
+$checked{'UPDATE_METHOD'}{$timesettings{'UPDATE_METHOD'}} = "checked='checked'";
+
+$selected{'UPDATE_PERIOD'}{'hourly'} = '';
+$selected{'UPDATE_PERIOD'}{'daily'} = '';
+$selected{'UPDATE_PERIOD'}{'weekly'} = '';
+$selected{'UPDATE_PERIOD'}{'monthly'} = '';
+$selected{'UPDATE_PERIOD'}{$timesettings{'UPDATE_PERIOD'}} = "selected='selected'";
+
+# added to v0.0.4 to refresh screen if syncro event queued 
+my $refresh = '';
+if ( -e "${General::swroot}/time/settimenow") {
+       $refresh = "<meta http-equiv='refresh' content='60;' />";
+}
+
+&Header::openpage($Lang::tr{'ntp configuration'}, 1, $refresh);
+
+&Header::openbigbox('100%', 'left', '', $errormessage);
+
+# DPC move error message to top so it is seen!
+if ($errormessage) {
+       &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+       print "<font class='base'>$errormessage&nbsp;</font>\n";
+       &Header::closebox();
+       }
+
+print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
+
+&Header::openbox('100%', 'left', $Lang::tr{'network time'});
+print <<END
+<table width='100%'>
+<tr>
+       <td><input type='checkbox' name='ENABLENTP' $checked{'ENABLENTP'}{'on'} /></td>
+       <td width='100%' colspan='4' class='base'>$Lang::tr{'network time from'}</td>
+</tr>
+<tr>
+       <td>&nbsp;</td>
+       <td width='100%' class='base' colspan='4'>
+END
+;
+
+if ( -e "${General::swroot}/time/lastset")
+{
+       print "$Lang::tr{'clock last synchronized at'}\n";
+       my $output = `cat ${General::swroot}/time/lastset`;
+       print $output;
+}
+else
+{
+       print "$Lang::tr{'clock has not been synchronized'}\n";
+}
+
+print <<END
+</td></tr>
+<tr>
+       <td>&nbsp;</td>
+       <td width='25%' class='base'>$Lang::tr{'primary ntp server'}:</td>
+       <td width='25%'><input type='text' name='NTP_ADDR_1' value='$timesettings{'NTP_ADDR_1'}' /></td>
+       <td width='25%' class='base'>$Lang::tr{'secondary ntp server'}: &nbsp;<img src='/blob.gif' align='top' alt='*' /></td>
+       <td width='25%'><input type='text' name='NTP_ADDR_2' value='$timesettings{'NTP_ADDR_2'}' /></td>
+</tr>
+<tr>
+       <td>&nbsp;</td>
+       <td class='base' colspan='4'><input type='checkbox' name='ENABLECLNTP' $checked{'ENABLECLNTP'}{'on'} /> $Lang::tr{'clenabled'}</td>
+</tr>
+</table>
+<table width='100%'>
+<tr>
+       <td colspan='4'><hr /><b>$Lang::tr{'update time'}</b></td>
+</tr>
+<tr>
+       <td>&nbsp;</td>
+       <td class='base' colspan='2'>$Lang::tr{'set time now help'}</td>
+</tr>
+<tr>
+       <td class='base'><input type='radio' name='UPDATE_METHOD' value='periodically' $checked{'UPDATE_METHOD'}{'periodically'} /></td>
+       <td width='15%'>$Lang::tr{'every'}: </td>
+       <td width='35%'><input type='text' name='UPDATE_VALUE' size='3' maxlength='3' value='$timesettings{'UPDATE_VALUE'}' />
+       <select name='UPDATE_PERIOD'>
+               <option value='hourly' $selected{'UPDATE_PERIOD'}{'hourly'}>$Lang::tr{'hours'}</option>
+               <option value='daily' $selected{'UPDATE_PERIOD'}{'daily'}>$Lang::tr{'days'}</option>
+               <option value='weekly' $selected{'UPDATE_PERIOD'}{'weekly'}>$Lang::tr{'weeks'}</option>
+               <option value='monthly' $selected{'UPDATE_PERIOD'}{'monthly'}>$Lang::tr{'months'}</option>
+       </select></td>
+       <td width='50%'>&nbsp;</td>
+</tr>
+<tr>
+       <td class='base'><input type='radio' name='UPDATE_METHOD' value='manually' $checked{'UPDATE_METHOD'}{'manually'} /></td>
+       <td colspan='2'>$Lang::tr{'manually'}</td>
+</tr>
+END
+;
+
+if ( -e "${General::swroot}/time/settimenow") {
+       print "<tr>\n<td align='center'><img src='/images/clock.gif' alt='' /></td>\n";
+       print "<td colspan='2'><font color='red'>$Lang::tr{'waiting to synchronize clock'}...</font></td></tr>\n";
+}
+print <<END
+</table>
+<br />
+<hr />
+<table width='100%'>
+<tr>
+       <td width='30%'><img src='/blob.gif' alt='*' /> $Lang::tr{'this field may be blank'}</td>
+       <td width='40%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'set time now'}' /></td>
+       <td width='25%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
+       <td width='5%' align='right'>
+               <a href='${General::adminmanualurl}/services.html#services_time' target='_blank'><img src='/images/web-support.png' title='$Lang::tr{'online help en'}' /></a>
+       </td>
+</tr>
+</table>
+END
+;
+
+&Header::closebox();
+
+&Header::openbox('100%', 'left', $Lang::tr{'update time'});
+
+print <<END
+<table width='100%'>
+<tr>
+       <td width='65%' class='base'>
+       <table> 
+       <tr>
+               <td>$Lang::tr{'year'}:&nbsp;</td>
+               <td><input type='text' name='SETYEAR' size='4' maxlength='4' value='$timesettings{'SETYEAR'}' /></td>
+               <td>&nbsp;$Lang::tr{'month'}:&nbsp;</td>
+               <td><input type='text' name='SETMONTH' size='2' maxlength='2' value='$timesettings{'SETMONTH'}' /></td>
+               <td>&nbsp;$Lang::tr{'day'}:&nbsp;</td>
+               <td><input type='text' name='SETDAY' size='2' maxlength='2' value='$timesettings{'SETDAY'}' /></td>
+               <td>&nbsp;&nbsp;&nbsp;&nbsp;$Lang::tr{'hours2'}:&nbsp;</td>
+               <td><input type='text' name='SETHOUR' size='2' maxlength='2' value='$timesettings{'SETHOUR'}' /></td>
+               <td>&nbsp;$Lang::tr{'minutes'}:&nbsp;</td>
+               <td><input type='text' name='SETMINUTES' size='2' maxlength='2' value='$timesettings{'SETMINUTES'}' /></td>
+       </tr>   
+       </table>
+       </td>
+       <td width='35%' align='center' class='base'><input type='submit' name='ACTION' value='$Lang::tr{'instant update'}' /></td>
+</tr>
+</table>
+END
+;
+&Header::closebox();
+
+print "</form>\n";
+
+&Header::closebigbox();
+
+&Header::closepage();
+