]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
backup.cgi: Read and deliver the requested backup in pieces
authorStefan Schantl <stefan.schantl@ipfire.org>
Wed, 10 May 2023 09:52:03 +0000 (11:52 +0200)
committerPeter Müller <peter.mueller@ipfire.org>
Thu, 11 May 2023 20:07:13 +0000 (20:07 +0000)
Read-in the requested backup file line by line and directly deliver this
as stream to the client.

This fixes the problem with very big backups on systems with very
limited RAM, which resulted in an OOM kill of the CGI and delivery
process.

Fixes #13096.

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Reviewed-by: Michael Tremer <michael.tremer@ipfire.org>
html/cgi-bin/backup.cgi

index 1c01cb286f97e5a129e7d1c3372518b86c21c141..3888ccbff92e463d0041c9d3e3d8d8edd448e548 100644 (file)
@@ -366,6 +366,13 @@ sub deliver_file() {
 
        # Deliver content
        open(FILE, "<$file") or die "Unable to open $file: $!";
-       print <FILE>;
+
+       # Read the file line by line and send it
+       # to the client.
+       while (<FILE>) {
+               print $_;
+       }
+
+       # Close file handle.
        close(FILE);
 }