Roundcube Community Forum

 

RoundCube Webmail 0.1-beta changepassword patch

Started by igeoffi, June 27, 2006, 01:59:00 AM

Previous topic - Next topic

igeoffi

REPOST
originally posted by poison

this patch/plugin will allow you to change your password

please note: i did not make/create this hack therefore i am not offering any support for this hack or any gurantee that this hack will work for you

QuoteWhen I was deploying the new corporate mailserver I needed to re-install the webmail client. We used to work with SquirrelMail (http://www.squirrelmail.org/), a very decent and extendable webmail client. But we all know that the UI of SquirrelMail is ugly, really ugly.

So after some googling I came across this new great webmail client named RoundCube (http://www.roundcube.net/). This is a new fully featured AJAX-based webmail client with a very slick UI. From the first moment I saw that RoundCube was the way to go.

After I did the installation and played around with the webclient I wanted to extend it and give the ability to my users to change their password. The basic idea was to add a tab ââÂ,¬ËœPasswordââÂ,‰Â,,¢ in the settings window. Since IââÂ,‰Â,,¢ve configured my mailserver (postfix) with mysql (user fields are created dynamically) itââÂ,‰Â,,¢s just a matter of updating the correct row in the database and reconnect to the IMAP server (courier-imap).
The only problem is that the framework of RoundCube is creap, and I mean really crap. It took me 6 hours to create the tab and the underlaying forms / code. Not because I work that slow but because itââÂ,‰Â,,¢s not intuitive and you have to mess in 5 files in order to add a new action (Ok, I only worked at night on it so my mind wasnââÂ,‰Â,,¢t that clear but anyway).
Below IââÂ,‰Â,,¢ve attached the patch, so if some of you want to make your own tab you can read through the patch and see how it works.

It uses an external script (ext/change_password_function.inc) with one function in it: change_password_function ($user, $currentpass, $newpass).
In my case, it just updates the postfix mailbox database but you can modify this code to fit your needs (eg. if you use the courierpassd you can connect to the password-daemon and change the userââÂ,‰Â,,¢s password here).
Enjoy it,
Nicolas

download: click here

Source: http://www.poison.be/?p=8

SKaero

Thanks For posting this, It will be a good tool!

Hunteru

I made a few changes in the original file to work with vpopmail (mysql).

<?php

/*
 +-----------------------------------------------------------------------+
 | program/steps/settings/change_password.inc              |
 |                                    |
 | This file is part of the RoundCube Webmail client           |
 | Copyright (C) 2005, RoundCube Dev. - Switzerland           |
 | Licensed under the GNU GPL                      |
 |                                    |
 | PURPOSE:                               |
 |  Show edit form for a identity record or to add a new one      |
 |                                    |
 +-----------------------------------------------------------------------+
 | Author: Nicolas Van Eenaeme <[email protected]>            |
 +-----------------------------------------------------------------------+

 $Id: edit_identity.inc,v 1.1 2006/05/21 05:19:43 roundcube Exp $

*/

 // The host of the database
 
define ('RCUBE_EXT_CHANGE_PASS_HOST''localhost');

 
// The username to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_USER''user');

 
// The password to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_PASS''password');

 
// The name of the database
 
define ('RCUBE_EXT_CHANGE_PASS_NAME''vpopmail');

 
// The update query. You can use '%clear%' for the clear password,
 //                '%md5%'  for the md5 encrypted password,
 //                '%user%'  for the username,
 //                '%old%'  for the old password and
 //                '%oldmd5%' for the old md5 encrypted password.
 
define ('RCUBE_EXT_CHANGE_PASS_UPDATEQUERY''UPDATE vpopmail SET pw_clear_passwd = &quot;%clear%&quot;, pw_passwd = &quot;%md5%&quot; WHERE pw_name = &quot;%user%&quot; AND pw_passwd = &quot;%oldmd5%&quot; AND pw_domain = &quot;%domain%&quot;');

 
// The select query (needed to verify the md5.
 
define ('RCUBE_EXT_CHANGE_PASS_SELECTQUERY''SELECT pw_passwd FROM vpopmail WHERE pw_name = &quot;%user%&quot; AND pw_domain = &quot;%domain%&quot;');

 function 
split_user ($user)
  {
   list(
$s_user$s_domain) = split('[@]'$user);
   return array(
$s_user,$s_domain);
  }

 function 
change_password_function ($s_user$currentpass$newpass)
  {
list ($user$domain) = split_user ($s_user);

  
$dbh =& mysql_connect (RCUBE_EXT_CHANGE_PASS_HOSTRCUBE_EXT_CHANGE_PASS_USERRCUBE_EXT_CHANGE_PASS_PASS);
  if (!
is_resource ($dbh))
   return 
FALSE;

  if (!
mysql_select_db (RCUBE_EXT_CHANGE_PASS_NAME$dbh))
   return 
FALSE;

  
$q str_replace (array ('%user%''%domain%'), array ($user$domain), RCUBE_EXT_CHANGE_PASS_SELECTQUERY);
 
  
$dbr =& mysql_query ($q$dbh);
  if (!
is_resource ($dbr))
   return 
FALSE;

  
$data mysql_fetch_row ($dbr);
  
mysql_free_result ($dbr);

  
$newpassmd5 crypt ($newpass$data[0]);
  
$currentpassmd5 crypt ($currentpass$data[0]);
  
$q str_replace (array ('%user%''%domain%''%clear%''%md5%''%old%''%oldmd5%'), array ($user$domain$newpass$newpassmd5$currentpass$currentpassmd5), RCUBE_EXT_CHANGE_PASS_UPDATEQUERY);

  
$dbr =& mysql_query ($q$dbh);
  if (!
$dbr || mysql_affected_rows ($dbh) != 1)
    return 
FALSE;

  
mysql_close ($dbh);
  return 
TRUE;
  }

?>


Thx for the original tool. 8)

chadsmith

Here are the changes if you are using Roundcube with hMailServer...

<?php

/*
 +-----------------------------------------------------------------------+
 | program/steps/settings/change_password.inc              |
 |                                    |
 | This file is part of the RoundCube Webmail client           |
 | Copyright (C) 2005, RoundCube Dev. - Switzerland           |
 | Licensed under the GNU GPL                      |
 |                                    |
 | PURPOSE:                               |
 |  Show edit form for a identity record or to add a new one      |
 |                                    |
 +-----------------------------------------------------------------------+
 | Author: Nicolas Van Eenaeme <[email protected]>            |
 +-----------------------------------------------------------------------+

 $Id: edit_identity.inc,v 1.1 2006/05/21 05:19:43 roundcube Exp $

*/

 // The host of the database
 
define ('RCUBE_EXT_CHANGE_PASS_HOST''localhost');

 
// The username to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_USER''user');

 
// The password to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_PASS''password');

 
// The name of the database
 
define ('RCUBE_EXT_CHANGE_PASS_NAME''database');

 
// The update query. You can use '%clear%' for the clear password,
 //                '%md5%'  for the md5 encrypted password,
 //                '%user%'  for the username,
 //                '%old%'  for the old password and
 //                '%oldmd5%' for the old md5 encrypted password.
 
define ('RCUBE_EXT_CHANGE_PASS_UPDATEQUERY''UPDATE hm_accounts SET accountpassword = &quot;%md5%&quot; WHERE accountaddress = &quot;%user%&quot; AND accountpassword = &quot;%oldmd5%&quot;');

 
// The select query (needed to verify the md5.
 
define ('RCUBE_EXT_CHANGE_PASS_SELECTQUERY''SELECT accountpassword FROM hm_accounts WHERE accountaddress = &quot;%user%&quot;');


 function 
change_password_function ($user$currentpass$newpass)
  {
  
$dbh =& mysql_connect (RCUBE_EXT_CHANGE_PASS_HOSTRCUBE_EXT_CHANGE_PASS_USERRCUBE_EXT_CHANGE_PASS_PASS);
  if (!
is_resource ($dbh))
   return 
FALSE;

  if (!
mysql_select_db (RCUBE_EXT_CHANGE_PASS_NAME$dbh))
   return 
FALSE;

  
$q str_replace ('%user%'$userRCUBE_EXT_CHANGE_PASS_SELECTQUERY);
  
$dbr =& mysql_query ($q$dbh);
  if (!
is_resource ($dbr))
   return 
FALSE;

  
$data mysql_fetch_row ($dbr);
  
mysql_free_result ($dbr);

  
$newpassmd5 md5($newpass);
  
$currentpassmd5 md5($currentpass);
  
$q str_replace (array ('%user%''%clear%''%md5%''%old%''%oldmd5%'), array ($user$newpass$newpassmd5$currentpass$currentpassmd5), RCUBE_EXT_CHANGE_PASS_UPDATEQUERY);

  
$dbr =& mysql_query ($q$dbh);
  if (!
$dbr || mysql_affected_rows ($dbh) != 1)
    return 
FALSE;

  
mysql_close ($dbh);
  return 
TRUE;
  }

?>

Rick

I can use one of these Password patches if my server uses Qmail? I use a Virtual Server provided by a hosting company and can access the backend via Plesk configurations. The server comes with Horde (ugly interface) to handle "webmail functions." I am using RoundCube for my site members, but have to refer them to Horde to be able make a password change on their own. Can one of these patched noted here allow my members to change their email through RoundCube.  If the change is made via RoundCube/MySQL, does it change it everywhere like Horde does or just on MySQL? Sorry, if I should know this. I would love to just forget Horde, but it is the only option I have at the moment to let members change their own PWs.

Any advice or suggestions will be greatly apprecaited.  -- Rick

123123

can someone tell how to install the patch ;/

when i press download i get this :

Quotediff -ruN roundcubemail-0.1beta.orig/ext/change_password_function.inc roundcubemail-0.1beta/ext/change_password_function.inc
--- roundcubemail-0.1beta.orig/ext/change_password_function.inc   1970-01-01 01:00:00.000000000 +0100
+++ roundcubemail-0.1beta/ext/change_password_function.inc   2006-05-21 05:19:43.000000000 +0200
@@ -0,0 +1,74 @@
++
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/change_password.inc              |
+ |                                    |
+ | This file is part of the RoundCube Webmail client           |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland           |
+ | Licensed under the GNU GPL                      |
+ |                                    |
+ | PURPOSE:                               |
+ |  Show edit form for a identity record or to add a new one      |
+ |                                    |
+ +-----------------------------------------------------------------------+
+ | Author: Nicolas Van Eenaeme            |
+ +-----------------------------------------------------------------------+
+
+ $Id: edit_identity.inc,v 1.1 2006/05/21 05:19:43 roundcube Exp $
+
+*/
+
+ // The host of the database
+ define ('RCUBE_EXT_CHANGE_PASS_HOST', 'localhost');
+
+ // The username to connect to the database
+ define ('RCUBE_EXT_CHANGE_PASS_USER', 'postfix');
+
+ // The password to connect to the database
+ define ('RCUBE_EXT_CHANGE_PASS_PASS', 'password');
+
+ // The name of the database
+ define ('RCUBE_EXT_CHANGE_PASS_NAME', 'postfix');
+
+ // The update query. You can use '%clear%' for the clear password,
+ //                '%md5%'  for the md5 encrypted password,
+ //                '%user%'  for the username,
+ //                '%old%'  for the old password and
+ //                '%oldmd5%' for the old md5 encrypted password.
+ define ('RCUBE_EXT_CHANGE_PASS_UPDATEQUERY', 'UPDATE mailbox SET password = "%md5%" WHERE username = "%user%" AND password = "%oldmd5%"');
+
+ // The select query (needed to verify the md5.
+ define ('RCUBE_EXT_CHANGE_PASS_SELECTQUERY', 'SELECT password FROM mailbox WHERE username = "%user%"');
+
+
+ function change_password_function ($user, $currentpass, $newpass)
+  {
+  $dbh =& mysql_connect (RCUBE_EXT_CHANGE_PASS_HOST, RCUBE_EXT_CHANGE_PASS_USER, RCUBE_EXT_CHANGE_PASS_PASS);
+  if (!is_resource ($dbh))
+   return FALSE;
+
+  if (!mysql_select_db (RCUBE_EXT_CHANGE_PASS_NAME, $dbh))
+   return FALSE;
+
+  $q = str_replace ('%user%', $user, RCUBE_EXT_CHANGE_PASS_SELECTQUERY);
+  $dbr =& mysql_query ($q, $dbh);
+  if (!is_resource ($dbr))
+   return FALSE;
+
+  $data = mysql_fetch_row ($dbr);
+  mysql_free_result ($dbr);
+
+  $newpassmd5 = crypt ($newpass, $data[0]);
+  $currentpassmd5 = crypt ($currentpass, $data[0]);
+  $q = str_replace (array ('%user%', '%clear%', '%md5%', '%old%', '%oldmd5%'), array ($user, $newpass, $newpassmd5, $currentpass, $currentpassmd5), RCUBE_EXT_CHANGE_PASS_UPDATEQUERY);
+
+  $dbr =& mysql_query ($q, $dbh);
+  if (!$dbr || mysql_affected_rows ($dbh) != 1)
+    return FALSE;
+
+  mysql_close ($dbh);
+  return TRUE;
+  }
+
+?>
diff -ruN roundcubemail-0.1beta.orig/index.php roundcubemail-0.1beta/index.php
--- roundcubemail-0.1beta.orig/index.php   2006-02-21 00:29:13.000000000 +0100
+++ roundcubemail-0.1beta/index.php   2006-05-21 03:46:20.000000000 +0200
@@ -330,6 +330,8 @@
  if ($_action=='folders' || $_action=='subscribe' || $_action=='unsubscribe' || $_action=='create-folder' || $_action=='delete-folder')
   include('program/steps/settings/manage_folders.inc');
 
+ if ($_action=='password' || $_action=='change-password')
+  include('program/steps/settings/change_password.inc');
  }
 
 
--- roundcubemail-0.1beta.orig/program/include/main.inc   2006-02-21 00:29:13.000000000 +0100
+++ roundcubemail-0.1beta/program/include/main.inc   2006-05-20 02:04:38.000000000 +0200
@@ -1072,7 +1072,8 @@
     'identityform' => 'rcube_identity_form',
     'foldersubscription' => 'rcube_subscription_form',
     'createfolder' => 'rcube_create_folder_form',
-    'composebody' => 'rcmail_compose_body'
+    'composebody' => 'rcmail_compose_body',
+    'changepassform' => 'rcmail_change_pass_form'
    );
 
   
diff -ruN roundcubemail-0.1beta.orig/program/js/app.js roundcubemail-0.1beta/program/js/app.js
--- roundcubemail-0.1beta.orig/program/js/app.js   2006-02-19 21:21:58.000000000 +0100
+++ roundcubemail-0.1beta/program/js/app.js   2006-05-21 15:37:23.000000000 +0200
@@ -194,7 +194,7 @@
 
 
    case 'settings':
-    this.enable_command('preferences', 'identities', 'save', 'folders', true);
+    this.enable_command('preferences', 'identities', 'save', 'folders', 'password', true);
     
     if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity')
      this.enable_command('edit', 'add', 'delete', true);
@@ -205,6 +205,9 @@
     if (this.env.action=='folders')
      this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'delete-folder', true);
     
+    if (this.env.action=='password')
+     this.enable_command('change-password', true);
+    
     var identities_list = this.gui_objects.identitieslist;
     if (identities_list)
      this.init_identitieslist(identities_list);
@@ -946,6 +949,41 @@
      this.delete_folder(props);
     break;
 
+   case 'password':
+    location.href = this.env.comm_path+'&_action=password';
+    break;
+
+   case 'change-password':
+    if (this.gui_objects.editform)
+     {
+     var input_currentpass = rcube_find_object('_currentpass');
+     var input_newpass = rcube_find_object('_newpass');
+     var input_confirmpass = rcube_find_object('_confirmpass');
+
+     if (input_currentpass.value == "")
+      {
+      alert(this.get_label('nocurrentpasswarning'));
+      input_currentpass.focus();
+      break;
+      }
+
+     if (input_newpass.value == "")
+      {
+      alert(this.get_label('nonewpasswarning'));
+      input_newpass.focus();
+      break;
+      }
+
+     if (input_newpass.value != input_confirmpass.value)
+      {
+      alert(this.get_label('nomatchpasswarning'));
+      input_confirmpass.focus();
+      break;
+      }
+
+     this.gui_objects.editform.submit();
+     }
+    break;
    }
 
   return obj ? false : true;
diff -ruN roundcubemail-0.1beta.orig/program/localization/en_US/labels.inc roundcubemail-0.1beta/program/localization/en_US/labels.inc
--- roundcubemail-0.1beta.orig/program/localization/en_US/labels.inc   2006-02-04 19:05:36.000000000 +0100
+++ roundcubemail-0.1beta/program/localization/en_US/labels.inc   2006-05-21 03:53:49.000000000 +0200
@@ -179,6 +179,12 @@
 $labels['newitem'] = 'New item';
 $labels['edititem'] = 'Edit item';
 
+$labels['changepassword'] = 'Change your password';
+
+$labels['currentpass'] = 'Current password';
+$labels['newpass'] = 'New password';
+$labels['confirmpass'] = 'Confirm new password';
+
 $labels['setdefault'] = 'Set default';
 $labels['language'] = 'Language';
 $labels['timezone'] = 'Time zone';
diff -ruN roundcubemail-0.1beta.orig/program/localization/en_US/messages.inc roundcubemail-0.1beta/program/localization/en_US/messages.inc
--- roundcubemail-0.1beta.orig/program/localization/en_US/messages.inc   2006-01-25 21:10:12.000000000 +0100
+++ roundcubemail-0.1beta/program/localization/en_US/messages.inc   2006-05-21 14:46:15.000000000 +0200
@@ -88,4 +88,12 @@
 
 $messages['nosearchname'] = 'Please enter a contact name or email address';
 
+$messages['nocurrentpasswarning'] = 'Please enter your current password';
+
+$messages['nonewpasswarning'] = 'Please enter your new password';
+
+$messages['nomatchpasswarning'] = 'The new password and it\'s confirmation doesn\'t match';
+
+$messages['invalidpassword'] = 'Your current password is invalid';
+
 ?>
diff -ruN roundcubemail-0.1beta.orig/program/steps/settings/change_password.inc roundcubemail-0.1beta/program/steps/settings/change_password.inc
--- roundcubemail-0.1beta.orig/program/steps/settings/change_password.inc   1970-01-01 01:00:00.000000000 +0100
+++ roundcubemail-0.1beta/program/steps/settings/change_password.inc   2006-05-21 14:46:33.000000000 +0200
@@ -0,0 +1,103 @@
++
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/change_password.inc              |
+ |                                    |
+ | This file is part of the RoundCube Webmail client           |
+ | Copyright (C) 2005, RoundCube Dev. - Switzerland           |
+ | Licensed under the GNU GPL                      |
+ |                                    |
+ | PURPOSE:                               |
+ |  Change the current password into a new one             |
+ |                                    |
+ +-----------------------------------------------------------------------+
+ | Author: Nicolas Van Eenaeme            |
+ +-----------------------------------------------------------------------+
+
+ $Id: edit_identity.inc,v 1.1 2006/05/21 14:46:33 roundcube Exp $
+
+*/
+
+// init IAMP connection
+rcmail_imap_init(TRUE);
+
+if ($_POST['_action'] == 'change-password')
+ {
+ include ('ext/change_password_function.inc');
+ if ($_SESSION['password'] != encrypt_passwd($_POST['_currentpass']))
+  {
+  show_message('invalidpassword', 'error');
+  }
+ elseif (false || change_password_function ($_SESSION['username'], $_POST['_currentpass'], $_POST['_newpass']))
+  {
+  $IMAP->pass = $_POST['_newpass'];
+  $IMAP->reconnect ();
+  $_SESSION['password'] = encrypt_passwd($_POST['_newpass']);
+
+  show_message('successfullysaved', 'confirmation');
+  }
+ else
+  show_message('errorsaving', 'error');
+
+  // go to next step
+  $_action = 'password';
+
+  // overwrite action variable
+  $OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action));
+  }
+
+ $PAGE_TITLE = rcube_label('changepassword');
+
+
+function rcmail_change_pass_form($attrib)
+ {
+ global $IDENTITY_RECORD, $JS_OBJECT_NAME;
+
+ // add some labels to client
+ rcube_add_label('nocurrentpasswarning');
+ rcube_add_label('nonewpasswarning');
+ rcube_add_label('nomatchpasswarning');
+
+ list($form_start, $form_end) = get_form_tags($attrib, 'change-password');
+ unset($attrib['form']);
+
+
+ // return the complete edit form as table
+ $out = "$form_start\n\n";
+
+ // show the current password field
+ $field_id = 'rcmfd_currentpass';
+ $input_currentpass = new passwordfield(array('name' => '_currentpass', 'id' => $field_id, 'size' => 20));
+
+ $out .= sprintf("\n",
+         $field_id,
+         rep_specialchars_output(rcube_label('currentpass')),
+         $input_currentpass->show());
+
+ // show the new password field
+ $field_id = 'rcmfd_newpass';
+ $input_newpass = new passwordfield(array('name' => '_newpass', 'id' => $field_id, 'size' => 20));
+
+ $out .= sprintf("\n",
+         $field_id,
+         rep_specialchars_output(rcube_label('newpass')),
+         $input_newpass->show());
+
+ // show the confirm password field
+ $field_id = 'rcmfd_confirmpass';
+ $input_confirmpass = new passwordfield(array('name' => '_confirmpass', 'id' => $field_id, 'size' => 20));
+
+ $out .= sprintf("\n",
+         $field_id,
+         rep_specialchars_output(rcube_label('confirmpass')),
+         $input_confirmpass->show());
+
+ $out .= "\n
%s
%s
%s
$form_end";
+
+ return $out;
+ }
+
+
+ parse_template('changepassword');
+?>
\ No newline at end of file
diff -ruN roundcubemail-0.1beta.orig/skins/default/includes/settingstabs.html roundcubemail-0.1beta/skins/default/includes/settingstabs.html
--- roundcubemail-0.1beta.orig/skins/default/includes/settingstabs.html   2005-09-25 16:18:58.000000000 +0200
+++ roundcubemail-0.1beta/skins/default/includes/settingstabs.html   2006-05-17 20:12:34.000000000 +0200
@@ -1,3 +1,4 @@
 

 
+
 

diff -ruN roundcubemail-0.1beta.orig/skins/default/templates/changepassword.html roundcubemail-0.1beta/skins/default/templates/changepassword.html
--- roundcubemail-0.1beta.orig/skins/default/templates/changepassword.html   1970-01-01 01:00:00.000000000 +0100
+++ roundcubemail-0.1beta/skins/default/templates/changepassword.html   2006-05-21 03:33:05.000000000 +0200
@@ -0,0 +1,27 @@
+http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+http://www.w3.org/1999/xhtml">
+
+<roundcube:object name="pagetitle" />
+
+
+
+
+
+
+
+
+
+

+

+
+

+
+
+



+

+

+
+
+
+
+


what i have to do next??

ric

Installed this patch with beta2, works well.

Quote123123,
what i have to do next??

123123, you can either using a patching program to apply the patch or edit the files by hand, what mailserver are you using?

123123

i have no idea what program to use. i use cpanel. maybe someone have seperate files of this plugin and know what changes must be done in other files?

mike413

Quote from: Hunteru I made a few changes in the original file to work with vpopmail (mysql).

<?php

/*
 +-----------------------------------------------------------------------+
 | program/steps/settings/change_password.inc              |
 |                                   |
 | This file is part of the RoundCube Webmail client          |
 | Copyright (C) 2005, RoundCube Dev. - Switzerland           |
 | Licensed under the GNU GPL                      |
 |                                   |
 | PURPOSE:                               |
 | Show edit form for a identity record or to add a new one      |
 |                                   |
 +-----------------------------------------------------------------------+
 | Author: Nicolas Van Eenaeme <[email protected]>           |
 +-----------------------------------------------------------------------+

 $Id: edit_identity.inc,v 1.1 2006/05/21 05:19:43 roundcube Exp $

*/

 // The host of the database
 
define ('RCUBE_EXT_CHANGE_PASS_HOST''localhost');

 
// The username to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_USER''user');

 
// The password to connect to the database
 
define ('RCUBE_EXT_CHANGE_PASS_PASS''password');

 
// The name of the database
 
define ('RCUBE_EXT_CHANGE_PASS_NAME''vpopmail');

 
// The update query. You can use '%clear%' for the clear password,
 //               '%md5%'  for the md5 encrypted password,
 //               '%user%' for the username,
 //               '%old%'  for the old password and
 //               '%oldmd5%' for the old md5 encrypted password.
 
define ('RCUBE_EXT_CHANGE_PASS_UPDATEQUERY''UPDATE vpopmail SET pw_clear_passwd = &quot;%clear%&quot;, pw_passwd = &quot;%md5%&quot; WHERE pw_name = &quot;%user%&quot; AND pw_passwd = &quot;%oldmd5%&quot; AND pw_domain = &quot;%domain%&quot;');

 
// The select query (needed to verify the md5.
 
define ('RCUBE_EXT_CHANGE_PASS_SELECTQUERY''SELECT pw_passwd FROM vpopmail WHERE pw_name = &quot;%user%&quot; AND pw_domain = &quot;%domain%&quot;');

 function 
split_user ($user)
  {
   list(
$s_user$s_domain) = split('[@]'$user);
   return array(
$s_user,$s_domain);
  }

 function 
change_password_function ($s_user$currentpass$newpass)
  {
list ($user$domain) = split_user ($s_user);

  
$dbh =& mysql_connect (RCUBE_EXT_CHANGE_PASS_HOSTRCUBE_EXT_CHANGE_PASS_USERRCUBE_EXT_CHANGE_PASS_PASS);
  if (!
is_resource ($dbh))
   return 
FALSE;

  if (!
mysql_select_db (RCUBE_EXT_CHANGE_PASS_NAME$dbh))
   return 
FALSE;

  
$q str_replace (array ('%user%''%domain%'), array ($user$domain), RCUBE_EXT_CHANGE_PASS_SELECTQUERY);
 
 
$dbr =& mysql_query ($q$dbh);
  if (!
is_resource ($dbr))
   return 
FALSE;

  
$data mysql_fetch_row ($dbr);
  
mysql_free_result ($dbr);

  
$newpassmd5 crypt ($newpass$data[0]);
  
$currentpassmd5 crypt ($currentpass$data[0]);
  
$q str_replace (array ('%user%''%domain%''%clear%''%md5%''%old%''%oldmd5%'), array ($user$domain$newpass$newpassmd5$currentpass$currentpassmd5), RCUBE_EXT_CHANGE_PASS_UPDATEQUERY);

  
$dbr =& mysql_query ($q$dbh);
  if (!
$dbr || mysql_affected_rows ($dbh) != 1)
    return 
FALSE;

  
mysql_close ($dbh);
  return 
TRUE;
  }

?>


Thx for the original tool. 8)

Thanks you so mush for your PATCH, that work fine for me with the beta2.
But just one problem found:
when i have applied the patch, i found one error in the result with the file program/include/main.inc.rej

***************
*** 1072,1078 ****
     'identityform' => 'rcube_identity_form',
     'foldersubscription' => 'rcube_subscription_form',
     'createfolder' => 'rcube_create_folder_form',
-     'composebody' => 'rcmail_compose_body'
    );


--- 1072,1079 ----
     'identityform' => 'rcube_identity_form',
     'foldersubscription' => 'rcube_subscription_form',
     'createfolder' => 'rcube_create_folder_form',
+     'composebody' => 'rcmail_compose_body',
+     'changepassform' => 'rcmail_change_pass_form'
    );

So, i have edited the main.inc and i have added 'changepassform' => 'rcmail_change_pass_form' at the line 1236 (// USER SETTINGS) like this:
   // USER SETTINGS
    'userprefs' => 'rcmail_user_prefs_form',
    'itentitieslist' => 'rcmail_identities_list',
    'identityframe' => 'rcmail_identity_frame',
    'identityform' => 'rcube_identity_form',
    'foldersubscription' => 'rcube_subscription_form',
    'createfolder' => 'rcube_create_folder_form',
    'renamefolder' => 'rcube_rename_folder_form',
    'composebody' => 'rcmail_compose_body',
    'changepassform' => 'rcmail_change_pass_form'

And now, that work.

Thanks you.

123123


mike413

Quote from: 123123 how to apply the patch? HELP please :(

hi,

Go to your RoundCube webmail directory and do that at the command line:
wget [url]http://www.poison.be/wp-content/uploads/2006/05/roundcubemail-0.1beta-changepassword.patch[/url]
To apply the patch:

patch -p1 < roundcubemail-0.1beta-changepassword.patch
That all.

Regards.

Mike.


123123

sorry but i dont understanf :( i am using host with cpanel, so where i have to enter these comand lines? thanks in advance

mike413

Quote from: 123123 sorry but i dont understanf :( i am using host with cpanel, so where i have to enter these comand lines? thanks in advance

ah ok, sorry!

I don't know cpanel. My last post is for the Linux user that have an access to the command line.

Sorry again 123123.

Mike.

tickus

When I try to change the password I get the following error. 'An error occured while saving' Why might I be getting this.

Thanks

___________
Tickus
http://www.tickus.com

pensive612