Specifičnosti u izdanju Wheezy 3: nema subjecta ni pošiljatelja u Squirrelmailu

Kada smo u roku sat vremena zaprimili četiri upita kako "Squirrelmail ne prikazuje imena pošiljatelja", shvatili smo da bi problem mogao biti ozbiljan, te da smo potcijenili koliko je "vjeverica" zapravo popularna među korisnicima. Problem je prouzročio novi PHP, a o njemu ćemo, sasvim smo sigurni, još slušati narednih mjeseci.

NAPOMENA: Od inačice paketa squirrelmail-cn 2:1.4.23+2 ne treba primjenjivati ovu zakrpu.

U PHP-u 5.4.0 koji dolazi s izdanjem Wheezy, nalazi se mnogo promjena koje će na različite načine utjecati na rad vaših aplikacija. U ovoj situaciji sa Squirrelmailom glavni problem leži u funkciji htmlspecialchars. Kod ove funkcije se pretpostavljeni encoding promijenio s ISO8859-1 na moderniji UTF-8. Rezultat je vraćanje praznog niza umjesto dekodiranog stringa, što se vrlo zorno može vidjeti u praznom popisu poruka unutar Squirrelmailovog prozora. Panika vaših korisnika je sada već očigledna, a telefoni počinju zvoniti.

Navedeni problem je u Debianu uočen na vrijeme, i zakrpa je ubačena prije izlaska Wheezya. To je i dokumentirano u datoteci /usr/share/doc/squirrelmail/changelog.Debian.gz:

squirrelmail (2:1.4.23~svn20120406-2) unstable; urgency=medium

* Add patch from upstream to cope with changed behaviour of
htmlspecialchars() in PHP 5.4 (closes: #664895).

No, čini se da to nije bilo dovoljno. U logovima i dalje možete vidjeti poruke poput ove:

[Mon Nov 11 08:15:19 2013] [error] [client X.149.Y.252] PHP Warning:  htmlspecialchars(): charset `is
o-8859-2' not supported, assuming utf-8 in /usr/share/squirrelmail/functions/strings.php on line 1508

Iako smo našli nekoliko rješenja, nijedno nije bilo potpuno. Primjerice, pošiljatelji bi bili prikazani, ali sadržaj maila nakon otvaranja ne bi bio vidljiv ukoliko bi sadržavao naše znakove, ili znakove iz drugih skupova znakova iz standarda ISO-8859-*. No, na forumu squirrelmaila na razvojnom sjedištu sourceforge.net našli smo rješenje kolege Tonija Rutar-Lokara iz Slovenije:

http://sourceforge.net/p/squirrelmail/bugs/2806/?page=6

Zakrpa je kratka, i iako rabi malo više resursa, zasada predstavlja zadovoljavajuće rješenje. U datoteci /usr/share/squirrelmail/functions/strings.php u funkciji sm_encode_html_special_chars treba zakomentirati tri retka (početak je u retku 1507), te potom dodati par novih redaka:

#if (check_php_version(5, 2, 3))
# return htmlspecialchars($string, $flags, $encoding, $double_encode);
#return htmlspecialchars($string, $flags, $encoding);

$string=iconv ($encoding, 'UTF-8',$string);

if (check_php_version(5, 2, 3))
$ret=htmlspecialchars($string, $flags, 'UTF-8', $double_encode);
else $ret=htmlspecialchars($string, $flags, 'UTF-8');
return iconv ('UTF-8', $encoding, $ret);

Kako je zakrpa neslužbena i stara samo dva tjedna, vidjet ćemo hoćemo li je isporučiti u obliku novog paketa squirrelmail-cn, ili ćemo problem riješiti na neki drugi način.

Dodano 10.12.2014.

Ukoliko vam i dalje ne radi prikaz poruka, probajte recept kolege Kružića:

U datoteci /usr/share/squirrelmail/functions/i18n.php sam u funkciji charset_decode unio sljedeću promjenu (187. redak):

if (! $save_html)  $string = sm_encode_html_special_chars($string);

sam zamijenio s

if (! $save_html)  $string = sm_encode_html_special_chars($string, ENT_COMPAT, 'ISO-8859-1');

 

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)