9343685beefb8ea80fe9ce886a3762f28c656438
[squirrelmail-change-pass-cn.git] / change_pass / options.php
1 <?php
2     /* change_pass
3      *
4      * $Id: options.php,v 1.5 2004/07/21 14:28:46 indiri69 Exp $
5      */
6
7     define('SM_PATH', '../../');
8     require_once (SM_PATH . 'include/validate.php');
9     require_once (SM_PATH . 'functions/page_header.php');
10     require_once (SM_PATH . 'functions/imap.php');
11     require_once (SM_PATH . 'functions/prefs.php');
12     require_once (SM_PATH . 'functions/global.php');
13     require_once (SM_PATH . 'functions/i18n.php');
14
15     sqgetGlobalVar('plugin_change_pass', $plugin_change_pass, SQ_POST);
16
17     $messages = array();
18     if (isset($plugin_change_pass)) {
19         sqgetGlobalVar('cp_oldpass', $cp_oldpass, SQ_POST);
20         sqgetGlobalVar('cp_newpass', $cp_newpass, SQ_POST);
21         sqgetGlobalVar('cp_verify',  $cp_verify,  SQ_POST);
22         bindtextdomain('change_pass', SM_PATH . 'plugins/change_pass/locale');
23         textdomain('change_pass');
24         $messages = change_pass_check();
25         bindtextdomain('squirrelmail', SM_PATH . 'locale');
26         textdomain('squirrelmail');
27     }
28
29     displayPageHeader($color, 'None');
30
31     bindtextdomain('change_pass', SM_PATH . 'plugins/change_pass/locale');
32     textdomain('change_pass');
33 ?>
34     <table width="100%" cellpadding="2" cellspacing="2" border="0">
35         <tr><td bgcolor="<?php echo $color[0] ?>">
36                 <center><b><?php echo _("Change Password") ?></b></center>
37         </td></tr>
38         <tr><td>
39 <?php
40     if (count($messages)) {
41         foreach ($messages as $line) {
42             echo htmlspecialchars($line) . "<br>\n";
43         }
44         echo "</td></tr>\n";
45         echo "<tr><td>\n";
46     }
47 ?>
48             <form method="post" action="<?php echo $PHP_SELF ?>">
49             <table align="center">
50 <?php
51     $values = array(_("Old Password")        => 'cp_oldpass',
52                     _("New Password")        => 'cp_newpass',
53                     _("Verify New Password") => 'cp_verify');
54     foreach($values as $key=>$value) {
55 ?>
56                 <tr>
57                     <th align="right"><?php echo $key; ?></th>
58                     <td>
59                         <input type="password" name="<?php echo $value; ?>" size="20">
60                     </td>
61                 </tr>
62 <?php } ?>
63                 <tr><td align="center" colspan="2">
64                     <input type="submit" value=<?php echo _("Submit"); ?> name="plugin_change_pass">
65                 </td></tr>
66             </table>
67             </form>
68         </td></tr>
69     </table>
70 </body></html>
71 <?php
72     bindtextdomain('squirrelmail', SM_PATH . 'locale');
73     textdomain('squirrelmail');
74
75 function change_pass_closeport($pop_socket, &$messages, $debug) {
76     if ($debug) {
77         array_push($messages, _("Closing Connection"));
78     }
79     fputs($pop_socket, "quit\r\n");
80     fclose($pop_socket);
81 }
82
83 function change_pass_readfb($pop_socket, &$result, &$messages, $debug) {
84    $strResp = '';
85    $result  = '';
86
87    if (!feof($pop_socket)) {
88       $strResp = fgets($pop_socket, 1024);
89       $result  = substr(trim($strResp), 0, 3);  // 200, 500
90       if(!preg_match('/^[23]\d\d/', $result) || $debug) {
91           $messages[] = "--> $strResp";
92       }
93    }
94 }
95
96 function change_pass_check($debug = 0) {
97     global $cp_oldpass, $cp_newpass, $cp_verify;
98     global $plugin_change_pass;
99
100     sqgetGlobalVar('key', $key, SQ_COOKIE);
101     sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION);
102     $messages = array();
103     $password = OneTimePadDecrypt($key, $onetimepad);
104
105     if ($cp_oldpass == '') {
106         $messages[] = _("You must type in your old password.");
107     }
108     if ($cp_newpass == '') {
109         $messages[] = _("You must type in a new password.");
110     }
111     if ($cp_verify  == '') {
112         $messages[] = _("You must also type in your new password in the verify box.");
113     }
114     if ($cp_newpass != '' && ($cp_verify != $cp_newpass)) {
115         $messages[] = _("Your new password doesn't match the verify password.");
116     }
117     if ($cp_oldpass != '' && ($cp_oldpass != $password)) {
118         $messages[] = _("Your old password is not correct.");
119     }
120     if (count($messages)) {
121         $return = $messages;
122     } else {
123         $return = change_pass_go($password, $debug);
124     }
125     return $return;
126 }
127
128 function change_pass_go($password, $debug) {
129     include_once(SM_PATH . 'plugins/change_pass/settings.php');
130
131     global $username;
132     global $cp_newpass, $key, $onetimepad;
133
134     sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
135     $messages = array();
136
137     if ($debug) {
138         $messages[] = _("Connecting to Password Server");
139     }
140     $pop_socket = fsockopen($poppass_server, $poppass_port, $errno, $errstr);
141     if (!$pop_socket) {
142         $messages[] = _("ERROR:") .  "$errstr ($errno)";
143         return $messages;
144     }
145
146     change_pass_readfb($pop_socket, $result, $messages, $debug);
147     if(!preg_match('/^2\d\d/', $result) ) {
148         change_pass_closeport($pop_socket, $messages, $debug);
149         return $messages;
150     }
151
152     fputs($pop_socket, "user $username\r\n");
153     change_pass_readfb($pop_socket, $result, $messages, $debug);
154     if(!preg_match('/^[23]\d\d/', $result) ) {
155         change_pass_closeport($pop_socket, $messages, $debug);
156         return $messages;
157     }
158
159     fputs($pop_socket, "pass $password\r\n");
160     change_pass_readfb($pop_socket, $result, $messages, $debug);
161     if(!preg_match('/^[23]\d\d/', $result) ) {
162         change_pass_closeport($pop_socket, $messages, $debug);
163         return $messages;
164     }
165
166     fputs($pop_socket, "newpass $cp_newpass\r\n");
167     change_pass_readfb($pop_socket, $result, $messages, $debug);
168     change_pass_closeport($pop_socket, $messages, $debug);
169     if(!preg_match('/^2\d\d/', $result) ) {
170         return $messages;
171     }
172
173     $messages[] = _("Password changed successfully.");
174
175     // Write new cookies for the password
176     $onetimepad = OneTimePadCreate(strlen($cp_newpass));
177     $key = OneTimePadEncrypt($cp_newpass, $onetimepad);
178     sqsession_register($onetimepad, 'onetimepad');
179     setcookie('key', $key, 0, $base_uri);
180
181     return $messages;
182 }
183 ?>