From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] logo.cgi: Fix for bug13795 - captive portal not displaying uploaded logo Date: Mon, 06 Jan 2025 16:28:42 +0000 Message-ID: In-Reply-To: <20250106162144.20480-1-adolf.belka@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0288853931301625816==" List-Id: --===============0288853931301625816== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hello Adolf, I assume this might not fully fix the problem since we don=E2=80=99t know for= certain if the uploaded file is a JPEG file. I believe this is why have chosen something very generic instead of a specifi= c image type. I assume that we would have to run something to check the corre= ct MIME type of the file before we can send anything. https://metacpan.org/release/FITZNER/File-LibMagic-0.96/view/LibMagic.pm This could do the job. -Michael > On 6 Jan 2025, at 16:21, Adolf Belka wrote: >=20 > - Something changed in some package in CU188 that means that the existing m= ethod 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 c= ontent-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 erro= r message > about a bad header was provided. > - Did some searching and found an alternative way to explicitly print the h= eader 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 te= sted the > change in my vm testbed and the image was shown in the captive portal cor= rectly. > - 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 fr= om working > any more. >=20 > Fixes: Bug13795 > Tested-by: Adolf Belka > Signed-off-by: Adolf Belka > --- > html/cgi-bin/captive/logo.cgi | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) >=20 > diff --git a/html/cgi-bin/captive/logo.cgi b/html/cgi-bin/captive/logo.cgi > index 8f292b171..09fe784b8 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(a)ipfire.org = # > +# Copyright (C) 2016-2024 IPFire Team = # > # = # > -# 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. = # > @@ -29,6 +29,7 @@ use File::Copy; >=20 > require '/var/ipfire/general-functions.pl'; >=20 > +my $q =3D new CGI; > my $logo =3D "${General::swroot}/captive/logo.dat"; >=20 > # Send 404 if logo was not uploaded and exit > @@ -37,8 +38,8 @@ if (!-e $logo) { > exit(0); > } >=20 > -print "Content-Type: application/octet-stream\n\n"; > - > # Send image data > +print $q->header(-type=3D>"image/jpeg"); > +binmode STDOUT; > File::Copy::copy $logo, \*STDOUT; > exit(0); > --=20 > 2.47.1 >=20 --===============0288853931301625816==--