#!/home/oracle/perl/bin/perl

=head1 clp.pl

 Change Listener Password

 example:  clp.pl LISTENER old_password new_password

 It does not matter if the listener currently does not have a password set.

 The value for old_password is unimportant if there is not currently a password.

 Modified version of script found at:
 http://code.techinterviews.com/setting-password-for-oracle-listener-in-the-script/49

=cut


use Expect;
my $exp = new Expect;

my $command = "lsnrctl";
my $PROMPT="LSNRCTL>";

my $LISTENER_NAME=$ARGV[0] ;
my $OLD_PASSWORD=$ARGV[1] ;
my $NEW_PASSWORD=$ARGV[2] ;
print "Changing pasword for ${LISTENER_NAME} \n" ;

$exp->spawn($command) or die "Cannot spawn $command: $!\n";

$exp->stty(qw(echo));

my $answer = $exp->expect(30, "LSNRCTL>");
$exp->send("set current_listener ${LISTENER_NAME}\n");

$answer = $exp->expect(30, $PROMPT);
$exp->send("set password\n");
$answer = $exp->expect(30, "Password:");
$exp->send("${OLD_PASSWORD}\n");

$answer = $exp->expect(30, $PROMPT);
$exp->send("change_pass\n");

# For localized version should be changed (i"e" just to ":")
$answer = $exp->expect(30, "Old password:");
$exp->send("${OLD_PASSWORD}\n");

$answer = $exp->expect(30, "New password:");
$exp->send("${NEW_PASSWORD}\n");

$answer = $exp->expect(30, "Reenter new password:");
$exp->send("${NEW_PASSWORD}\n");

$answer = $exp->expect(30, $PROMPT);
$exp->send("set password\n");

$answer = $exp->expect(30, "Password:");
$exp->send("${NEW_PASSWORD}\n");

$answer = $exp->expect(30, $PROMPT);
$exp->send("save_config\n");

# Restart it if necessary
# $answer = $exp->expect(30, $PROMPT);
# $exp->send("reload\n");

$answer = $exp->expect(30, $PROMPT);
$exp->send("exit\n");

exit;
