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