#!/www/perl-5.6.1/bin/perl -Tw
# Example Oracle authentication via SQL*Plus program.
#
# NOTE: Runs in taint mode because it is usually
#       invoked by other programs (mainly CGIs).


# ------ pragmas
use strict;

# ------ define variables
my $database = "";	# Oracle TNS database name
my @output   = ();	# output of SQL*Plus command
my $password = "";	# password for $username
my $sqlplus		# Oracle SQL*Plus interactive query program
 = "/www/oracle/u01/app/oracle/product/7.3.4/bin/sqlplus";
my $username = "";	# Oracle username to authenticate with

# ------ force secure PATH
$ENV{"PATH"} = "/bin:/usr/bin";

# ------ extract username + password + database
if (scalar(@ARGV) < 3) {
    die "usage: oralogon username password TNSname\n";
}
$ARGV[0]  =~ m#([^`']+)#;
$username =  $1;
$ARGV[1]  =~ m#([^`']+)#;
$password =  $1;
$ARGV[2]  =~ m#(([a-zA-Z0-9]|-|\+|_|\.)+)#;
$database =  $1;

# ------ run Oracle SQL*Plus, check that authentication succeeded
@output =<<`endSQLPLUS`;
$sqlplus $username/$password\@$database<<endCMD
$password
quit
endCMD
endSQLPLUS
if (grep(/Connected to:/, @output)) {
    print "OK: Oracle login succeeded.\n";
} else {
    print "FAILURE:\n@output\n";
}
