# auth-pop.pl: Password changing with the Qualcomm poppassd server
# ftp.qualcomm.com:/quest/unix/servers/password
# contributed BY Gary Mills
# History:
# 4 Jun 01 Created
# 5 Jun 01 Fixed a response handling bug
 
use IO::Socket::INET;

$useauth=1;

sub auth_disconnect {
    return 0;
}

sub auth_getuserserver {
       return '';
}


sub auth_changepass {
	
#  Lets Check the Password

    my $pass1 = param("pass1");
    my $pass2 = param("pass2");
    if (!$pass1 && !$pass2) {return;}
    if ($pass1 eq "" || $pass2 eq "") {return;}

    if ($pass1 ne $pass2) {
	print "<b>Error:</b> Passwords Did Not Match...Not Changed...\n",p;
	exit;
    }
    else {
	my $sock = IO::Socket::INET->new(
					 Proto    => "tcp",
					 PeerAddr => "localhost",
					 PeerPort => "poppassd(106)",
					 );
	unless ($sock) {
	    print "\n",p,"Error: Unable to connect to poppassd\n",p;
	    exit;
	}
	my $resp = <$sock>;
	if (substr($resp, 0, 12)  eq "200 poppassd") {
	    print $sock "user $uid\r\n";
	    $resp = <$sock>;
	    if (substr ($resp, 0, 3) eq "200") {
		print $sock "pass $pass\r\n";
		$resp = <$sock>;
		if (substr ($resp, 0, 3) eq "200") {
		    print $sock "newpass $pass1\r\n";
		    $resp = <$sock>;
		    if (substr ($resp, 0, 3) eq "200") {
			$resp = '999';
		    }
		}
	    }
	}

    }
    $resp="000 unexpected EOF" unless $resp;
    unless ($resp eq '999') {
        print "\n",p,"Error from poppassd: $resp\n",p;
	exit;
    }
	  
#  Success!
    print "<b>Password Modified...</b>\n";
    print "<b>Warning:</b> You must login with your new password by clicking <a href=" . $program_url . "?op=logout>HERE</a>\n",p;
    exit;

}



syntax highlighted by Code2HTML, v. 0.9.1