忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 23:05 |
Mantis1.2.5 メールを使わないでMantisを利用する
Mantisではことあるごとにメールを送信する仕様になっています。
http://www.alles.or.jp/~sogabe/mantis/manual/1.4.5.html
まあバグトラッキングシステムであるから当然といえば当然ですが。

ですがXAMPPでメールを送信するには外部SMTPサーバを使用したりMercuryを起動したりする必要があって面倒なので、メール無しで使えるようにしてみます。
ここに同じ改造をしている人がいましたが、残念ながらソースは公開していません。

config_inc.php
	$g_validate_email = 'OFF';
	$g_check_mx_record = 'OFF';
	$g_send_reset_password = 'OFF';
	$g_enable_email_notification = 'OFF';
$g_enable_email_notification = 'OFF'を指定すると新規ユーザ登録ができなくなります。
Mantisは新規ユーザ登録時、ユーザ名を登録するとパスワードを自動発行してメールで送付する仕組みになっているので、パスワードを自動発行するけどメールは送付しないようにします。

core/print_api.php
	# prints the signup link
	function print_signup_link() {
		if ( ( ON == config_get_global( 'allow_signup' ) ) &&
		     ( LDAP != config_get_global( 'login_method' ) ) &&
		     ( ON == config_get( 'enable_email_notification' ) )
		   ) {
			print_bracket_link( 'signup_page.php', lang_get( 'signup_link' ) );
		}
	}
	
	↓
	function print_signup_link() {
		if ( ( ON == config_get_global( 'allow_signup' ) ) &&
		     ( LDAP != config_get_global( 'login_method' ) )
		   ) {
			print_bracket_link( 'signup_page.php', lang_get( 'signup_link' ) );
		}
	}
パスワードはランダムに作成されているので、メールが送信されないと確認不能になります。
手っ取り早く初期パスワードをとりあえずメールアドレスと同じにしてしまいます。
公開サーバでこんなことやったらアウトですが、そんな状況であればメール送信できないってことがありえないのでまあいいでしょう。
何故IDではなくメアドかというと、パスワードを作成してる関数の引数にメアドがあってIDがないからというだけです。

core/authentication_api.php
	function auth_generate_random_password( $p_email ) {
		$t_val = mt_rand( 0, mt_getrandmax() ) + mt_rand( 0, mt_getrandmax() );
		$t_val = md5( $t_val );
		return utf8_substr( $t_val, 0, 12 );
	}
	↓
	function auth_generate_random_password( $p_email ) {
		return $p_email;
	}

	function auth_generate_confirm_hash( $p_user_id ) {
		$t_confirm_hash_generator = config_get( 'password_confirm_hash_magic_string' );
		$t_password = user_get_field( $p_user_id, 'password' );
		$t_last_visit = user_get_field( $p_user_id, 'last_visit' );
		$t_confirm_hash = md5( $t_confirm_hash_generator . $t_password . $t_last_visit );
		return $t_confirm_hash;
	}
	↓
	function auth_generate_confirm_hash( $p_user_id ) {
		return $p_user_id;
	}
これで完成!
さっそく登録。
SELECT * FROM `mantis_user_table` ;
id 6
username hoge
realname  
email dummy@example.com
password 32066a2f550b9a8b3f3c8b25c918de37
enabled 1
protected 0
access_level 25
login_count 0
lost_password_request_count 0
failed_login_count 0
cookie_string 32ff7a31ef3159f0d6be9e1e4fb6699b7b6a7aade80f86269e0768eb1e419579
last_visit 1304299714
date_created 1304299714

無事登録されました。
ではログイン!

あなたのアカウントが無効化もしくはブロックされているか、入力した利用者名かパスワードが間違っています。

あれ?

ちなみにログインチェックしてるのはcore/authentication_api.phpのauth_attempt_login()なのですが、無駄に超ややこしくて一体何をやってるのかよくわかりません。
誰かこの関数の動作を説明してくれ。
PR


2011/09/30 21:51 | Comments(2) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

MantisBTはパスワードを単純にmd5でハッシュ化したものを比較に使用しているようです。
本文のSELECT結果にあるようにパスワードにdummy@example.comを使用したということでしたら、単純にmd5で計算した場合はpassword欄の文字列にはならないかと思います。
auth_generate_random_password( $p_email )の返値をmd5( $p_email )とすれば良いのではないでしょうか?

私は深くソースを追いかけていないため、ハッシュ値がずれた原因がどこにあるかは推測になってしまい申し訳ありません…。
posted by 原瀧 at 2011/10/01 01:34 [ コメントを修正する ]
コメントありがとうございます。

実はこれ書いたの3ヶ月くらい前なのでいまいち覚えてないのですが、
たしかauth_generate_random_password()はパスワードそのものを作成する関数だった気がします。名前的に。
んでメールには作成したパスワードを送付して、ハッシュ化はその後別のところでやってたようなないような。
でないとパスワードの原文がどこからも確認不能になってしまいますし。

まあうろ覚えなので暇なときにでも見返してみたいと思います。
posted by NurseAngel at 2011/10/03 21:57 [ コメントを修正する ]

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/10/02 | HOME | ZF1.11 ZendX_JQuery>>
忍者ブログ[PR]