alecpl
2011-02-16 207cc0b9b3cfdfb29e4f02e83014320fd12eeb68
plugins/password/drivers/virtualmin.php
@@ -10,15 +10,50 @@
 * It only works with virtualmin on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * @version 1.0
 * @version 2.0
 * @author Martijn de Munnik
 */
function password_save($currpass, $newpass)
{
    $curdir = realpath(dirname(__FILE__));
    $username = escapeshellcmd($_SESSION['username']);
    $domain = substr(strrchr($username, "@"), 1);
    $rcmail = rcmail::get_instance();
    $format   = $rcmail->config->get('password_virtualmin_format', 0);
    $username = $_SESSION['username'];
    switch ($format) {
        case 1: // username%domain
            $domain = substr(strrchr($username, "%"), 1);
            break;
        case 2: // username.domain (could be bogus)
            $pieces = explode(".", $username);
            $domain = $pieces[count($pieces)-2]. "." . end($pieces);
            break;
        case 3: // domain.username (could be bogus)
            $pieces = explode(".", $username);
            $domain = $pieces[0]. "." . $pieces[1];
            break;
        case 4: // username-domain
            $domain = substr(strrchr($username, "-"), 1);
            break;
        case 5: // domain-username
            $domain = str_replace(strrchr($username, "-"), "", $username);
            break;
        case 6: // username_domain
            $domain = substr(strrchr($username, "_"), 1);
            break;
        case 7: // domain_username
            $pieces = explode("_", $username);
            $domain = $pieces[0];
            break;
        default: // username@domain
            $domain = substr(strrchr($username, "@"), 1);
    }
    $username = escapeshellcmd($username);
    $domain   = escapeshellcmd($domain);
    $newpass  = escapeshellcmd($newpass);
    $curdir   = realpath(dirname(__FILE__));
    exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue);