#!/usr/bin/perl -w

#Originally by Dan Stefan (spdATromanothanDOTro), at http://www.romanothan.ro/spd/
#Modified by Liron Newman (lironATnewmanDOTbz), at http://www.eesh.net/xmail-um.html

use XMail::Ctrl;
use Utils::xmailini;
use CGI qw /:standard/;
use Utils::spd qw(printerr printmsg);
use CGI::Carp 'fatalsToBrowser';
$CGI::POST_MAX=1024 * 10;  # max 10K posts
$CGI::DISABLE_UPLOADS = 1;  # no uploads

my $redir_url = "/webmail/index.php";
my $redir_time = 3;

my $xmail_admin	= xmailini->xmail_admin;
my $xmail_pass	= xmailini->xmail_pass;
my $xmail_port	= xmailini->xmail_port;
my $xmail_host	= xmailini->xmail_host;
my $domain	= xmailini->domain;

my $xmail = XMail::Ctrl->new( 
    ctrlid   => "$xmail_admin",
    ctrlpass => "$xmail_pass",
    port     => "$xmail_port",
    host     => "$xmail_host" 
) or die $!;


$username=param('username');
$oldpassword=param('oldpassword');
$newpassword=param('newpassword');
$newpassword1=param('newpassword1');
$errormsg=param('errormsg');
$xmailmsg = $xmail->userauth(
{
#Was: domain   => "$domain",
domain   => substr("$username",index("$username","@")+1),
#Was: username => "$username",
username => substr("$username",0,index("$username","@")),
password => "$oldpassword"
});

#Was: if ($xmailmsg =~ "00000 OK"){
if ($xmailmsg == 1){
    if ($newpassword eq $newpassword1){
	$xmailmsg = $xmail->userpasswd(
	{
#Was:	domain   => "$domain",
	domain   => substr("$username",index("$username","@")+1),
#Was:	username => "$username",
	username => substr("$username",0,index("$username","@")),
	password => "$newpassword"
	});
#Was:        printmsg($xmailmsg,$redir_url,$redir_time);
        if ($xmailmsg == 1){ printmsg("Success!",$redir_url,$redir_time) }
        else { printmsg($xmailmsg,$redir_url,$redir_time) }
    }
    else { printerr($errormsg,$redir_url,$redir_time) }
    
}

#Was: else { printerr($xmailmsg,$redir_url,$redir_time) }
else { printerr($xmailmsg . "<br>" . $xmail->last_error->{description},$redir_url,$redir_time) }
      
	