]> git.ipfire.org Git - ipfire-2.x.git/blame - html/cgi-bin/shutdown.cgi
immernoch das alte Problem...
[ipfire-2.x.git] / html / cgi-bin / shutdown.cgi
CommitLineData
cd1a2927
MT
1#!/usr/bin/perl\r
2#\r
3# SmoothWall CGIs\r
4#\r
5# This code is distributed under the terms of the GPL\r
6#\r
7# (c) The SmoothWall Team\r
8#\r
9# $Id: shutdown.cgi,v 1.5.2.10 2006/01/02 16:21:00 eoberlander Exp $\r
10#\r
11\r
12use strict;\r
13\r
14# enable only the following on debugging purpose\r
15#use warnings;\r
16#use CGI::Carp 'fatalsToBrowser';\r
17\r
18require 'CONFIG_ROOT/general-functions.pl';\r
19require "${General::swroot}/lang.pl";\r
20require "${General::swroot}/header.pl";\r
21\r
22my %cgiparams=();\r
23my $death = 0;\r
24my $rebirth = 0;\r
25my $default_time = '03:15';\r
26\r
27&Header::showhttpheaders();\r
28\r
29$cgiparams{'ACTION'} = '';\r
30&Header::getcgihash(\%cgiparams);\r
31\r
32if ($cgiparams{'ACTION'} eq $Lang::tr{'shutdown'}) {\r
33 $death = 1;\r
34 &General::log($Lang::tr{'shutting down ipcop'});\r
35 #system '/usr/local/bin/ipcopdeath';\r
36 system '/usr/local/bin/ipcopreboot down';\r
37} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'reboot'}) {\r
38 $rebirth = 1;\r
39 &General::log($Lang::tr{'rebooting ipcop'});\r
40 #system '/usr/local/bin/ipcoprebirth';\r
41 system '/usr/local/bin/ipcopreboot boot';\r
42} elsif ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) {\r
43 my $days='';\r
44 my $n = 1;\r
45 # build list of days\r
46 map ($cgiparams{$_} eq 'on' ? $days .= ",".$n++ : $n++ ,\r
47 ('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY') );\r
48\r
49 # if days is empty, it is a remove else it is a change\r
50 if (length ($days)){\r
51 substr($days,0,1) = ''; #kill front comma\r
52 &General::log("Scheduling reboot on $days at $cgiparams{'TIME'}");\r
53 my $min;\r
54 my $hour;\r
55 ($hour,$min) = split (':', $cgiparams{'TIME'});\r
56 $days = "'*'" if ($days eq '1,2,3,4,5,6,7');\r
57 my $mode = ($cgiparams{'MODE'} eq 'halt') ? '-h' : '-r';\r
58 system "/usr/local/bin/ipcopreboot cron+ $min $hour $days $mode"; #reboot checks values of $hour & $min\r
59 } else {\r
60 &General::log("Remove scheduled reboot");\r
61 system '/usr/local/bin/ipcopreboot cron-';\r
62 }\r
63}\r
64if ($death == 0 && $rebirth == 0) {\r
65\r
66 &Header::openpage($Lang::tr{'shutdown control'}, 1, '');\r
67\r
68 &Header::openbigbox('100%', 'left');\r
69\r
70 print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";\r
71\r
72 &Header::openbox('100%', 'left', $Lang::tr{'shutdown2'});\r
73 print <<END\r
74<table width='100%'>\r
75<tr>\r
76 <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'reboot'}' /></td>\r
77 <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'shutdown'}' /></td>\r
78</tr>\r
79</table>\r
80END\r
81 ;\r
82 &Header::closebox();\r
83\r
84 &Header::openbox('100%', 'left', $Lang::tr{'reboot schedule'});\r
85 my %checked=();\r
86 my $reboot_at = $default_time;\r
87 my $days = '';\r
88\r
89 #decode the shutdown line stored in crontab\r
90 #get the line\r
91 open(FILE, "/usr/local/bin/ipcopreboot cron?|");\r
92 my $schedule = <FILE>;\r
93 close (FILE);\r
94\r
95 if ($schedule) { # something exist\r
96 $schedule =~ /(\d+) (\d+) \* \* ([1234567*,]+) .* (-[h|r])/;\r
97 $reboot_at = sprintf("%.02d",$2) . ':' . sprintf("%.02d",$1); # hour (03:45)\r
98 $days = $3; # 1,2,3... or *\r
99 if ($4 eq '-h') {\r
100 $checked{'MODE'}{'halt'} = "checked='checked'";\r
101 } else {\r
102 $checked{'MODE'}{'reboot'} = "checked='checked'";\r
103 }\r
104 }\r
105 #decode $days\r
106 if ($days eq '*') {\r
107 $checked{'MONDAY'} = "checked='checked'";\r
108 $checked{'TUESDAY'} = "checked='checked'";\r
109 $checked{'WEDNESDAY'} = "checked='checked'";\r
110 $checked{'THURSDAY'} = "checked='checked'";\r
111 $checked{'FRIDAY'} = "checked='checked'";\r
112 $checked{'SATURDAY'} = "checked='checked'";\r
113 $checked{'SUNDAY'} = "checked='checked'";\r
114 } else {\r
115 $checked{'MONDAY'} = "checked='checked'" if ($days =~ /1/);\r
116 $checked{'TUESDAY'} = "checked='checked'" if ($days =~ /2/);\r
117 $checked{'WEDNESDAY'} = "checked='checked'" if ($days =~ /3/);\r
118 $checked{'THURSDAY'} = "checked='checked'" if ($days =~ /4/);\r
119 $checked{'FRIDAY'} = "checked='checked'" if ($days =~ /5/);\r
120 $checked{'SATURDAY'} = "checked='checked'" if ($days =~ /6/);\r
121 $checked{'SUNDAY'} = "checked='checked'" if ($days =~ /7/); \r
122 }\r
123\r
124 print <<END\r
125<table width='100%'>\r
126<tr>\r
127 <td class='boldbase' colspan='2'><b>$Lang::tr{'time'}</b></td>\r
128 <td class='boldbase' colspan='2'><b>$Lang::tr{'day'}</b></td>\r
129 <td class='boldbase'><b>$Lang::tr{'action'}</b></td>\r
130</tr>\r
131<tr>\r
132END\r
133 ;\r
134 print "<td align='left' width='15%' class='base' valign='top' rowspan='2'>", &select_hour_var("TIME", $reboot_at);\r
135 print <<END\r
136</td>\r
137 <td>\r
138 <input type='checkbox' name='MONDAY' $checked{'MONDAY'}></td>\r
139 <td width='15%' class='base'>\r
140 $Lang::tr{'monday'}</td>\r
141 <td>\r
142 <input type='radio' name='MODE' value='reboot' $checked{'MODE'}{'reboot'} /></td>\r
143 <td width='70%' class='base'>$Lang::tr{'reboot'}</td></tr>\r
144<tr>\r
145 <td>\r
146 <input type='checkbox' name='TUESDAY' $checked{'TUESDAY'}></td>\r
147 <td width='15%' class='base'>\r
148 $Lang::tr{'tuesday'}</td>\r
149 <td>\r
150 <input type='radio' name='MODE' value='halt' $checked{'MODE'}{'halt'} /></td>\r
151 <td class='base'>$Lang::tr{'shutdown'}</td></tr>\r
152<tr>\r
153 <td>&nbsp;</td>\r
154 <td>\r
155 <input type='checkbox' name='WEDNESDAY' $checked{'WEDNESDAY'}></td>\r
156 <td width='15%' class='base'>\r
157 $Lang::tr{'wednesday'}</td></tr>\r
158<tr>\r
159 <td>&nbsp;</td>\r
160 <td>\r
161 <input type='checkbox' name='THURSDAY' $checked{'THURSDAY'}></td>\r
162 <td width='15%' class='base'>\r
163 $Lang::tr{'thursday'}</td></tr>\r
164<tr>\r
165 <td>&nbsp;</td>\r
166 <td>\r
167 <input type='checkbox' name='FRIDAY' $checked{'FRIDAY'}></td>\r
168 <td width='15%' class='base'>\r
169 $Lang::tr{'friday'}</td></tr>\r
170<tr>\r
171 <td>&nbsp;</td>\r
172 <td>\r
173 <input type='checkbox' name='SATURDAY' $checked{'SATURDAY'}></td>\r
174 <td width='15%' class='base'>\r
175 $Lang::tr{'saturday'}</td></tr>\r
176<tr>\r
177 <td>&nbsp;</td>\r
178 <td>\r
179 <input type='checkbox' name='SUNDAY' $checked{'SUNDAY'}></td>\r
180 <td width='15%' class='base'>\r
181 $Lang::tr{'sunday'}</td></tr>\r
182</table>\r
183\r
184<table width='100%'>\r
185<hr />\r
186<tr>\r
187 <td width='60%'>&nbsp;</td>\r
188 <td width='30%' align='center'>\r
189 <input type='submit' name='ACTION' value='$Lang::tr{'save'}' />\r
190 </td>\r
191 <td width='10%' align='right'>\r
192 <a href='${General::adminmanualurl}/system.html#shutdown' target='_blank'>\r
193 <img src='/images/web-support.png' title='$Lang::tr{'online help en'}' /></a></td>\r
194</tr>\r
195</table>\r
196\r
197END\r
198;\r
199 &Header::closebox();\r
200 print "</form>\n";\r
201} else {\r
202 my $message='';\r
203 my $title='';\r
204 my $refresh = "<meta http-equiv='refresh' content='5; URL=/cgi-bin/index.cgi' />";\r
205 if ($death) {\r
206 $title = $Lang::tr{'shutting down'};\r
207 $message = $Lang::tr{'ipcop has now shutdown'};\r
208 } else {\r
209 $title = $Lang::tr{'rebooting'};\r
210 $message = $Lang::tr{'ipcop has now rebooted'};\r
211 }\r
212 &Header::openpage($title, 0, $refresh);\r
213\r
214 &Header::openbigbox('100%', 'center');\r
215 print <<END\r
216<div align='center'>\r
217<table width='100%' bgcolor='#ffffff'>\r
218<tr><td align='center'>\r
219<br /><br /><img src='/ipcop_big.gif' /><br /><br /><br />\r
220</td></tr>\r
221</table>\r
222<br />\r
223<font size='6'>$message</font>\r
224</div>\r
225END\r
226 ;\r
227}\r
228\r
229&Header::closebigbox();\r
230&Header::closepage();\r
231\r
232\r
233\r
234# Create a named select box containing valid times from quarter to quarter.\r
235sub select_hour_var {\r
236 # Create a variable containing the SELECT with selected value variable name and current value selected\r
237 my $select_hour_var = shift;\r
238 my $selected_hour = shift;\r
239\r
240 my $select_hour = "<select name='$select_hour_var'>";\r
241 my $hh = 0;\r
242 my $mm = 15;\r
243 my $str = '00:00';\r
244 for (my $x=0; $x<(24*4); $x++) {\r
245 my $check = $selected_hour eq $str ? "selected='selected'" : '';\r
246 $select_hour .= "<Option $check value='$str'>$str";\r
247 $str = sprintf("%.02d", $hh) . ":" . sprintf("%.02d", $mm);\r
248 $mm += 15;\r
249 if ($mm==60) {$mm=0; $hh++; }\r
250 }\r
251 $select_hour .= "</select>\n";\r
252 return ($select_hour);\r
253}\r