From 43ee7484334f99fcb7122cc66ed3c831f94ff553 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Thu, 15 Oct 2009 20:43:30 +0200
Subject: [PATCH] Support for kmd5 passcrypt method

Ignore-this: c809bd207504f78e84685612b0a668a7

This is a MD5 based hashing method used in the Unclassified NewsBoard forum
software (which is used for DokuWiki's supprt forum)

darcs-hash:20091015184330-7ad00-38680848952bdb46052dcf3597fa5e91f892ca51.gz
---
 inc/auth.php                                    | 9 +++++++++
 lib/plugins/config/settings/config.metadata.php | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/inc/auth.php b/inc/auth.php
index 9be5c19b4..684885890 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -872,6 +872,7 @@ function act_resendpwd(){
  *   crypt - Unix crypt
  *   mysql - MySQL password (old method)
  *   my411 - MySQL 4.1.1 password
+ *   kmd5  - Salted MD5 hashing as used by UNB
  *
  * @author  Andreas Gohr <andi@splitbrain.org>
  * @return  string  The crypted password
@@ -942,6 +943,11 @@ function auth_cryptPassword($clear,$method='',$salt=null){
             return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
         case 'my411':
             return '*'.sha1(pack("H*", sha1($clear)));
+        case 'kmd5':
+            $key = substr($salt, 16, 2);
+            $hash1 = strtolower(md5($key . md5($clear)));
+            $hash2 = substr($hash1, 0, 16) . $key . substr($hash1, 16);
+            return $hash2;
         default:
             msg("Unsupported crypt method $method",-1);
     }
@@ -980,6 +986,9 @@ function auth_verifyPassword($clear,$crypt){
         $method = 'mysql';
     }elseif($len == 41 && $crypt[0] == '*'){
         $method = 'my411';
+    }elseif($len == 34){
+        $method = 'kmd5';
+        $salt   = $crypt;
     }else{
         $method = 'crypt';
         $salt   = substr($crypt,0,2);
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index f78715de5..41f8497bf 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -119,7 +119,7 @@ $meta['_authentication'] = array('fieldset');
 $meta['useacl']      = array('onoff');
 $meta['autopasswd']  = array('onoff');
 $meta['authtype']    = array('authtype');
-$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','crypt','mysql','my411'));
+$meta['passcrypt']   = array('multichoice','_choices' => array('smd5','md5','apr1','sha1','ssha','crypt','mysql','my411','kmd5'));
 $meta['defaultgroup']= array('string');
 $meta['superuser']   = array('string');
 $meta['manager']     = array('string');
-- 
GitLab