]> git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/extrahd.cgi
core50: add graphs.pl.
[ipfire-2.x.git] / html / cgi-bin / extrahd.cgi
1 #!/usr/bin/perl
2 ###############################################################################
3 # #
4 # IPFire.org - A linux based firewall #
5 # Copyright (C) 2010 IPFire Team <info@ipfire.org> #
6 # #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
11 # #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
16 # #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
19 # #
20 ###############################################################################
21
22 use strict;
23 # enable only the following on debugging purpose
24 #use warnings;
25 #use CGI::Carp 'fatalsToBrowser';
26
27 require '/var/ipfire/general-functions.pl';
28 require "${General::swroot}/lang.pl";
29 require "${General::swroot}/header.pl";
30
31 my %extrahdsettings = ();
32 my $message = "";
33 my $errormessage = "";
34 my $size = "";
35 my $ok = "true";
36 my @tmp = ();
37 my @tmpline = ();
38 my $tmpentry = "";
39 my @devices = ();
40 my @deviceline = ();
41 my $deviceentry = "";
42 my @scans = ();
43 my @scanline = ();
44 my $scanentry = "";
45 my @partitions = ();
46 my @partitionline = ();
47 my $partitionentry = "";
48 my $devicefile = "/var/ipfire/extrahd/devices";
49 my $scanfile = "/var/ipfire/extrahd/scan";
50 my $partitionsfile = "/var/ipfire/extrahd/partitions";
51 system("/usr/local/bin/extrahdctrl scanhd ide");
52 system("/usr/local/bin/extrahdctrl scanhd partitions");
53
54 &Header::showhttpheaders();
55
56 ### Values that have to be initialized
57 $extrahdsettings{'PATH'} = '';
58 $extrahdsettings{'FS'} = '';
59 $extrahdsettings{'DEVICE'} = '';
60 $extrahdsettings{'ACTION'} = '';
61 $extrahdsettings{'UUID'} = '';
62
63 &General::readhash("${General::swroot}/extrahd/settings", \%extrahdsettings);
64 &Header::getcgihash(\%extrahdsettings);
65
66 &Header::openpage('ExtraHD', 1, '');
67 &Header::openbigbox('100%', 'left', '', $errormessage);
68
69 ############################################################################################################################
70 ############################################################################################################################
71
72 if ($extrahdsettings{'ACTION'} eq $Lang::tr{'add'})
73 {
74 open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
75 @devices = <FILE>;
76 close FILE;
77 foreach $deviceentry (sort @devices)
78 {
79 @deviceline = split( /\;/, $deviceentry );
80 if ( "$extrahdsettings{'PATH'}" eq "$deviceline[2]" ) {
81 $ok = "false";
82 $errormessage = "You can't mount $extrahdsettings{'DEVICE'} to $extrahdsettings{'PATH'}, because there is already a device mounted.";
83 }
84 if ( "$extrahdsettings{'PATH'}" eq "/" ) {
85 $ok = "false";
86 $errormessage = "You can't mount $extrahdsettings{'DEVICE'} to root /.";
87 }
88 }
89
90 if ( "$ok" eq "true" ) {
91 open(FILE, ">> $devicefile" ) or die "Unable to write $devicefile";
92 print FILE <<END
93 UUID=$extrahdsettings{'UUID'};$extrahdsettings{'FS'};$extrahdsettings{'PATH'};
94 END
95 ;
96 system("/usr/local/bin/extrahdctrl mount $extrahdsettings{'PATH'}");
97 }
98 }
99 elsif ($extrahdsettings{'ACTION'} eq $Lang::tr{'delete'})
100 {
101 if ( `/usr/local/bin/extrahdctrl umount $extrahdsettings{'PATH'}` ) {
102 open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
103 @tmp = <FILE>;
104 close FILE;
105 open( FILE, "> $devicefile" ) or die "Unable to write $devicefile";
106 foreach $deviceentry (sort @tmp)
107 {
108 @tmpline = split( /\;/, $deviceentry );
109 if ( $tmpline[2] ne $extrahdsettings{'PATH'} )
110 {
111 print FILE $deviceentry;
112 }
113 }
114 close FILE;
115 } else {
116 $errormessage = "Can't umount $extrahdsettings{'PATH'}. Maybe the device is in use?";
117 }
118 }
119
120 if ($errormessage) {
121 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
122 print "<class name='base'>$errormessage\n";
123 print "&nbsp;</class>\n";
124 &Header::closebox();
125 }
126
127 ############################################################################################################################
128 ############################################################################################################################
129
130 &Header::openbox('100%', 'center', $Lang::tr{'extrahd'});
131 open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
132 @devices = <FILE>;
133 close FILE;
134 print <<END
135 <table border='0' width='600' cellspacing="0">
136 END
137 ;
138 foreach $deviceentry (sort @devices)
139 {
140 @deviceline = split( /\;/, $deviceentry );
141 my $color="$Header::colourred";
142 if ( ! `/bin/mountpoint $deviceline[2] | grep " not "` ) {
143 $color=$Header::colourgreen;
144 }
145 print <<END
146 <tr><td colspan="5">&nbsp;
147 <tr><td align='center'><font color=$color><b>$deviceline[0]</b></font>
148 <td align='center'>$deviceline[1]
149 <td align='center'>$deviceline[2]
150 <td align='center'>
151 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
152 <input type='hidden' name='DEVICE' value='$deviceline[0]' />
153 <input type='hidden' name='FS' value='$deviceline[1]' />
154 <input type='hidden' name='PATH' value='$deviceline[2]' />
155 <input type='hidden' name='ACTION' value=$Lang::tr{'delete'} />
156 <input type='image' alt=$Lang::tr{'delete'} src='/images/delete.gif' />
157 </form>
158 END
159 ;
160 }
161 print <<END
162 </table>
163 END
164 ;
165
166 &Header::closebox();
167
168 &Header::openbox('100%', 'center', $Lang::tr{'extrahd detected drives'});
169 print <<END
170 <table border='0' width='600' cellspacing="0">
171 END
172 ;
173 open( FILE, "< $scanfile" ) or die "Unable to read $scanfile";
174 @scans = <FILE>;
175 close FILE;
176 open( FILE, "< $partitionsfile" ) or die "Unable to read $partitionsfile";
177 @partitions = <FILE>;
178 close FILE;
179 foreach $scanentry (sort @scans)
180 {
181 @scanline = split( /\;/, $scanentry );
182 print <<END
183 <tr><td colspan="5">&nbsp;
184 <tr><td align='left' colspan="2"><b>/dev/$scanline[0]</b>
185 <td align='center' colspan="2">$scanline[1]
186 END
187 ;
188 foreach $partitionentry (sort @partitions)
189 {
190 @partitionline = split( /\;/, $partitionentry );
191 if ( "$partitionline[0]" eq "$scanline[0]" ) {
192 $size = int($partitionline[1] / 1024);
193 print <<END
194 <td align='center'>$Lang::tr{'size'} $size MB
195 <td>&nbsp;
196 <tr><td colspan="5">&nbsp;
197 END
198 ;
199 }
200 }
201
202 foreach $partitionentry (sort @partitions)
203 {
204 @partitionline = split( /\;/, $partitionentry );
205 if (( "$partitionline[0]" =~ /^$scanline[0]/ ) && !( "$partitionline[2]" eq "" )) {
206 $size = int($partitionline[1] / 1024);
207 print <<END
208 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
209 <tr><td align="left" colspan=5><b>UUID=$partitionline[2]</b></td></tr>
210 <tr>
211 <td align="list">/dev/$partitionline[0]</td>
212 <td align="center">$Lang::tr{'size'} $size MB
213 <td align="center"><select name="FS">
214 <option value="auto">auto</option>
215 <option value="ext3">ext3</option>
216 <option value="reiserfs">reiserfs</option>
217 <option value="vfat">fat</option>
218 <option value="ntfs-3g">ntfs (experimental)</option>
219 </select>
220 <td align="center"><input type='text' name='PATH' value=/mnt/harddisk />
221 <td align="center">
222 <input type='hidden' name='DEVICE' value='$partitionline[0]' />
223 <input type='hidden' name='UUID' value='$partitionline[2]' />
224 <input type='hidden' name='ACTION' value=$Lang::tr{'add'} />
225 <input type='image' alt=$Lang::tr{'add'} src='/images/add.gif' />
226 </form>
227
228 END
229 ;
230 }
231 }
232 }
233
234 print <<END
235 <tr><td align="center" colspan="5">If your device isn't listed here, you need to install or load the driver.<br />If you can see your device but no partitions you have to create them first.
236 </table>
237 END
238 ;
239 &Header::closebox();
240
241 &Header::closebigbox();
242 &Header::closepage();