]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
extrahd.cgi: Store configured drives in a hash
authorStefan Schantl <stefan.schantl@ipfire.org>
Tue, 1 Aug 2023 15:48:31 +0000 (17:48 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 2 Aug 2023 09:11:57 +0000 (09:11 +0000)
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
html/cgi-bin/extrahd.cgi

index f31bc2c4427647c16c0978f26c7e24b3dbbdc07c..bb0c2261021a8ea7b474e480a43bf6c2cf8fe8d1 100644 (file)
@@ -31,6 +31,9 @@ require "${General::swroot}/header.pl";
 my %extrahdsettings = ();
 my $errormessage = "";
 
+# Hash to store the configured drives.
+my %configured_drives;
+
 # SYSFS directory which contains all block device data.
 my $sysfs_block_dir = "/sys/class/block";
 
@@ -187,50 +190,26 @@ if ($errormessage) {
 ############################################################################################################################
 ############################################################################################################################
 
-       print <<END
-               <table border='0' width='600' cellspacing="0">
-END
-;
+&Header::openbox('100%', 'center', $Lang::tr{'extrahd detected drives'});
+
        # Re-read mountpoints.
        %mountpoints = &get_mountpoints();
 
        # Read-in the device config file.
        open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
-       my @configfile = <FILE>;
-       close FILE;
 
        # Loop through the file content.
-       foreach my $entry (sort @configfile) {
-               my ($uuid, $fs, $path) = split( /\;/, $entry );
-               my $color="$Header::colourred";
-
-               # Check if the device is currently mounted.
-               if (&is_mounted($path)) {
-                       $color=$Header::colourgreen;
-               }
+       while (<FILE>) {
+               # Cut the line into pieces.
+               my ($uuid, $fs, $path) = split( /\;/, $_ );
 
-               print <<END
-                       <tr><td colspan="4">&nbsp;</td></tr>
-                       <tr><td align='left'><font color=$color><b>$uuid</b></font></td>
-                               <td align='left'>$fs</td>
-                               <td align='left'>$path</td>
-                               <td align='center'>
-                                       <form method='post' action='$ENV{'SCRIPT_NAME'}'>
-                                               <input type='hidden' name='DEVICE' value='$uuid' />
-                                               <input type='hidden' name='FS' value='$fs' />
-                                               <input type='hidden' name='PATH' value='$path' />
-                                               <input type='hidden' name='ACTION' value='$Lang::tr{'delete'}' />
-                                               <input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
-                                       </form></td></tr>
-END
-;
+               # Add the found entry to the hash of configured drives.
+               $configured_drives{$uuid} = $path;
        }
-       print <<END
-               </table>
-END
-;
 
-&Header::openbox('100%', 'center', $Lang::tr{'extrahd detected drives'});
+       # Close the file handle.
+       close(FILE);
+
        print <<END
                <table border='0' width='600' cellspacing="0">
 END
@@ -270,21 +249,35 @@ END
                        # Get the mountpoint.
                        my $mountpoint = $mountpoints{$partition};
 
+                       # If no mountpoint could be determined try to grab from
+                       # configured drives.
+                       unless($mountpoint) {
+                               my $uuid = $uuids{$partition};
+
+                               # Build uuid string.
+                               $uuid = "UUID=" . $uuid;
+
+                               # Try to obtain a possible moutpoint from configured drives.
+                               $mountpoint = $configured_drives{$uuid} if ($configured_drives{$uuid});
+                       }
+
+                       # Check if the mountpoint is used as root or boot device.
                        if ($mountpoint eq "/" or $mountpoint =~ "^/boot") {
                                $disabled = "disabled";
+
+                       # Check if it is mounted.
                        } elsif(&is_mounted($mountpoint)) {
                                $disabled = "disabled";
-                       }
-
-                       # Omit the used filesystem.
-                       my $fs = $filesystems{$partition};
 
                        # Check if the device is used as swap.
-                       if (&is_swap($partition)) {
+                       } elsif (&is_swap($partition)) {
                                $disabled = "disabled";
                                $mountpoint = "swap";
                        }
 
+                       # Omit the used filesystem.
+                       my $fs = $filesystems{$partition};
+
                        print <<END
 
                        <form method='post' action='$ENV{'SCRIPT_NAME'}'>