1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

野兽再来问你2个问题

本帖由 扬子2005-11-22 发布。版面名称:源码讨论

  1. 扬子

    扬子 Member

    注册:
    2005-09-05
    帖子:
    949
    赞:
    2
    一、转换完毕后,请先到 vB 后台更新计数器!
    然后用当前目录下的 functions_login.php 覆盖 vB 目录/includes/functions_login.php。
    如果版本不统一或者已作修改,请按照以下步骤编辑 vB 目录/includes/functions_login.php:
    找到
    -------------------------------------------------------------------------------------
    if (
    $bbuserinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $bbuserinfo['salt']), '') AND
    $bbuserinfo['password'] != md5($md5password . $bbuserinfo['salt']) AND
    $bbuserinfo['password'] != iif($md5password_utf, md5($md5password_utf . $bbuserinfo['salt']), '')
    )
    {
    return false;
    }
    -------------------------------------------------------------------------------------
    修改为:
    -------------------------------------------------------------------------------------
    // 检验是否为动网转换过来的用户。
    if (strlen($bbuserinfo['password']) == 16)
    {
    // 检验 16 位的 MD5 是否匹配。
    if (
    $bbuserinfo['password'] != iif($password AND !$md5password, substr(md5($password), 8, 16), '') AND
    $bbuserinfo['password'] != substr($md5password, 8, 16) AND
    $bbuserinfo['password'] != iif($md5password_utf, substr($md5password_utf, 8, 16), '')
    )
    {
    return false;
    }

    // 获取新密码。
    include('./includes/functions_user.php');
    $userSalt = fetch_user_salt(3);
    if (!empty($password) AND !isset($md5password))
    {
    $newPassword = md5(md5($password) . $userSalt);
    }
    else if (!empty($md5password))
    {
    $newPassword = md5($md5password . $userSalt);
    }
    else
    {
    $newPassword = md5($md5password_utf . $userSalt);
    }

    // 更新该用户的密码。
    $DB_site->query('
    UPDATE ' . TABLE_PREFIX . 'user
    SET
    password = "' . addslashes($newPassword) . '",
    salt = "' . addslashes($userSalt) . '"
    WHERE userid = ' . $bbuserinfo['userid']
    );
    }
    else
    {
    if (
    $bbuserinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $bbuserinfo['salt']), '') AND
    $bbuserinfo['password'] != md5($md5password . $bbuserinfo['salt']) AND
    $bbuserinfo['password'] != iif($md5password_utf, md5($md5password_utf . $bbuserinfo['salt']), '')
    )
    {
    return false;
    }
    }
    -------------------------------------------------------------------------------------
    这个是DVBBS7.0转换到Version 3.0.7 后的“检验是否为动网转换过来的用户”代码,请问我又从Version 3.0.7后升级到vBulletin 3.5.1版本,这样上面的代码就不能用了,请问如何更改includes/functions_login.php?? 上面代码在Version 3.0.7 里我试过了,好用的,可是升级后不知道如何更改了。
     
  2. 扬子

    扬子 Member

    注册:
    2005-09-05
    帖子:
    949
    赞:
    2
    第二个问题,VBB是否可以实现这样的功能,因为我的论坛有很多版块,以后会更多,主要是把学校里的5大系,100多个班级全部纳入进来了,所以……
    功能详见落伍的:http://www.im286.com/forumdisplay.php?fid=52
     
  3. yeshou

    yeshou New Member

    注册:
    2005-09-06
    帖子:
    7,067
    赞:
    34
    这个修改模板就可以实现

     
  4. yeshou

    yeshou New Member

    注册:
    2005-09-06
    帖子:
    7,067
    赞:
    34
    用文件比较器对比一下 在相应的地方坐修改就可以了

     
  5. 扬子

    扬子 Member

    注册:
    2005-09-05
    帖子:
    949
    赞:
    2
    我已经把新版的functions_login.php里的
    if ($vbulletin->userinfo = $vbulletin->db->query_first("SELECT userid, usergroupid, membergroupids, username, password, salt FROM " . TABLE_PREFIX . "user WHERE username = '" . $vbulletin->db->escape_string(htmlspecialchars_uni($username)) . "'"))
    {
    if (
    $vbulletin->userinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $vbulletin->userinfo['salt']), '') AND
    $vbulletin->userinfo['password'] != iif($md5password, md5($md5password . $vbulletin->userinfo['salt']), '') AND
    $vbulletin->userinfo['password'] != iif($md5password_utf, md5($md5password_utf . $vbulletin->userinfo['salt']), '')
    )
    {
    $return_value = false;


    全部替换成这样:
    // 检验是否为动网转换过来的用户。
    if (strlen($vbulletin->userinfo['password']) == 16)
    {
    // 检验 16 位的 MD5 是否匹配。
    if (
    $vbulletin->userinfo['password'] != iif($password AND !$md5password, substr(md5($password), 8, 16), '') AND
    $vbulletin->userinfo['password'] != substr($md5password, 8, 16) AND
    $vbulletin->userinfo['password'] != iif($md5password_utf, substr($md5password_utf, 8, 16), '')
    )
    {
    return false;
    }

    // 获取新密码。
    include('./includes/functions_user.php');
    $userSalt = fetch_user_salt(3);
    if (!empty($password) AND !isset($md5password))
    {
    $newPassword = md5(md5($password) . $userSalt);
    }
    else if (!empty($md5password))
    {
    $newPassword = md5($md5password . $userSalt);
    }
    else
    {
    $newPassword = md5($md5password_utf . $userSalt);
    }

    // 更新该用户的密码。
    $DB_site->query('
    UPDATE ' . TABLE_PREFIX . 'user
    SET
    password = "' . addslashes($newPassword) . '",
    salt = "' . addslashes($userSalt) . '"
    WHERE userid = ' . $vbulletin->userinfo['userid']
    );
    }
    else
    {
    if (
    $vbulletin->userinfo['password'] != iif($password AND !$md5password, md5(md5($password) . $vbulletin->userinfo['salt']), '') AND
    $vbulletin->userinfo['password'] != md5($md5password . $vbulletin->userinfo['salt']) AND
    $vbulletin->userinfo['password'] != iif($md5password_utf, md5($md5password_utf . $vbulletin->userinfo['salt']), '')
    )
    {
    return false;
    }
    }
     
  6. 扬子

    扬子 Member

    注册:
    2005-09-05
    帖子:
    949
    赞:
    2
    改后还是不行,野兽你最好了,帮帮弄个完整的贴上来吧。
     
  7. joey

    joey New Member

    注册:
    2005-10-04
    帖子:
    52
    赞:
    2
    http://17cp.com/bbs/showthread.php?p=622#post622

    可参照如下代码
    PHP:
    [code]        //兼容动网论坛密码验证

            
    if (!$vbulletin->userinfo['salt'] AND (strcmp($vbulletin->userinfo['password'], iif($password AND !$md5passwordsubstr(md5($password), 816), '')) == OR strcmp($vbulletin->userinfo['password'], substr($md5password816) == 0)))

            {

                require_once(
    DIR '/includes/functions_user.php');

                
    $vbulletin->userinfo['salt'] = fetch_user_salt(3);

                
    $vbulletin->userinfo['password'] = iif($password AND !$md5passwordmd5(md5($password) . $vbulletin->userinfo['salt']), iif($md5passwordmd5($md5password $vbulletin->userinfo['salt']), md5($md5password_utf $vbulletin->userinfo['salt'])));

                
    $vbulletin->db->query_write("UPDATE " TABLE_PREFIX "user

                                    SET salt = '" 
    addslashes(htmlspecialchars_uni($vbulletin->userinfo['salt'])) . "',

                                    password = '" 
    addslashes(htmlspecialchars_uni($vbulletin->userinfo['password'])) . "'

                              WHERE username = '" 
    addslashes(htmlspecialchars_uni($username)) . "'");

            }

            else if (

                
    $vbulletin->userinfo['password'] != iif($password AND !$md5passwordmd5(md5($password) . $vbulletin->userinfo['salt']), '') AND

                
    $vbulletin->userinfo['password'] != iif($md5passwordmd5($md5password $vbulletin->userinfo['salt']), '') AND

                
    $vbulletin->userinfo['password'] != iif($md5password_utfmd5($md5password_utf $vbulletin->userinfo['salt']), '')

            )

            
    // 兼容动网论坛密码验证修改结束[/code]