Bonjour,
Je souhaiterais utiliser les identifiants piwigo dans une autre appli (perso) par une authentification apache/mysql, juste pour ne pas tenir à jour 2 bases de données utilisateurs.
Il me semble avoir fait ce qu'il fallait dans ma configuration apache, mais j'ai une erreur :
AH01617: user Chris: authentication failure for "/video": Password Mismatch
Je n'arrive pas à diagnostiquer si cela vient d'une méthode de hashage du mot de passe par piwigo qui serait incompatible avec le module apache (mais ce que j'ai lu me laisse penser le contraire), et dans ce cas comment y remédier, ou si c'est une erreur dans ma config que voici :
DBDriver mysql DBDParams "host=localhost,dbname=mabase,user=apache,pass=mypassword" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 <Directory /var/www/localhost/htdocs/video> AuthType Basic AuthName "Videos" AuthBasicProvider socache dbd AuthnCacheProvideFor dbd AuthnCacheContext vps1 Require valid-user AuthDBDUserPWQuery "SELECT password FROM piwigo_users WHERE username = %s" </Directory>
Un petit coupe de pouce ne sera pas superflu.
Merci d'avance.
Version de Piwigo: 11.4.0
Version de PHP: 7.4.19
Version de MySQL: 8.0.23
Version de Apache : 2.4.26
Hors ligne
En fait, je pense que ma config n'est pas en cause puisqu'en utilisant une autre table
create table mysql_auth ( username varchar(255) not null, passwd varchar(255), primary key (username) );
Et en y ajoutant le même user, mot de passe généré par htpasswd -nbs ou htpasswd (sha) -nbB (brcypt) ou encore htpasswd -nbm (MD5), cela fonctionne.
Hors ligne
Bonjour,
oui en batchant une table, en exemple dans ta 2eme appli créer une table automatique (comme si c'était une sauvegarde à la volée) puis supprime structure puis insère en auto la table 1 des données à chaque fois il appelle le fichier.
A très vite
Hors ligne
Franchement, j'ai relu un bon nombre de fois, mais je ne comprends rien à ce que tu proposes.
De toutes les façons, je ne veux pas créer une autre table puisque le sujet initial c'est d'utiliser les identifiants qui SONT dans la table de piwigo.
Je veux juste savoir comment adapter piwigo à l'authentification apache.
Hors ligne
Bon, à force d'étudier le code, j'ai trouvé une solution, que je ne serai pas loin d'appeler LA solution à une nuance (d'importance) près
--- functions_user.inc.php.orig 2021-05-03 17:59:18.044738074 +0200 +++ functions_user.inc.php 2021-05-13 22:08:51.727449387 +0200 @@ -1000,7 +1000,7 @@ // We use the portable hash feature from phpass because we can't be sure // Piwigo runs on PHP 5.3+ (and won't run on an older version in the // future) - $pwg_hasher = new PasswordHash(13, true); + $pwg_hasher = new PasswordHash(13, false); } return $pwg_hasher->HashPassword($password);
Et avec ça, le "hashage" du mot de passe devient compatible apache (à condition évidemment de réinitialiser les mots de passe suite à cette modif).
J'aurais évidemment largement préféré que cela passe par une option de configuration, puisque cela ne serait pas impacté par les mises à jour, et c'est pour ça que je postais ici, en espérant qu'un dev passerait par là et serait en mesure de me donner THE solution ;)
Hors ligne
Pour éviter de changer un fichier du core tu peux utiliser la clé de configuration pwg_password_hash (cf include/config_default.inc.php) en utilisant ta propre fonction qui n'aura comme modification que celle que tu as apportée.
Hors ligne
nicolas a écrit:
Pour éviter de changer un fichier du core tu peux utiliser la clé de configuration pwg_password_hash (cf include/config_default.inc.php) en utilisant ta propre fonction qui n'aura comme modification que celle que tu as apportée.
Ah bon ?
Non, plus sérieusement, je le sais bien tout ça, sinon, je n'aurais même pas pris le temps de venir poster ma solution ici.
Mais ce que vous proposez n'est pas du tout rentable, pour 2 raisons.
1) ça fait refaire tout un travail déjà fait, juste pour UN paramètre.
2) je passerai ensuite à côté de toutes les modifications (concernant cette partie du code) qu'apporteront les mises à jour. A tel point que si un jour, les dev suivent ma demande, et font de ce paramètre une option de configuration, je n'en profiterai même pas.
Alors que c'est si simple d'en faire juste une option, qui servira à tous ceux qui auront un jour ou l'autre le même besoin que moi, sans chacun refaire une partie de piwigo à sa sauce.
D'autant que si le dev en a fait un paramètre du constructeur de PasswordHash alors qu'il est systématiquement appelé avec true dans le code, c'est bien qu'il a envisagé que ça ne soit pas toujours le cas. Du coup, si ce n'est pas une option de configuration, ça n'a plus aucun intérêt.
De plus, passer ce paramètre de true à false juste dans cette fonction serait sans doute une erreur. Il faut le modifier partout, et là, on est très loin de juste changer la fonction de pwg_password_hash
Surcharger une fonction, c'est la solution quand aucune autre n'est possible.
La véritable bonne solution à mon sens c'est que le code soit modifié tel que :
--- functions_user.inc.php.orig 2021-05-03 17:59:18.044738074 +0200 +++ functions_user.inc.php 2021-05-14 16:04:02.315436550 +0200 @@ -1000,7 +1000,7 @@ // We use the portable hash feature from phpass because we can't be sure // Piwigo runs on PHP 5.3+ (and won't run on an older version in the // future) - $pwg_hasher = new PasswordHash(13, true); + $pwg_hasher = new PasswordHash(13, $conf['portable_hashes']); } return $pwg_hasher->HashPassword($password); @@ -1058,7 +1058,7 @@ require_once(PHPWG_ROOT_PATH.'include/passwordhash.class.php'); // We use the portable hash feature - $pwg_hasher = new PasswordHash(13, true); + $pwg_hasher = new PasswordHash(13, $conf['portable_hashes']); } return $pwg_hasher->CheckPassword($password, $hash);
avec une option :
$conf['portable_hashes'] = false;
(false dans mon cas, true par défaut)
Hors ligne