Squirrelmailでログインできない(画面が真っ白)の原因と対策

* 本ページはプロモーションが含まれています

ウェブメール老舗のSquirrelmailを運用していたが、急にログインが出来ない症状が出たので調査した。

環境 

  • OS: CentOS 5.9
  • WebServer: Apache 2.2.3
  • PHP: 5.4.10
  • WebMail: Squirrelmail 1.4.16

不具合の原因 

  • 突然、ログインが出来ない
  • ログインページからリダイレクト直後にエラーが表示される
  • ブラウザーによっては、ログインページが真っ白になる

調査 

apacheやphpのログを確認したところ、下記のエラーが出ていた。

Fatal error: Call to undefined function session_unregister() in /var/www/html/webmail/functions/global.php on line 244

いろいろ、ググったところ、function/auth.phpとplugins/compatibility/function.php内のfunction sqauth_save_password($pass)関数が競合しているので、どちらかをコメントアウトすれば良いかも?との記事を見つけたが、解決に至らずに、原因は別にあった。

どうやら、https://php.net/manual/en/function.session-unregister.php によると、session_unregister関数はPHP 5.3.0で非推奨となり、PHP 5.4.0で削除されたとの事。

session_unregisterが使えなくなったと言う事が判明したので、はて?次は何をするべきか、公式のSquirrelmailで情報を探ってみた。

Squirrelmailの公式ホームページによると、

ANNOUNCE: PHP 5.4 Compatibility
Dec 01, 2012 by Paul Lesniewski
With the recent release of PHP version 5.4, some community members have helped identify some small issues which we’ve fixed and made available in our daily snapshot packages located on our downloads page. Especially if you use the Mail Fetch plugin and want to upgrade to PHP 5.4, you should download one of our snapshot packages.

UPDATE:If you are running SquirrelMail under PHP 5.4, please help test and refine the patches found here. There is one patch for each of the two SquirrelMail SVN snapshot versions available on our downloads page.

との事なので、Squirrelmailのバージョンを上げて、一部パッチを当てることで解決しそう。

対策 

  1. 現ディレクトリのバックアップ

    # mv /var/www/html/webmail /var/www/html/webmail.bak

  2. 最新版の取得(要Subversion)安定版

    # svn checkout https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/branches/SM-1_4-STABLE/squirrelmail
    
     /var/www/html/webmail

 

開発版

<pre># svn checkout https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/trunk/squirrelmail /var/www/html/webmail</pre>
  1. 属性変更
    Apacheのユーザ・グループに属性を合わせる必要があるので、

    # chown -R apache:apache webmail 

  2. プラグイン導入
    必要なプラグインをPluginsディレクトリへインストール

  3. 再設定
    サーバ設定やプラグイン等を再設定します

    # cd /var/www/html/webmail/config/

./conf.pl  

データディレクトリが別ディレクトリに保存してあれば、再設定すると良いですが、webmail内に格納してあったら、バックアップディレクトリからコピーしておきましょう。</li> 

  * パッチ適用  
    必ずしもパッチを当てる必要はありません(表示がおかしくなった場合のみ)  
    /var/lib/squirrelmail/dataにデータフォルダがある場合:  
    (正規表現でエラーが出る場合には、メタ文字に¥マークを付けると良い)</p> 
    > find /var/lib/squirrelmail/data/ -name *.pref -exec sed &#8211;in-place &#8216;s/trash\_folder=Trash/trash\_folder=INBOX.Trash/g&#8217; {} \;  
    > find /var/lib/squirrelmail/data/ -name *.pref -exec sed &#8211;in-place &#8216;s/draft\_folder=Drafts/draft\_folder=INBOX.Drafts/g&#8217; {} \;  
    > find /var/lib/squirrelmail/data/ -name *.pref -exec sed &#8211;in-place &#8216;s/sent\_folder=Sent/sent\_folder=INBOX.Sent/g&#8217; {} \;
    
    DB使っている場合:
    
    > UPDATE userprefs SET prefval = &#8216;INBOX.Trash&#8217; WHERE prefkey = &#8216;trash_folder&#8217; AND prefval = &#8216;Trash&#8217;;  
    > UPDATE userprefs SET prefval = &#8216;INBOX.Drafts&#8217; WHERE prefkey = &#8216;draft_folder&#8217; AND prefval = &#8216;Drafts&#8217;;  
    > UPDATE userprefs SET prefval = &#8216;INBOX.Sent&#8217; WHERE prefkey = &#8216;sent_folder&#8217; AND prefval = &#8216;Sent&#8217;;</ol> 

この辺りまで来たら、もう少しです。

設定や環境に不具合がないか、確認URLで表示させてみます  
https://your-squirrelmail-location/src/configtest.phpのように、webmailをインストールしたアドレスにsrc/configtest.phpを付加して確認します。

configtest.phpにアクセスして、エラー箇所がなければ、無事に起動することができました。

### <span id="i-5">補足</span>

参考までに、私の環境では下記のエラーが表示されました。

>  ERROR: You have configured PHP not to allow short tags (short\_open\_tag=off).  
> This shouldn&#8217;t be a problem with SquirrelMail or any plugin coded coded according to the SquirrelMail Coding Guidelines, but if you experience problems with PHP code being displayed in some of the pages and changing setting to &#8220;on&#8221; solves the problem, please file a bug report against the failing plugin. The correct contact information is most likely to be found in the plugin documentation.

↑ php.ini内のshor\_open\_tag=offになっているので、Onにする。設定保存後は要Apache再起動

> ERROR: You have set ja\_JP as your default language, but I cannot find this translation (should be in ../locale/ja\_JP/LC_MESSAGES/squirrelmail.mo). Please note that you have to download translations separately from the main SquirrelMail package.

↑ conf.plで設定した言語のロケールがないエラーなので、別途導入

  1. 最新版のロケールをダウンロード  
    <https://sourceforge.net/projects/squirrelmail/files/locales/>
  2. 解凍 
    <pre># tar jxvf ja_JP-1.4.18-20090526.tar.bz2 </pre>

  3. インストール 
    <pre># ./install</pre>
    
    webmailのパスを指定(/var/www/html/webmail)</li> 
    
      * poファイル作成 
        <pre># cd /var/www/html/webmail/po

compilepo ja_JP  


See also