Ticket #4129 (closed defect: fixed)

Opened 8 years ago

Last modified 8 years ago

SlavePNEでPOP3などのストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない

Reported by: pnetan Assigned to: urabe
Priority: major Milestone: OpenPNE2.14.1
Component: 指定しない Version: 2.12.x & 2.14.x
Keywords: OpenPNE2.12.14 Cc:

Description (Last modified by urabe)

■現象

slavePNE を有効にした際、利用するストレージによっては、 アカウントやパスワードが正しくない場合も認証が通ってしまう。

■原因

返り値がboolではなく、オブジェクトのエラーで、それが、Trueと判断されてしまう。

■今回のバグ対象のストレージ

pop3
@return mixed true on Success/ PEAR_ERROR on error
return PEAR::raiseError
return false;
return true;

array
@return boolean|PEAR_Error Error object or boolean
return PEAR::raiseError
return false;
return true;

DB
@return mixed Error object or boolean
return PEAR::raiseError
return false;
return true;

DBLite
@return mixed Error object or boolean
return PEAR::raiseError
return false
return true

DB_osc
@return mixed Error object or boolean
PEAR::raiseError
return false
return true

File
@return mixed Error object or boolean
File_Passwd
http://pear.php.net/manual/ja/package.fileformats.file-passwd.file-passwd.staticauth.php

LDAP
@return boolean( PHPドキュメント間違い)
return PEAR::raiseError
return false
return true

MDB
mixed Error object or boolean
return PEAR::raiseError
return false
return true

MDB2
@return mixed Error object or boolean
return PEAR::raiseError
return false
return true

Multiple
@return boolean|PEAR_Error Error object or boolean
return PEAR::raiseError
return false
return true

PEAR
@return mixed Error object or boolean
return PEAR::raiseError
return true


SOAP5
return true;
return false;
PEAR::raiseError

■修正内容

返り値の型がboolで値がtrueのときのみtrueを返し、それ以外はfalseを返すように修正

■関連情報

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=21123より転機

slavePNE(POP3)認証を有効にしている場合、メールアドレス登録、変更などにおいて、どんなパスワードを入力しても認証OKとなる。

例えば、初期ログイン後メールアドレスを登録し、そのメールアドレス宛に登録完了のメールが届きます。そのメールに記載されているURLをクリックすると、メールアドレス登録画面が表示され、パスワードの入力が促されます。このパスワードに何を入れても認証がクリアしたことになる。

原因(推察)
lib/db/etc.php内のdb_common_authenticate_password関数において、返り値はfetchDataメソッドの返り値そのままを返している。

POP3認証の場合、fetchDataの返り値は、trueか、PEAR_ERRORオブジェクトである。

ところが、これを受け取るdb_member_regist_mail関数の内部では、
if (!db_common_authenticate_password($c_member_id, $password)) {
return false;
}
としている。

その為、認証エラーでPEAR_ERRORオブジェクトが帰ってきたとしても、if文では、真と判断され、処理が実行します。

対処法としては、このifの条件式を変更するなどが考えられる。

結構重要な問題なので、早めの対処を期待します。
よろしくお願いします。 

Change History

07/21/09 14:48:00 changed by urabe

  • owner changed from nobody to urabe.
  • status changed from new to assigned.

07/27/09 11:40:51 changed by urabe

  • description changed.

以下のリビジョンでコミットしました。

修正箇所

  • webapp/lib/db/etc.php
  • webapp/modules/setup/do/setup.php

07/27/09 11:41:58 changed by urabe

  • description changed.

07/27/09 12:02:52 changed by urabe

  • keywords changed from 再現待ち to 確認中.

型もtrueの時だけ、trueを返すように修正しました

07/27/09 12:08:48 changed by ebihara

  • keywords changed from 確認中 to 差し戻し.
  • webapp/modules/setup/do/setup.php の以下の変更で、 if の式直後にスペースがありません。 PEAR 標準コーディング規約違反です。
    if ($result !== true){ 
    

07/27/09 12:16:47 changed by urabe

  • keywords changed from 差し戻し to 確認中.

以下のリビジョンで修正しました。

if文の式のあとにスペースがなかったので追加

07/27/09 12:20:25 changed by urabe

  • description changed.

07/27/09 13:11:00 changed by urabe

  • description changed.

07/31/09 11:23:45 changed by urabe

  • milestone set to OpenPNE2.14.1.

07/31/09 11:57:23 changed by kiwa

  • keywords changed from 確認中 to OpenPNE2.12.14 確認中.
  • version changed from 2.14.x to 2.12.x & 2.14.x.
  • summary changed from メールアドレス登録、変更時のパスワード認証に不備がある to SlavePNEでDB以外のストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない.

08/04/09 14:48:31 changed by shingo

  • keywords changed from OpenPNE2.12.14 確認中 to OpenPNE2.12.14 テスト待ち.

確認しました

(follow-up: ↓ 13 ) 08/12/09 14:35:17 changed by kiwa

  • keywords changed from OpenPNE2.12.14 テスト待ち to OpenPNE2.12.14 差し戻し.

storage: POP3 の場合、1番メンバーの認証が正しく行われなくてもセットアップが完了してしまいます。

// OPENPNE_AUTH_MODE がslavepneの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] =
array(
'storage'=>"POP3",
'options'=>array(
    'host' => 'xxx.example.com',
    ),
);

(in reply to: ↑ 12 ) 08/12/09 14:45:25 changed by kiwa

  • keywords changed from OpenPNE2.12.14 差し戻し to OpenPNE2.12.14 テスト待ち.

Replying to kiwa:

config.php にて、OPENPNE_AUTH_MODE の指定に誤りがありました。とりけします。

08/14/09 15:40:34 changed by urabe

  • summary changed from SlavePNEでDB以外のストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない to SlavePNEでPOP3などのストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない.

08/14/09 15:57:57 changed by imamura623

  • keywords changed from OpenPNE2.12.14 テスト待ち to OpenPNE2.12.14.
  • status changed from assigned to closed.
  • resolution set to fixed.

動作テストし問題がないことを確認しました。
動作テストでは下記の3つのストレージについて実施しました。

  • POP3
  • array
  • DB

その他のストレージについては、ソース側でエラーをだすパターンが予測できるため確認に足りると判断しテストを省略しました。