]> git.donarmstrong.com Git - roundcube.git/blob - plugins/password/drivers/poppassd.php
Imported Upstream version 0.5
[roundcube.git] / plugins / password / drivers / poppassd.php
1 <?php
2
3 /**
4  * Poppassd Password Driver
5  *
6  * Driver to change passwords via Poppassd/Courierpassd
7  *
8  * @version 1.1
9  * @author Philip Weir
10  *
11  */
12
13 function format_error_result($code, $line)
14 {
15     if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
16         return array('code' => $code, 'message' => $matches[1]);
17     } else {
18         return $code;
19     }
20 }
21
22 function password_save($curpass, $passwd)
23 {
24     $rcmail = rcmail::get_instance();
25 //    include('Net/Socket.php');
26     $poppassd = new Net_Socket();
27
28     $result = $poppassd->connect($rcmail->config->get('password_pop_host'), $rcmail->config->get('password_pop_port'), null);
29     if (PEAR::isError($result)) {
30         return format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage());
31     }
32     else {
33         $result = $poppassd->readLine();
34         if(!preg_match('/^2\d\d/', $result)) {
35             $poppassd->disconnect();
36             return format_error_result(PASSWORD_ERROR, $result);
37         }
38         else {
39             $poppassd->writeLine("user ". $_SESSION['username']);
40             $result = $poppassd->readLine();
41             if(!preg_match('/^[23]\d\d/', $result) ) {
42                 $poppassd->disconnect();
43                 return format_error_result(PASSWORD_CONNECT_ERROR, $result);
44             }
45             else {
46                 $poppassd->writeLine("pass ". $curpass);
47                 $result = $poppassd->readLine();
48                 if(!preg_match('/^[23]\d\d/', $result) ) {
49                     $poppassd->disconnect();
50                     return format_error_result(PASSWORD_ERROR, $result);
51                 }
52                 else {
53                     $poppassd->writeLine("newpass ". $passwd);
54                     $result = $poppassd->readLine();
55                     $poppassd->disconnect();
56                     if (!preg_match('/^2\d\d/', $result))
57                         return format_error_result(PASSWORD_ERROR, $result);
58                     else
59                         return PASSWORD_SUCCESS;
60                 }
61             }
62         }
63     }
64 }