[v2,1/4] logo.cgi: Fix for bug13795 - captive portal not displaying uploaded logo

Message ID 20250109190441.18122-1-adolf.belka@ipfire.org
State New
Headers
Series [v2,1/4] logo.cgi: Fix for bug13795 - captive portal not displaying uploaded logo |

Commit Message

Adolf Belka Jan. 9, 2025, 7:04 p.m. UTC
  - This v2 version now includes the use of File-LibMagic to identify the specific
   content type and apply that to the modified header command so that image/png or
   image/jp[eg are used depending on the type of image provided.
- Something changed in some package in CU188 that means that the existing method of
   printing the content type to the browser no longer worked.
- I tested it in some stand alone code and even if using text/txt for the content-type
   print statement the File::Copy::copy then resulted in an Internal Server Error with
   the same message as with the image file which was "malformed header from script
   'logo.cgi': Bad header:".
- I tested it with text, html, image and application. In all cases the error message
   about a bad header was provided.
- Did some searching and found an alternative way to explicitly print the header info
   which is what I have used in this patch change.
- With this approach, in the stand alone code, I was able to get an image, html code or
   text shown in the browser correctly and without any error message.
- I then used this new method in the logo.cgi code as submitted here and tested the
   change in my vm testbed and the image was shown in the captive portal correctly.
- So this change fixes the problem with the logo not being shown but I have been unable
   to identify what changed to stop the method that worked prior to CU188 from working
   any more.

Fixes: Bug13795
Tested-by: Adolf Belka <adolf.belka@ipfire.org>
Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
---
 html/cgi-bin/captive/logo.cgi | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
  

Patch

diff --git a/html/cgi-bin/captive/logo.cgi b/html/cgi-bin/captive/logo.cgi
index 8f292b171..0b09476aa 100644
--- a/html/cgi-bin/captive/logo.cgi
+++ b/html/cgi-bin/captive/logo.cgi
@@ -2,9 +2,9 @@ 
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2016  Alexander Marx alexander.marx@ipfire.org                #
+# Copyright (C) 2016-2024  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
-# This program is free software you can redistribute it and/or modify         #
+# This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
 # the Free Software Foundation, either version 3 of the License, or           #
 # (at your option) any later version.                                         #
@@ -22,6 +22,7 @@ 
 use strict;
 use CGI;
 use File::Copy;
+use File::LibMagic;
 
 # enable only the following on debugging purpose
 #use warnings;
@@ -29,7 +30,11 @@  use File::Copy;
 
 require '/var/ipfire/general-functions.pl';
 
+my $q = new CGI;
+my $magic = File::LibMagic->new;
+
 my $logo = "${General::swroot}/captive/logo.dat";
+my $file_info = $magic->info_from_filename($logo);
 
 # Send 404 if logo was not uploaded and exit
 if (!-e $logo) {
@@ -37,8 +42,8 @@  if (!-e $logo) {
 	exit(0);
 }
 
-print "Content-Type: application/octet-stream\n\n";
-
 # Send image data
+print $q->header(-type=>$file_info->{mime_type});
+binmode STDOUT;
 File::Copy::copy $logo, \*STDOUT;
 exit(0);