--- /dev/null
+#!/usr/bin/perl
+#
+# IPFire Scripts
+#
+# This code is distributed under the terms of the GPL
+#
+# (c) The IPFire Team
+#
+
+use strict;
+# enable only the following on debugging purpose
+# use warnings;
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my %extrahdsettings = ();
+my $ok = "true";
+my @devices = ();
+my @deviceline = ();
+my $deviceentry = "";
+my $devicefile = "/var/ipfire/extrahd/devices";
+my $fstab = "/var/ipfire/extrahd/fstab";
+
+### Values that have to be initialized
+$extrahdsettings{'PATH'} = '';
+$extrahdsettings{'FS'} = '';
+$extrahdsettings{'DEVICE'} = '';
+$extrahdsettings{'ACTION'} = '';
+
+open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
+@devices = <FILE>;
+close FILE;
+
+############################################################################################################################
+############################################################################################################################
+
+print "$ARGV[0] $ARGV[1]";
+
+if ( "$ARGV[0]" eq "mount" ) {
+ system("/bin/cp -f /etc/fstab $fstab");
+
+ foreach $deviceentry (sort @devices)
+ {
+ @deviceline = split( /\;/, $deviceentry );
+ if ( "$ARGV[1]" eq "$deviceline[2]" ) {
+ print "Insert /dev/$deviceline[0] ($deviceline[1]) --> $deviceline[2] into /etc/fstab!\n";
+ unless ( -d $deviceline[2] ) { system("/bin/mkdir -p $deviceline[2] && chmod 0777 $deviceline[2]"); }
+ open(FILE, ">>$fstab");
+ print FILE "/dev/$deviceline[0]\t$deviceline[2]\t$deviceline[1]\tdefaults\t0\t0\n";
+ close(FILE);
+ }
+ }
+
+ system("/bin/cp -f $fstab /etc/fstab");
+ if ( `/bin/mount -a` ) {
+ exit(0);
+ } else {
+ exit(1);
+ }
+
+} elsif ( "$ARGV[0]" eq "umount" ) {
+ system("/bin/umount $ARGV[1]");
+ if ( ! `/bin/mount | /bin/fgrep $ARGV[1]` ) {
+ system("/bin/cp -f /etc/fstab $fstab");
+ system("/bin/fgrep -v $ARGV[1] <$fstab >/etc/fstab");
+ print "Succesfully umounted $ARGV[1].\n";
+ exit(0);
+ } else {
+ print "Can't umount $ARGV[1].\n";
+ exit(1);
+ }
+
+} else {
+ print "Usage: $0 (mount|umount) mountpoint\n";
+}
+
+############################################################################################################################
+############################################################################################################################
--- /dev/null
+#!/usr/bin/perl
+#
+# IPFire CGIs
+#
+# This code is distributed under the terms of the GPL
+#
+# (c) The IPFire Team
+#
+
+use strict;
+# enable only the following on debugging purpose
+use warnings;
+use CGI::Carp 'fatalsToBrowser';
+
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+my %extrahdsettings = ();
+my $message = "";
+my $errormessage = "";
+my $size = "";
+my $ok = "true";
+my @tmp = ();
+my @tmpline = ();
+my $tmpentry = "";
+my @devices = ();
+my @deviceline = ();
+my $deviceentry = "";
+my @scans = ();
+my @scanline = ();
+my $scanentry = "";
+my @partitions = ();
+my @partitionline = ();
+my $partitionentry = "";
+my $devicefile = "/var/ipfire/extrahd/devices";
+my $scanfile = "/var/ipfire/extrahd/scan";
+my $partitionsfile = "/var/ipfire/extrahd/partitions";
+system("/usr/local/bin/scanhd ide");
+system("/usr/local/bin/scanhd partitions");
+
+&Header::showhttpheaders();
+
+### Values that have to be initialized
+$extrahdsettings{'PATH'} = '';
+$extrahdsettings{'FS'} = '';
+$extrahdsettings{'DEVICE'} = '';
+$extrahdsettings{'ACTION'} = '';
+
+&General::readhash("${General::swroot}/extrahd/settings", \%extrahdsettings);
+&Header::getcgihash(\%extrahdsettings);
+
+&Header::openpage('ExtraHD', 1, '');
+&Header::openbigbox('100%', 'left', '', $errormessage);
+
+############################################################################################################################
+############################################################################################################################
+
+if ($extrahdsettings{'ACTION'} eq $Lang::tr{'add'})
+{
+ open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
+ @devices = <FILE>;
+ close FILE;
+ foreach $deviceentry (sort @devices)
+ {
+ @deviceline = split( /\;/, $deviceentry );
+ if ( "$extrahdsettings{'PATH'}" eq "$deviceline[2]" ) {
+ $ok = "false";
+ $errormessage = "You can't mount $extrahdsettings{'DEVICE'} to $extrahdsettings{'PATH'}, because there is already a device mounted.";
+ }
+ if ( "$extrahdsettings{'PATH'}" eq "/" ) {
+ $ok = "false";
+ $errormessage = "You can't mount $extrahdsettings{'DEVICE'} to root /.";
+ }
+ }
+
+ if ( "$ok" eq "true" ) {
+ open(FILE, ">> $devicefile" ) or die "Unable to write $devicefile";
+ print FILE <<END
+$extrahdsettings{'DEVICE'};$extrahdsettings{'FS'};$extrahdsettings{'PATH'};
+END
+;
+ system("/usr/local/bin/extrahdctrl mount $extrahdsettings{'PATH'}");
+ }
+}
+elsif ($extrahdsettings{'ACTION'} eq $Lang::tr{'delete'})
+{
+ if ( `/usr/local/bin/extrahdctrl umount $extrahdsettings{'PATH'}` ) {
+ open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
+ @tmp = <FILE>;
+ close FILE;
+ open( FILE, "> $devicefile" ) or die "Unable to write $devicefile";
+ foreach $deviceentry (sort @tmp)
+ {
+ @tmpline = split( /\;/, $deviceentry );
+ if ( $tmpline[2] ne $extrahdsettings{'PATH'} )
+ {
+ print FILE $deviceentry;
+ }
+ }
+ close FILE;
+ } else {
+ $errormessage = "Can't umount $extrahdsettings{'PATH'}. Maybe the device is in use?";
+ }
+}
+
+if ($errormessage) {
+ &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+ print "<class name='base'>$errormessage\n";
+ print " </class>\n";
+ &Header::closebox();
+}
+
+############################################################################################################################
+############################################################################################################################
+
+&Header::openbox('100%', 'center', 'ExtraHD');
+ open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
+ @devices = <FILE>;
+ close FILE;
+ print <<END
+ <table border='0' width='600' cellspacing="0">
+END
+;
+ foreach $deviceentry (sort @devices)
+ {
+ @deviceline = split( /\;/, $deviceentry );
+ my $color="$Header::colourred";
+ if ( `/bin/mount | /bin/fgrep $deviceline[2] | /bin/fgrep /dev/$deviceline[0]` ) {
+ $color=$Header::colourgreen;
+ }
+ print <<END
+ <tr><td colspan="5">
+ <tr><td align='center'><font color=$color><b>/dev/$deviceline[0]</b></font>
+ <td align='center'>$deviceline[1]
+ <td align='center'>$deviceline[2]
+ <td align='center'>
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <input type='hidden' name='DEVICE' value='$deviceline[0]' />
+ <input type='hidden' name='FS' value='$deviceline[1]' />
+ <input type='hidden' name='PATH' value='$deviceline[2]' />
+ <input type='hidden' name='ACTION' value=$Lang::tr{'delete'} />
+ <input type='image' alt=$Lang::tr{'delete'} src='/images/delete.gif' />
+ </form>
+END
+;
+ }
+ print <<END
+ </table>
+END
+;
+
+&Header::closebox();
+
+&Header::openbox('100%', 'center', 'Gefundene Laufwerke');
+ print <<END
+ <table border='0' width='600' cellspacing="0">
+END
+;
+ open( FILE, "< $scanfile" ) or die "Unable to read $scanfile";
+ @scans = <FILE>;
+ close FILE;
+ open( FILE, "< $partitionsfile" ) or die "Unable to read $partitionsfile";
+ @partitions = <FILE>;
+ close FILE;
+ foreach $scanentry (sort @scans)
+ {
+ @scanline = split( /\;/, $scanentry );
+ print <<END
+ <tr><td colspan="5">
+ <tr><td align='center'><b>/dev/$scanline[0]</b>
+ <td align='center' colspan="2">$scanline[1]
+END
+;
+ foreach $partitionentry (sort @partitions)
+ {
+ @partitionline = split( /\;/, $partitionentry );
+ if ( "$partitionline[0]" eq "$scanline[0]" ) {
+ $size = int($partitionline[1] / 1024);
+ print <<END
+ <td align='center'>$Lang::tr{'size'} $size MB
+ <td>
+ <tr><td colspan="5">
+END
+;
+ }
+ }
+
+ foreach $partitionentry (sort @partitions)
+ {
+ @partitionline = split( /\;/, $partitionentry );
+ if (( "$partitionline[0]" =~ /^$scanline[0]/ ) && ! ( "$partitionline[0]" eq "$scanline[0]" )) {
+ $size = int($partitionline[1] / 1024);
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align="center" bgcolor='#EAEAEA'>/dev/$partitionline[0]
+ <td align="center" bgcolor='#EAEAEA'>$Lang::tr{'size'} $size MB
+ <td align='center' bgcolor='#EAEAEA'><select name="FS">
+ <option value="auto">auto</option>
+ <option value="ext3">ext3</option>
+ <option value="reiserfs">reiserfs</option>
+ <option value="vfat">fat</option>
+ <option value="ntfs-3g">ntfs (experimental)</option>
+ </select>
+ <td align="center" bgcolor='#EAEAEA'><input type='text' name='PATH' value=/mnt/harddisk />
+ <td align="center">
+ <input type='hidden' name='DEVICE' value='$partitionline[0]' />
+ <input type='hidden' name='ACTION' value=$Lang::tr{'add'} />
+ <input type='image' alt=$Lang::tr{'add'} src='/images/add.gif' />
+ </form>
+
+END
+;
+ }
+ }
+ }
+
+ print <<END
+ <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.
+ </table>
+END
+;
+&Header::closebox();
+
+&Header::closebigbox();
+&Header::closepage();
# Create all directories
for i in addon-lang alcatelusb auth backup ca certs cnx_pci connscheduler crls ddns dhcp dhcpc dmzholes \
- eagle-usb eciadsl ethernet isdn key langs logging main mbmon menu.d modem net-traffic nfs optionsfw outgoing/bin patches pakfire portfw \
+ eagle-usb eciadsl ethernet extrahd/bin isdn key langs logging main mbmon menu.d modem net-traffic nfs optionsfw outgoing/bin patches pakfire portfw \
ppp private proxy/advanced qos/bin red remote snort time urlfilter/autoupdate urlfilter/bin upnp vpn wakeonlan wireless xtaccess ; do \
mkdir -p $(CONFIG_ROOT)/$$i; \
done
for i in auth/users backup/include.user backup/exclude.user \
certs/index.txt ddns/config ddns/noipsettings ddns/settings ddns/ipcache dhcp/settings \
dhcp/fixleases dhcp/advoptions dmzholes/config ethernet/aliases ethernet/settings \
+ extrahd/scan extrahd/devices extrahd/partitions extrahd/settings
isdn/settings main/hosts main/settings optionsfw/settings outgoing/settings outgoing/rules pakfire/settings \
portfw/config ppp/settings-1 ppp/settings-2 ppp/settings-3 ppp/settings-4 \
ppp/settings-5 ppp/settings proxy/settings proxy/advanced/settings remote/settings qos/settings qos/classes qos/subclasses qos/level7config qos/portconfig \
cp $(DIR_SRC)/config/cfgroot/backup-exclude.hardware $(CONFIG_ROOT)/backup/exclude.hardware
cp $(DIR_SRC)/config/cfgroot/connscheduler-lib.pl $(CONFIG_ROOT)/connscheduler/lib.pl
cp $(DIR_SRC)/config/cfgroot/connscheduler.conf $(CONFIG_ROOT)/connscheduler
+ cp $(DIR_SRC)/config/extrahd/* $(CONFIG_ROOT)/extrahd/bin/
cp $(DIR_SRC)/config/cfgroot/mbmon-settings $(CONFIG_ROOT)/mbmon/settings
cp $(DIR_SRC)/config/menu/* $(CONFIG_ROOT)/menu.d/
cp $(DIR_SRC)/config/cfgroot/modem-defaults $(CONFIG_ROOT)/modem/defaults