THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


plus de connexion, comme si les mots de passe étaient faux...

Offline


Le problème vient de la fonction OLD_PASSWORD() qui n'est plus disponible sous MySQL 5.7

SOLUTION
--------------
1) Ajouter le code suivant au fichier fonctions/divers.php

	function shittyPassword($input, $hex = true) {
		$nr    = 1345345333;
		$add   = 7;
		$nr2   = 0x12345671;
		$tmp   = null;
		$inlen = strlen($input);
		for ($i = 0; $i < $inlen; $i++) {
			$byte = substr($input, $i, 1);
			if ($byte == ' ' || $byte == "\t") {
				continue;
			}
			$tmp = ord($byte);
			$nr ^= ((($nr & 63) + $add) * $tmp) + (($nr << 8) & 0xFFFFFFFF);
			$nr2 += (($nr2 << 8) & 0xFFFFFFFF) ^ $nr;
			$add += $tmp;
		}
		$out_a  = $nr & ((1 << 31) - 1);
		$out_b  = $nr2 & ((1 << 31) - 1);
		$output = sprintf("%08x%08x", $out_a, $out_b);
		if ($hex) {
			return $output;
		}

		return hexHashToBin($output);
	}

	function hexHashToBin($hex) {
		$bin = "";
		$len = strlen($hex);
		for ($i = 0; $i < $len; $i += 2) {
			$byte_hex  = substr($hex, $i, 2);
			$byte_dec  = hexdec($byte_hex);
			$byte_char = chr($byte_dec);
			$bin .= $byte_char;
		}

		return $bin;
	}

2) dans le fichier classes/Administrateur.class.php, remplacer

function charger($identifiant, $motdepasse){
			$query = sprintf("select * from $this->table where identifiant='%s' and motdepasse=OLD_PASSWORD('%s')",
			mysql_real_escape_string($identifiant)...

par

function charger($identifiant, $motdepasse){
			$motdepasse = shittyPassword($motdepasse);
			$query = sprintf("select * from $this->table where identifiant='%s' and motdepasse='%s'",

et

function crypter(){
			$query = "select OLD_PASSWORD('$this->motdepasse') as resultat";
			$resul = $this->query($query);
			$this->motdepasse = mysql_result($resul, 0, "resultat");

		}

par

function crypter(){
			$this->motdepasse = shittyPassword($this->motdepasse);
		}

3) dans le fichier classes/Client.class.php, remplacer

function charger($email, $motdepasse){
			$query = sprintf("select * from $this->table where email='%s' and motdepasse=OLD_PASSWORD('%s')",
			mysql_real_escape_string($email),...

par

function charger($email, $motdepasse){
			$motdepasse = shittyPassword($motdepasse);
			$query = sprintf("select * from $this->table where email='%s' and motdepasse='%s'",

et

function crypter(){
			$query = "select OLD_PASSWORD('$this->motdepasse') as resultat";
			$resul = $this->query($query);
			$this->motdepasse = mysql_result($resul, 0, "resultat");

		}

par

function crypter(){
			$this->motdepasse = shittyPassword($this->motdepasse);
		}