Perl Forum User -> MT User, 密码问题原来很简单

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