--- /dev/null
+#!/usr/bin/perl\r
+#\r
+# SmoothWall CGIs\r
+#\r
+# This code is distributed under the terms of the GPL\r
+#\r
+# (c) The SmoothWall Team\r
+#\r
+# $Id: shutdown.cgi,v 1.5.2.10 2006/01/02 16:21:00 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 %cgiparams=();\r
+my $death = 0;\r
+my $rebirth = 0;\r
+my $default_time = '03:15';\r
+\r
+&Header::showhttpheaders();\r
+\r
+$cgiparams{'ACTION'} = '';\r
+&Header::getcgihash(\%cgiparams);\r
+\r
+if ($cgiparams{'ACTION'} eq $Lang::tr{'shutdown'}) {\r
+ $death = 1;\r
+ &General::log($Lang::tr{'shutting down ipcop'});\r
+ #system '/usr/local/bin/ipcopdeath';\r
+ system '/usr/local/bin/ipcopreboot down';\r
+} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'reboot'}) {\r
+ $rebirth = 1;\r
+ &General::log($Lang::tr{'rebooting ipcop'});\r
+ #system '/usr/local/bin/ipcoprebirth';\r
+ system '/usr/local/bin/ipcopreboot boot';\r
+} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {\r
+ my $days='';\r
+ my $n = 1;\r
+ # build list of days\r
+ map ($cgiparams{$_} eq 'on' ? $days .= ",".$n++ : $n++ ,\r
+ ('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY') );\r
+\r
+ # if days is empty, it is a remove else it is a change\r
+ if (length ($days)){\r
+ substr($days,0,1) = ''; #kill front comma\r
+ &General::log("Scheduling reboot on $days at $cgiparams{'TIME'}");\r
+ my $min;\r
+ my $hour;\r
+ ($hour,$min) = split (':', $cgiparams{'TIME'});\r
+ $days = "'*'" if ($days eq '1,2,3,4,5,6,7');\r
+ my $mode = ($cgiparams{'MODE'} eq 'halt') ? '-h' : '-r';\r
+ system "/usr/local/bin/ipcopreboot cron+ $min $hour $days $mode"; #reboot checks values of $hour & $min\r
+ } else {\r
+ &General::log("Remove scheduled reboot");\r
+ system '/usr/local/bin/ipcopreboot cron-';\r
+ }\r
+}\r
+if ($death == 0 && $rebirth == 0) {\r
+\r
+ &Header::openpage($Lang::tr{'shutdown control'}, 1, '');\r
+\r
+ &Header::openbigbox('100%', 'left');\r
+\r
+ print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";\r
+\r
+ &Header::openbox('100%', 'left', $Lang::tr{'shutdown2'});\r
+ print <<END\r
+<table width='100%'>\r
+<tr>\r
+ <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'reboot'}' /></td>\r
+ <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'shutdown'}' /></td>\r
+</tr>\r
+</table>\r
+END\r
+ ;\r
+ &Header::closebox();\r
+\r
+ &Header::openbox('100%', 'left', $Lang::tr{'reboot schedule'});\r
+ my %checked=();\r
+ my $reboot_at = $default_time;\r
+ my $days = '';\r
+\r
+ #decode the shutdown line stored in crontab\r
+ #get the line\r
+ open(FILE, "/usr/local/bin/ipcopreboot cron?|");\r
+ my $schedule = <FILE>;\r
+ close (FILE);\r
+\r
+ if ($schedule) { # something exist\r
+ $schedule =~ /(\d+) (\d+) \* \* ([1234567*,]+) .* (-[h|r])/;\r
+ $reboot_at = sprintf("%.02d",$2) . ':' . sprintf("%.02d",$1); # hour (03:45)\r
+ $days = $3; # 1,2,3... or *\r
+ if ($4 eq '-h') {\r
+ $checked{'MODE'}{'halt'} = "checked='checked'";\r
+ } else {\r
+ $checked{'MODE'}{'reboot'} = "checked='checked'";\r
+ }\r
+ }\r
+ #decode $days\r
+ if ($days eq '*') {\r
+ $checked{'MONDAY'} = "checked='checked'";\r
+ $checked{'TUESDAY'} = "checked='checked'";\r
+ $checked{'WEDNESDAY'} = "checked='checked'";\r
+ $checked{'THURSDAY'} = "checked='checked'";\r
+ $checked{'FRIDAY'} = "checked='checked'";\r
+ $checked{'SATURDAY'} = "checked='checked'";\r
+ $checked{'SUNDAY'} = "checked='checked'";\r
+ } else {\r
+ $checked{'MONDAY'} = "checked='checked'" if ($days =~ /1/);\r
+ $checked{'TUESDAY'} = "checked='checked'" if ($days =~ /2/);\r
+ $checked{'WEDNESDAY'} = "checked='checked'" if ($days =~ /3/);\r
+ $checked{'THURSDAY'} = "checked='checked'" if ($days =~ /4/);\r
+ $checked{'FRIDAY'} = "checked='checked'" if ($days =~ /5/);\r
+ $checked{'SATURDAY'} = "checked='checked'" if ($days =~ /6/);\r
+ $checked{'SUNDAY'} = "checked='checked'" if ($days =~ /7/); \r
+ }\r
+\r
+ print <<END\r
+<table width='100%'>\r
+<tr>\r
+ <td class='boldbase' colspan='2'><b>$Lang::tr{'time'}</b></td>\r
+ <td class='boldbase' colspan='2'><b>$Lang::tr{'day'}</b></td>\r
+ <td class='boldbase'><b>$Lang::tr{'action'}</b></td>\r
+</tr>\r
+<tr>\r
+END\r
+ ;\r
+ print "<td align='left' width='15%' class='base' valign='top' rowspan='2'>", &select_hour_var("TIME", $reboot_at);\r
+ print <<END\r
+</td>\r
+ <td>\r
+ <input type='checkbox' name='MONDAY' $checked{'MONDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'monday'}</td>\r
+ <td>\r
+ <input type='radio' name='MODE' value='reboot' $checked{'MODE'}{'reboot'} /></td>\r
+ <td width='70%' class='base'>$Lang::tr{'reboot'}</td></tr>\r
+<tr>\r
+ <td>\r
+ <input type='checkbox' name='TUESDAY' $checked{'TUESDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'tuesday'}</td>\r
+ <td>\r
+ <input type='radio' name='MODE' value='halt' $checked{'MODE'}{'halt'} /></td>\r
+ <td class='base'>$Lang::tr{'shutdown'}</td></tr>\r
+<tr>\r
+ <td> </td>\r
+ <td>\r
+ <input type='checkbox' name='WEDNESDAY' $checked{'WEDNESDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'wednesday'}</td></tr>\r
+<tr>\r
+ <td> </td>\r
+ <td>\r
+ <input type='checkbox' name='THURSDAY' $checked{'THURSDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'thursday'}</td></tr>\r
+<tr>\r
+ <td> </td>\r
+ <td>\r
+ <input type='checkbox' name='FRIDAY' $checked{'FRIDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'friday'}</td></tr>\r
+<tr>\r
+ <td> </td>\r
+ <td>\r
+ <input type='checkbox' name='SATURDAY' $checked{'SATURDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'saturday'}</td></tr>\r
+<tr>\r
+ <td> </td>\r
+ <td>\r
+ <input type='checkbox' name='SUNDAY' $checked{'SUNDAY'}></td>\r
+ <td width='15%' class='base'>\r
+ $Lang::tr{'sunday'}</td></tr>\r
+</table>\r
+\r
+<table width='100%'>\r
+<hr />\r
+<tr>\r
+ <td width='60%'> </td>\r
+ <td width='30%' align='center'>\r
+ <input type='submit' name='ACTION' value='$Lang::tr{'save'}' />\r
+ </td>\r
+ <td width='10%' align='right'>\r
+ <a href='${General::adminmanualurl}/system.html#shutdown' target='_blank'>\r
+ <img src='/images/web-support.png' title='$Lang::tr{'online help en'}' /></a></td>\r
+</tr>\r
+</table>\r
+\r
+END\r
+;\r
+ &Header::closebox();\r
+ print "</form>\n";\r
+} else {\r
+ my $message='';\r
+ my $title='';\r
+ my $refresh = "<meta http-equiv='refresh' content='5; URL=/cgi-bin/index.cgi' />";\r
+ if ($death) {\r
+ $title = $Lang::tr{'shutting down'};\r
+ $message = $Lang::tr{'ipcop has now shutdown'};\r
+ } else {\r
+ $title = $Lang::tr{'rebooting'};\r
+ $message = $Lang::tr{'ipcop has now rebooted'};\r
+ }\r
+ &Header::openpage($title, 0, $refresh);\r
+\r
+ &Header::openbigbox('100%', 'center');\r
+ print <<END\r
+<div align='center'>\r
+<table width='100%' bgcolor='#ffffff'>\r
+<tr><td align='center'>\r
+<br /><br /><img src='/ipcop_big.gif' /><br /><br /><br />\r
+</td></tr>\r
+</table>\r
+<br />\r
+<font size='6'>$message</font>\r
+</div>\r
+END\r
+ ;\r
+}\r
+\r
+&Header::closebigbox();\r
+&Header::closepage();\r
+\r
+\r
+\r
+# Create a named select box containing valid times from quarter to quarter.\r
+sub select_hour_var {\r
+ # Create a variable containing the SELECT with selected value variable name and current value selected\r
+ my $select_hour_var = shift;\r
+ my $selected_hour = shift;\r
+\r
+ my $select_hour = "<select name='$select_hour_var'>";\r
+ my $hh = 0;\r
+ my $mm = 15;\r
+ my $str = '00:00';\r
+ for (my $x=0; $x<(24*4); $x++) {\r
+ my $check = $selected_hour eq $str ? "selected='selected'" : '';\r
+ $select_hour .= "<Option $check value='$str'>$str";\r
+ $str = sprintf("%.02d", $hh) . ":" . sprintf("%.02d", $mm);\r
+ $mm += 15;\r
+ if ($mm==60) {$mm=0; $hh++; }\r
+ }\r
+ $select_hour .= "</select>\n";\r
+ return ($select_hour);\r
+}\r