Prva inacica za Debian Jessie
[squirrelmail-change-pass.git] / functions.php
1 <?php
2 /*
3  * Licensed under the GNU GPL. For full terms see the file COPYING.
4  *
5  * $Id: functions.php,v 1.8 2009/12/09 00:21:11 indiri69 Exp $
6  */
7
8 function change_pass_option_link_do() {
9     global $optpage_blocks;
10
11     sq_change_text_domain('change_pass');
12     $optpage_blocks[] = array(
13         'name' => _("Change Password"),
14         'url'  => sqm_baseuri() . 'plugins/change_pass/options.php',
15         'desc' => _("Use this to change your email password."),
16         'js'   => FALSE
17     );
18     sq_change_text_domain('squirrelmail');
19 }
20
21 function change_pass_dochange($change_pass_old, $change_pass_new, $debug = false) {
22     global $username, $imapServerAddress;
23     $poppass_server = $imapServerAddress;
24     $poppass_port   = 106;
25
26     if(!@include(SM_PATH . 'config/config_change_pass.php')) {
27         @include(SM_PATH . 'plugins/change_pass/config.php');
28     }
29
30     $error_messages = array();
31
32     $pop_socket = @fsockopen($poppass_server, $poppass_port, $errno, $errstr);
33     if (!$pop_socket) {
34         sq_change_text_domain('change_pass');
35         $error_messages[] = sprintf(_("Connection error: %s"), "$errstr ($errno)");
36         sq_change_text_domain('squirrelmail');
37         return $error_messages;
38     }
39
40     // Look for a 2xx result to continue
41     $result = change_pass_readfb($pop_socket, $debug);
42     if(preg_match('/^2\d\d/', $result)) {
43         // Send the username whose password to change
44         if(fwrite($pop_socket, "user $username\r\n")) {
45             $result = change_pass_readfb($pop_socket, $debug);
46             if(preg_match('/^[23]\d\d/', $result)) {
47                 // Send the users current password
48                 if(fwrite($pop_socket, "pass $change_pass_old\r\n")) {
49                     $result = change_pass_readfb($pop_socket, $debug);
50                     if(preg_match('/^[23]\d\d/', $result)) {
51                         // Send the new password
52                         if(fwrite($pop_socket, "newpass $change_pass_new\r\n")) {
53                             $result = change_pass_readfb($pop_socket, $debug);
54                             if(!preg_match('/^2\d\d/', $result)) {
55                                 sq_change_text_domain('change_pass');
56                                 $error_messages[] = _("Password change was not successful!");
57                                 sq_change_text_domain('squirrelmail');
58                             } else {
59                                 change_pass_closeport($pop_socket, $debug);
60                                 sqauth_save_password($change_pass_new);
61                                 session_write_close();
62                                 header('Location: ' . sqm_baseuri() . 'src/options.php?optmode=submit&optpage=change_pass&plugin_change_pass=1&smtoken=' . sm_generate_security_token());
63                                 exit;
64                             }
65                         }
66                     }
67                 }
68             }
69         }
70     }
71     change_pass_closeport($pop_socket, $debug);
72     return $error_messages;
73 }
74
75 function change_pass_closeport($pop_socket, $debug = false) {
76     if ($debug) {
77         $messages[] =  "Closing Connection";
78     }
79     fputs($pop_socket, "quit\r\n");
80     fclose($pop_socket);
81 }
82
83 function change_pass_readfb($pop_socket, $debug = false) {
84    $strResp = '';
85    $result  = '';
86
87    if (!feof($pop_socket)) {
88       $strResp = fgets($pop_socket, 1024);
89       $result  = substr(trim($strResp), 0, 3);  // 200, 300, 500
90       if($debug) {
91           $messages[] = "--> $strResp";
92       }
93    }
94    return $result;
95 }
96
97 function change_pass_info_real() {
98     return array(
99         'english_name' => 'Change Password',
100         'authors'      => array(
101             'Richie Low' => array(),
102             'Tyler Akins' => array(),
103             'Seth Randall' => array(
104                 'email' => 'indiri69@users.sourceforge.net',
105                 'sm_site_username' => 'randall',
106             ),
107         ),
108         'version' => '3.1',
109         'required_sm_version' => '1.4.0',
110         'requires_configuration' => 0,
111         'requires_source_patch'  => 0,
112         'required_plugins'       => array(),
113         'per_version_requirements' => array(
114             '1.5.0'  => SQ_INCOMPATIBLE,
115             '1.4.20' => array(
116                 'required_plugins' => array()
117             ),
118             '1.4.0'  => array(
119                 'required_plugins' => array(
120                     'compatibility' => array(
121                         'version'  => '2.0.16',
122                         'activate' => FALSE
123                     )
124                 )
125             )
126         ),
127         'summary' => 'Change passwords using a poppass daemon',
128         'details' => 'Works with a compatible poppass daemon to allow users to change their passwords.'
129     );
130 }
131
132 function change_pass_loadinfo_real() {
133     global $optpage, $optpage_name;
134
135     if ($optpage == 'change_pass') {
136         // i18n: is displayed after "Successfully Saved Options:"
137         sq_change_text_domain('change_pass');
138         $optpage_name = _("User's Password");
139         sq_change_text_domain('squirrelmail');
140     }
141 }