1: <?php
2:
3: class OpenLdapUtils {
4:
5: public static function hashPassword($password, $function = 'md5') {
6: switch ($function) {
7: case 'md5':
8: return '{MD5}' . base64_encode(pack('H*', md5($password)));
9:
10: default:
11: throw new Exception("Encode password function \"$function\" unknown");
12: }
13: }
14:
15: public static function isHashedPassword($password) {
16: return preg_match('/^\{\w+\}[^\s]+$/',$password) ? true : false;
17: }
18:
19: public static function encodePassword($openLdapHashedPassword, $enabled) {
20: return ($enabled ? '' : rand(1000000000,9999999999)). $openLdapHashedPassword;
21: }
22:
23: public static function decodePassword($openLdapEncodedPassword) {
24: if (preg_match('/([^\{]*)(\{.+\}.+)/', $openLdapEncodedPassword,$matches)) {
25: return array(
26: 'password' => $matches[2],
27: 'enabled' => strlen($matches[1]) == 0
28: );
29: }
30: else {
31: throw new InvalidArgumentException("\"$openLdapEncodedPassword\" is not a OpenLdap encoded password");
32: }
33: }
34: }