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