Webboard

Pełna wersja: [S] PHP-Fusion -> SMF -> MyBB
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
nazwa i wersja skryptu, z którego migrowano: PHP-Fusion 6
wersja skryptu MyBB: 1.6.1
adres forum: -
opis problemu:

Witam!

Właśnie zakończyłem migrację z forum PHP-Fusion 6 do SMF i następnie z SMF do MyBB. Pierwsza migracja zakończyła się pełnym sukcesem, przy drugiej nie skopiowały się ani avatary, ani załączniki, jednak największym problemem jest tabela użytkowników. PHP-Fusion trzyma hasła w bazie w postaci md5(hasło), SMF robi to identycznie, dlatego po pierwszej konwersji hashe w tabeli uzytkownikow SMF byly identyczne jak w PHP-Fusionie i mozna bylo sie zalogowac. Po konwersji na MyBB hashe pojawily sie w kolumnie passwordconvert, a typ jest ustawiony na smf11. Plugin konwertowania jest wlaczony, ale najwyrazniej nie dziala poprawnie. Kazda proba logowania (niezaleznie czy dobra czy zla) konczy sie dodaniem losowych wartosci do kolumn password, salt, loginkey. Kiedy dodalem triggery do kodu zauwazylem, ze funkcja SMF11 przekazuje haslo do SMF, a ta zwraca true dla poprawnego hasla w pogrubionej linijce:
Kod PHP:
// Authentication for SMF   
    
function authenticate_smf($password)
    {
        if(
crypt($passwordsubstr($password02)) == $this->user['passwordconvert'])
        {
            return 
true;
        }
        else if(
my_strlen($this->user['passwordconvert']) == 32 && $this->md5_hmac(preg_replace("#\_smf1\.1\_import(\d+)$#i"''$this->user['username']), $password) == $this->user['passwordconvert'])
        {
            return 
true;
        }
[
b]        else if(my_strlen($this->user['passwordconvert']) == 32 && md5($password) == $this->user['passwordconvert'])
        {
            return 
true;
        }[/
b]
        return 
false;
    } 

Pomimo tego nie mozna sie zalogowac na forum. Co robie zle? Bardzo prosze o pomoc.
Dlatego nie lubię konwersji... ^^
: Tutaj jest chyba podobny problem. Rozwiązanie:
W funkcji loginconvert_validate_password_from_uid zmienić:
Kod:
if(isset($user['passwordconvert']) && trim($user['passwordconvert']) != '' && trim($user['passwordconverttype']) != '' && trim($user['password']) == '')
na
Kod:
if(isset($user['passwordconvert']) && trim($user['passwordconvert']) != '' && trim($user['passwordconverttype']) != '')
Spróbuj, na razie tylko tak mogę pomóc.
Praktycznie nic to nie zmieniło, na konto testowe moge sie zalogowac, ale uzytkownicy dalej nie moga o0
Hm, hm. A możesz wyczyścić cache i usunąć te "złe klucze" z bazy?
Ciarki mi ida po plecach... przegladalem kody zrodlowe, ale jest tak, jak napisalem: php-fusion trzyma hasla zakodowane md5. Z niewiadomych powodow, jezeli wygeneruje hashe jakis hasel przez jeden z generatorow dostepnych w internecie, to czesc z nich zgadza sie z tymi w bazie, a czesc nie. Pomimo tych roznic PHP-fusion poprawnie loguje tych uzytkownikow. Moze jest jakas przeladowana md5(); ? Jest to w ogole mozliwe?

SPRAWA SIE WYJASNILA:
Hasla niektorych uzytkownikow byly podwojnie hashowane podczas upgradu z poprzednich wersji (~5 lat temu o0 )

Pomogl dla Schocker :)