@@ -87,6 +87,8 @@ our @EXPORT = qw(
8787
8888our ($windows_os ,$tmp_check ,$log_path ,$test_logfile );
8989
90+ my @no_stdin ;
91+
9092BEGIN
9193{
9294
@@ -178,6 +180,21 @@ INIT
178180autoflushSTDOUT 1;
179181autoflushSTDERR 1;
180182autoflush$testlog 1;
183+
184+ # Settings to close stdin for certain commands.
185+ # On non-Windows, use a pseudo-terminal, so that libraries like openssl
186+ # which open the tty if they think stdin isn't one for a password
187+ # don't block. Windows doesn't have ptys, so just provide an empty
188+ # string for stdin.
189+ if ($windows_os )
190+ {
191+ @no_stdin = (' <' , \" " );
192+ }
193+ else
194+ {
195+ use charnames' :full' ;
196+ @no_stdin = (' <pty<' , \" \N{END OF TRANSMISSION} " );
197+ }
181198}
182199
183200END
@@ -343,7 +360,7 @@ sub run_command
343360{
344361my ($cmd ) =@_ ;
345362my ($stdout ,$stderr );
346- my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr ;
363+ my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr , @no_stdin ;
347364chomp ($stdout );
348365chomp ($stderr );
349366return ($stdout ,$stderr );
@@ -576,7 +593,7 @@ sub check_pg_config
576593my ($regexp ) =@_ ;
577594my ($stdout ,$stderr );
578595my $result = IPC::Run::run [' pg_config' ,' --includedir' ],' >' ,
579- \$stdout ,' 2>' , \$stderr
596+ \$stdout ,' 2>' , \$stderr , @no_stdin
580597or die " could not execute pg_config" ;
581598chomp ($stdout );
582599$stdout =~s /\r $// ;
@@ -673,7 +690,7 @@ sub program_help_ok
673690my ($stdout ,$stderr );
674691print (" # Running:$cmd --help\n " );
675692my $result = IPC::Run::run [$cmd ,' --help' ],' >' , \$stdout ,' 2>' ,
676- \$stderr ;
693+ \$stderr , @no_stdin ;
677694ok($result ," $cmd --help exit code 0" );
678695isnt($stdout ,' ' ," $cmd --help goes to stdout" );
679696is($stderr ,' ' ," $cmd --help nothing to stderr" );
@@ -695,7 +712,7 @@ sub program_version_ok
695712my ($stdout ,$stderr );
696713print (" # Running:$cmd --version\n " );
697714my $result = IPC::Run::run [$cmd ,' --version' ],' >' , \$stdout ,' 2>' ,
698- \$stderr ;
715+ \$stderr , @no_stdin ;
699716ok($result ," $cmd --version exit code 0" );
700717isnt($stdout ,' ' ," $cmd --version goes to stdout" );
701718is($stderr ,' ' ," $cmd --version nothing to stderr" );
@@ -718,8 +735,7 @@ sub program_options_handling_ok
718735my ($stdout ,$stderr );
719736print (" # Running:$cmd --not-a-valid-option\n " );
720737my $result = IPC::Run::run [$cmd ,' --not-a-valid-option' ],' >' ,
721- \$stdout ,
722- ' 2>' , \$stderr ;
738+ \$stdout ,' 2>' , \$stderr ,@no_stdin ;
723739ok(!$result ," $cmd with invalid option nonzero exit code" );
724740isnt($stderr ,' ' ," $cmd with invalid option prints error message" );
725741return ;
@@ -740,7 +756,7 @@ sub command_like
740756my ($cmd ,$expected_stdout ,$test_name ) =@_ ;
741757my ($stdout ,$stderr );
742758print (" # Running:" .join (" " , @{$cmd }) ." \n " );
743- my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr ;
759+ my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr , @no_stdin ;
744760ok($result ," $test_name : exit code 0" );
745761is($stderr ,' ' ," $test_name : no stderr" );
746762like($stdout ,$expected_stdout ," $test_name : matches" );
@@ -769,7 +785,8 @@ sub command_like_safe
769785my $stdoutfile = File::Temp-> new();
770786my $stderrfile = File::Temp-> new();
771787print (" # Running:" .join (" " , @{$cmd }) ." \n " );
772- my $result = IPC::Run::run$cmd ,' >' ,$stdoutfile ,' 2>' ,$stderrfile ;
788+ my $result = IPC::Run::run$cmd ,' >' ,$stdoutfile ,' 2>' ,$stderrfile ,
789+ @no_stdin ;
773790$stdout = slurp_file($stdoutfile );
774791$stderr = slurp_file($stderrfile );
775792ok($result ," $test_name : exit code 0" );
@@ -793,7 +810,7 @@ sub command_fails_like
793810my ($cmd ,$expected_stderr ,$test_name ) =@_ ;
794811my ($stdout ,$stderr );
795812print (" # Running:" .join (" " , @{$cmd }) ." \n " );
796- my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr ;
813+ my $result = IPC::Run::run$cmd ,' >' , \$stdout ,' 2>' , \$stderr , @no_stdin ;
797814ok(!$result ," $test_name : exit code not 0" );
798815like($stderr ,$expected_stderr ," $test_name : matches" );
799816return ;
@@ -831,7 +848,7 @@ sub command_checks_all
831848# run command
832849my ($stdout ,$stderr );
833850print (" # Running:" .join (" " , @{$cmd }) ." \n " );
834- IPC::Run::run($cmd ,' >' , \$stdout ,' 2>' , \$stderr );
851+ IPC::Run::run($cmd ,' >' , \$stdout ,' 2>' , \$stderr , @no_stdin );
835852
836853# See http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR
837854my $ret =$? ;