]>
Commit | Line | Data |
---|---|---|
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 | |
12 | use 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 | |
18 | require 'CONFIG_ROOT/general-functions.pl';\r | |
19 | require "${General::swroot}/lang.pl";\r | |
20 | require "${General::swroot}/header.pl";\r | |
21 | \r | |
22 | my %cgiparams=();\r | |
23 | my $death = 0;\r | |
24 | my $rebirth = 0;\r | |
25 | my $default_time = '03:15';\r | |
26 | \r | |
27 | &Header::showhttpheaders();\r | |
28 | \r | |
29 | $cgiparams{'ACTION'} = '';\r | |
30 | &Header::getcgihash(\%cgiparams);\r | |
31 | \r | |
32 | if ($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 | |
64 | if ($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 | |
80 | END\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 | |
132 | END\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> </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> </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> </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> </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> </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%'> </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 | |
197 | END\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 | |
225 | END\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 | |
235 | sub 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 |