Mercurial > hg > rc1
comparison plugins/password/drivers/ldap_ppolicy.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e000243b222 |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * ldap_ppolicy driver | |
5 * | |
6 * Driver that adds functionality to change the user password via | |
7 * the 'change_ldap_pass.pl' command respecting password policy (history) in LDAP. | |
8 * | |
9 * @version 1.0 | |
10 * @author Zbigniew Szmyd <zbigniew.szmyd@linseco.pl> | |
11 * | |
12 */ | |
13 | |
14 class rcube_ldap_ppolicy_password | |
15 { | |
16 public function save($currpass, $newpass) | |
17 { | |
18 $rcmail = rcmail::get_instance(); | |
19 $this->debug = $rcmail->config->get('ldap_debug'); | |
20 | |
21 $cmd = $rcmail->config->get('password_ldap_ppolicy_cmd'); | |
22 $uri = $rcmail->config->get('password_ldap_ppolicy_uri'); | |
23 $baseDN = $rcmail->config->get('password_ldap_ppolicy_basedn'); | |
24 $filter = $rcmail->config->get('password_ldap_ppolicy_search_filter'); | |
25 $bindDN = $rcmail->config->get('password_ldap_ppolicy_searchDN'); | |
26 $bindPW = $rcmail->config->get('password_ldap_ppolicy_searchPW'); | |
27 $cafile = $rcmail->config->get('password_ldap_ppolicy_cafile'); | |
28 | |
29 $log_dir = $rcmail->config->get('log_dir'); | |
30 | |
31 if (empty($log_dir)) { | |
32 $log_dir = RCUBE_INSTALL_PATH . 'logs'; | |
33 } | |
34 | |
35 // try to open specific log file for writing | |
36 $logfile = $log_dir.'/password_ldap_ppolicy.err'; | |
37 | |
38 $descriptorspec = array( | |
39 0 => array("pipe", "r"), // stdin is a pipe that the child will read from | |
40 1 => array("pipe", "w"), // stdout is a pipe that the child will write to | |
41 2 => array("file", $logfile, "a") // stderr is a file to write to | |
42 ); | |
43 | |
44 $cmd = 'plugins/password/helpers/'. $cmd; | |
45 $this->_debug("parameters:\ncmd:$cmd\nuri:$uri\nbaseDN:$baseDN\nfilter:$filter"); | |
46 $process = proc_open($cmd, $descriptorspec, $pipes); | |
47 | |
48 if (is_resource($process)) { | |
49 // $pipes now looks like this: | |
50 // 0 => writeable handle connected to child stdin | |
51 // 1 => readable handle connected to child stdout | |
52 // Any error output will be appended to /tmp/error-output.txt | |
53 | |
54 fwrite($pipes[0], $uri."\n"); | |
55 fwrite($pipes[0], $baseDN."\n"); | |
56 fwrite($pipes[0], $filter."\n"); | |
57 fwrite($pipes[0], $bindDN."\n"); | |
58 fwrite($pipes[0], $bindPW."\n"); | |
59 fwrite($pipes[0], $_SESSION['username']."\n"); | |
60 fwrite($pipes[0], $currpass."\n"); | |
61 fwrite($pipes[0], $newpass."\n"); | |
62 fwrite($pipes[0], $cafile); | |
63 fclose($pipes[0]); | |
64 | |
65 $result = stream_get_contents($pipes[1]); | |
66 fclose($pipes[1]); | |
67 | |
68 $this->_debug('Result:'.$result); | |
69 | |
70 switch ($result) { | |
71 case "OK": | |
72 return PASSWORD_SUCCESS; | |
73 case "Password is in history of old passwords": | |
74 return PASSWORD_IN_HISTORY; | |
75 case "Cannot connect to any server": | |
76 return PASSWORD_CONNECT_ERROR; | |
77 default: | |
78 rcube::raise_error(array( | |
79 'code' => 600, | |
80 'type' => 'php', | |
81 'file' => __FILE__, 'line' => __LINE__, | |
82 'message' => $result | |
83 ), true, false); | |
84 } | |
85 | |
86 return PASSWORD_ERROR; | |
87 } | |
88 } | |
89 | |
90 private function _debug($str) | |
91 { | |
92 if ($this->debug) { | |
93 rcube::write_log('password_ldap_ppolicy', $str); | |
94 } | |
95 } | |
96 } |