From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adolf Belka To: development@lists.ipfire.org Subject: Re: [PATCH] logo.cgi: Fix for bug13795 - captive portal not displaying uploaded logo Date: Mon, 06 Jan 2025 18:51:45 +0100 Message-ID: <46c058e6-c1b5-4951-a50c-1ba0d5b9f464@ipfire.org> In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1120444248710799027==" List-Id: --===============1120444248710799027== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Michael, On 06/01/2025 17:28, Michael Tremer wrote: > Hello Adolf, >=20 > I assume this might not fully fix the problem since we don=E2=80=99t know f= or certain if the uploaded file is a JPEG file. I am sorry, I had intended to put something about that into the commit=20 but I forgot to do it. I had various image files which I could check the type of and I found a=20 jpg, a png and a tiff image file. I uploaded each of these in turn and the same image/jpeg content type=20 successfully displayed the uploaded image onto the browser screen. >=20 > I believe this is why have chosen something very generic instead of a speci= fic image type. I assume that we would have to run something to check the cor= rect MIME type of the file before we can send anything. Of course it might be that how I have done it works for now for any=20 (most/some) image files but it could also change in the future. >=20 > https://metacpan.org/release/FITZNER/File-LibMagic-0.96/view/LibMagic.pm >=20 > This could do the job. I can have a look at that link and modify the code if you would prefer that. In the wiki we explicitly say jpg or png only, although as I said I was=20 able to successfully upload a tiff image file and it was displayed. We can maybe discuss further in the conf call to finalise on what I=20 should do. Regards, Adolf. >=20 > -Michael >=20 >> On 6 Jan 2025, at 16:21, Adolf Belka wrote: >> >> - 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 Serve= r Error with >> the same message as with the image file which was "malformed header fro= m script >> 'logo.cgi': Bad header:". >> - I tested it with text, html, image and application. In all cases the err= or 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 t= ested the >> change in my vm testbed and the image was shown in the captive portal c= orrectly. >> - So this change fixes the problem with the logo not being shown but I hav= e 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 >> Signed-off-by: Adolf Belka >> --- >> html/cgi-bin/captive/logo.cgi | 9 +++++---- >> 1 file changed, 5 insertions(+), 4 deletions(-) >> >> 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; >> >> require '/var/ipfire/general-functions.pl'; >> >> +my $q =3D new CGI; >> my $logo =3D "${General::swroot}/captive/logo.dat"; >> >> # Send 404 if logo was not uploaded and exit >> @@ -37,8 +38,8 @@ if (!-e $logo) { >> exit(0); >> } >> >> -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 --=20 Sent from my laptop --===============1120444248710799027==--