This is a SiteLog of Easun's WebBlog。
装了自带 Community Pack 1.6 的 Movable Type 4.21 Pro,也用 Community Pack 功能建立了测试的 MT Forum,初衷是想用这个MT Forum 取代 基于 LB5000 ES Lite 建立的本站半废弃状态的 Perl Forum 。
简单的作了测试,帖子的转移很简单,用Perl写个小玩意,导出成 MT 系统能认识的文本就足够了。而User的转移貌似出现的密码问题上了。
当初匆匆检测功能,没有细思量,总之, Perl Forum 采用的 MD5 加密密码,而 MT User 的密码则是采用随机数和原始密码用 Unix crypt function 来加密的。貌似转化起来很是有点问题。
好久没有看原代码了,今天晚上有点时间,看了看 MT 关于 Auth 的代码。发现其实很简单,在用户输入的时候多一重判断就是。
思路有了,代码也就很Easy了:)
临时用 hint 字段存储 md5 后的 Perl Forum 密码,设特定的MT User 密码字段为 (esb),然后检测md5($pass),判断,转化就是。
简单的修改如下:
找到 ${MTDIR}lib/MT/Auth/MT.pm,定位函数 sub is_valid_password ,
在
return $crypted ? $real_pass eq $pass :
crypt($pass, $real_pass) eq $real_pass;
上方加设以下代码:
if ($real_pass eq '(esb)') { my $esb_hint = $author->column('hint'); ($esb_hint,my $real_hint) = split(/\#esb\#/,$esb_hint); require Digest::MD5; my $md5_pass = Digest::MD5::md5_hex($pass); if ($md5_pass eq $esb_hint){ $author->set_password($pass); $author->hint($real_hint); # $author->column('hint', $real_hint); $author->save or die $author->errstr; return 1; } return 0; }
完成后测试一切OK,现在缺少的就是等一个比较用空的时候,彻底迁移 Perl Forum :D