From 13ff4837c5695b28c114f8c821ad6f86efdfee33 Mon Sep 17 00:00:00 2001
From: Thibault Dockx <thibault.dockx@fusiondirectory.org>
Date: Mon, 24 Feb 2025 11:34:50 +0000
Subject: [PATCH] :sparkles: feat(password-methods) - change password-methods

Adapt password-methods to php8.2
---
 include/password-methods/class_passwordMethod.inc      | 10 +++++-----
 include/password-methods/class_passwordMethodCrypt.inc |  4 ++--
 include/password-methods/class_passwordMethodSasl.inc  |  4 ++--
 include/password-methods/class_passwordMethodSmd5.inc  |  2 +-
 include/password-methods/class_passwordMethodSsha.inc  |  2 +-
 .../password-methods/class_passwordMethodSsha512.inc   |  2 +-
 6 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/include/password-methods/class_passwordMethod.inc b/include/password-methods/class_passwordMethod.inc
index 841a0889b..954daa58b 100755
--- a/include/password-methods/class_passwordMethod.inc
+++ b/include/password-methods/class_passwordMethod.inc
@@ -112,7 +112,7 @@ abstract class passwordMethod
         $pwd = $attrs['userPassword'][0];
       }
     }
-    return preg_match("/^[^\}]*+\}!/", $pwd);
+    return preg_match("/^[^\}]*+\}!/", (string) $pwd);
   }
 
   /*! \brief       Locks an account by adding a '!' as prefix to the password hashes.
@@ -188,14 +188,14 @@ abstract class passwordMethod
       if (empty($pwd)) {
         $pwd = passwordMethodEmpty::LOCKVALUE;
       } else {
-        $pwd = preg_replace("/(^[^\}]+\})(.*$)/",   "\\1!\\2",  $pwd);
+        $pwd = preg_replace("/(^[^\}]+\})(.*$)/",   "\\1!\\2",  (string) $pwd);
       }
     } else {
       /* Unlock entry */
       if ($pwd == passwordMethodEmpty::LOCKVALUE) {
         $pwd = '';
       } else {
-        $pwd = preg_replace("/(^[^\}]+\})!(.*$)/",  "\\1\\2",   $pwd);
+        $pwd = preg_replace("/(^[^\}]+\})!(.*$)/",  "\\1\\2",   (string) $pwd);
       }
     }
     $modify['userPassword'] = $pwd;
@@ -338,7 +338,7 @@ abstract class passwordMethod
   static function _extract_method ($password_hash): string
   {
     $hash = static::get_hash_name();
-    if (preg_match("/^\{$hash\}/i", $password_hash)) {
+    if (preg_match("/^\{$hash\}/i", (string) $password_hash)) {
       return $hash;
     }
 
@@ -391,7 +391,7 @@ abstract class passwordMethod
     global $config;
     if ($config->get_cfg_value('strictPasswordRules') == 'TRUE') {
       // Do we have UTF8 characters in the password?
-      return ($password == utf8_decode($password));
+      return ($password == mb_convert_encoding((string) $password, 'ISO-8859-1'));
     }
 
     return TRUE;
diff --git a/include/password-methods/class_passwordMethodCrypt.inc b/include/password-methods/class_passwordMethodCrypt.inc
index 924e0c602..77a1995c9 100755
--- a/include/password-methods/class_passwordMethodCrypt.inc
+++ b/include/password-methods/class_passwordMethodCrypt.inc
@@ -148,11 +148,11 @@ class passwordMethodCrypt extends passwordMethod
    */
   static function _extract_method ($password_hash): string
   {
-    if (!preg_match('/^{crypt}/i', $password_hash)) {
+    if (!preg_match('/^{crypt}/i', (string) $password_hash)) {
       return "";
     }
 
-    $password_hash = preg_replace('/^{[^}]+}!?/', '', $password_hash);
+    $password_hash = preg_replace('/^{[^}]+}!?/', '', (string) $password_hash);
 
     if (preg_match("/^[a-zA-Z0-9.\/][a-zA-Z0-9.\/]/", $password_hash)) {
       return "crypt/standard-des";
diff --git a/include/password-methods/class_passwordMethodSasl.inc b/include/password-methods/class_passwordMethodSasl.inc
index ba7b9a2d5..c6889c024 100755
--- a/include/password-methods/class_passwordMethodSasl.inc
+++ b/include/password-methods/class_passwordMethodSasl.inc
@@ -44,8 +44,8 @@ class passwordMethodSasl extends passwordMethod
   function __construct ($dn = '', $userTab = NULL)
   {
     global $config;
-    $this->realm  = trim($config->get_cfg_value('saslRealm', ''));
-    $this->exop   = trim($config->get_cfg_value('saslExop', ''));
+    $this->realm  = trim((string) $config->get_cfg_value('saslRealm', ''));
+    $this->exop   = trim((string) $config->get_cfg_value('saslExop', ''));
 
     if ($dn == '' || $dn == 'new') {
       return;
diff --git a/include/password-methods/class_passwordMethodSmd5.inc b/include/password-methods/class_passwordMethodSmd5.inc
index b44b3ea14..47e524a8b 100755
--- a/include/password-methods/class_passwordMethodSmd5.inc
+++ b/include/password-methods/class_passwordMethodSmd5.inc
@@ -65,7 +65,7 @@ class passwordMethodSmd5 extends passwordMethod
 
   function checkPassword ($pwd, $hash): bool
   {
-    $hash = base64_decode(substr($hash, 6));
+    $hash = base64_decode(substr((string) $hash, 6));
     $salt = substr($hash, 16);
     $hash = substr($hash, 0, 16);
     $nhash = pack('H*', md5($pwd . $salt));
diff --git a/include/password-methods/class_passwordMethodSsha.inc b/include/password-methods/class_passwordMethodSsha.inc
index 6cc0c01c8..63f17b98e 100755
--- a/include/password-methods/class_passwordMethodSsha.inc
+++ b/include/password-methods/class_passwordMethodSsha.inc
@@ -73,7 +73,7 @@ class passwordMethodSsha extends passwordMethod
 
   function checkPassword ($pwd, $hash): bool
   {
-    $hash = base64_decode(substr($hash, 6));
+    $hash = base64_decode(substr((string) $hash, 6));
     $salt = substr($hash, 20);
     $hash = substr($hash, 0, 20);
     if (function_exists('sha1')) {
diff --git a/include/password-methods/class_passwordMethodSsha512.inc b/include/password-methods/class_passwordMethodSsha512.inc
index 5a52f7bf9..5767aeb26 100755
--- a/include/password-methods/class_passwordMethodSsha512.inc
+++ b/include/password-methods/class_passwordMethodSsha512.inc
@@ -70,7 +70,7 @@ class passwordMethodSsha512 extends passwordMethod
 
   function checkPassword ($pwd, $hash): bool
   {
-    $hash = base64_decode(substr($hash, 9));
+    $hash = base64_decode(substr((string) $hash, 9));
     $salt = substr($hash, 64);
     $hash = substr($hash, 0, 64);
     if (function_exists('hash')) {
-- 
GitLab