From 67bb96fef159fd360a401f815e32c088f83401b0 Mon Sep 17 00:00:00 2001
From: vbenincasa <vbenincasa@gmail.com>
Date: Sun, 20 Sep 2009 06:14:04 -0400
Subject: [PATCH]  - Password plugin: added vpopmaild driver

---
 plugins/password/drivers/vpopmaild.php |   57 ++++++++++++++++++++++++++++
 plugins/password/config.inc.php.dist   |   10 +++++
 2 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist
index a9504fc..73057ae 100644
--- a/plugins/password/config.inc.php.dist
+++ b/plugins/password/config.inc.php.dist
@@ -3,6 +3,7 @@
 // Password Plugin options
 // -----------------------
 // A driver to use for password change. Default: "sql".
+// Current possibilities: 'directadmin', 'ldap', 'poppassd', 'sasl', 'sql', 'vpopmaild'
 $rcmail_config['password_driver'] = 'sql';
 
 // Determine whether current password is required to change password.
@@ -148,4 +149,13 @@
 // TCP port used for DirectAdmin connections
 $rcmail_config['password_directadmin_port'] = 2222;
 
+
+// vpopmaild Driver options
+// -----------------------
+// The host which changes the password
+$rcmail_config['password_vpopmaild_host'] = 'localhost';
+
+// TCP port used for vpopmaild connections
+$rcmail_config['password_vpopmaild_port'] = 89;
+
 ?>
diff --git a/plugins/password/drivers/vpopmaild.php b/plugins/password/drivers/vpopmaild.php
new file mode 100644
index 0000000..b447340
--- /dev/null
+++ b/plugins/password/drivers/vpopmaild.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * vpopmail Password Driver
+ *
+ * Driver to change passwords via vpopmaild
+ *
+ * @version 1.0
+ * @author Johannes Hessellund
+ *
+ */
+
+function password_save($curpass, $passwd)
+{
+    $rcmail = rcmail::get_instance();
+//    include('Net/Socket.php');
+    $vpopmaild = new Net_Socket();
+
+    if (PEAR::isError($vpopmaild->connect($rcmail->config->get('password_vpopmaild_host'), $rcmail->config->get('password_vpopmaild_port'), null))) {
+        return PASSWORD_CONNECT_ERROR;
+    }
+    else {
+        $result = $vpopmaild->readLine();
+        if(!preg_match('/^\+OK/', $result)) {
+            $vpopmaild->disconnect();
+            return PASSWORD_CONNECT_ERROR;
+        }
+        else {
+            $vpopmaild->writeLine("slogin ". $_SESSION['username'] . " " . $curpass);
+            $result = $vpopmaild->readLine();
+            if(!preg_match('/^\+OK/', $result) ) {
+                $vpopmaild->disconnect();
+                return PASSWORD_ERROR;
+            }
+            else {
+                $vpopmaild->writeLine("mod_user ". $_SESSION['username']);
+                $result = $vpopmaild->readLine();
+                if(!preg_match('/^\+OK/', $result) ) {
+                    $vpopmaild->disconnect();
+                    return PASSWORD_ERROR;
+                }
+                else {
+                    $vpopmaild->writeLine("clear_text_password ". $passwd);
+                    $vpopmaild->writeLine(".");
+                    $result = $vpopmaild->readLine();
+                    $vpopmaild->disconnect();
+                    if (!preg_match('/^\+OK/', $result))
+                        return PASSWORD_ERROR;
+                    else
+                        return PASSWORD_SUCCESS;
+                }
+            }
+        }
+    }
+}
+
+?>

--
Gitblit v1.9.1