Using PGPASSFILE environment variable instead of PGPASSWORD
authorLuiz K. Matsumura <[email protected]>
Tue, 6 Nov 2012 19:26:44 +0000 (17:26 -0200)
committerLuiz K. Matsumura <[email protected]>
Thu, 8 Nov 2012 22:03:26 +0000 (20:03 -0200)
Using a temporary pgpass file to store password as recommended by Postgresql documentation

Thanks to Steve Singer review

tools/altperl/slon-tools.pm

index ada72872bacccfec5929b5adba0ef1e26655e21f..33ddc05150fdc4b20ba95dd21139fbd8785431d6 100644 (file)
@@ -4,6 +4,7 @@
 # Copyright 2004-2009 Afilias Canada
 
 use POSIX;
+use File::Temp qw/ tempfile tempdir /;
 
 sub add_node {
   my %PARAMS = (host=> undef,
@@ -226,7 +227,9 @@ limit 1)
   my ($port, $host, $dbname, $dbuser, $passwd)= ($PORT[$nodenum], $HOST[$nodenum], $DBNAME[$nodenum], $USER[$nodenum], $PASSWORD[$nodenum]);
   my $result;
   if ($passwd) {
-     $result=`PGPASSWORD=$passwd @@PGBINDIR@@/psql -p $port -h $host -U $dbuser -c "$query" --tuples-only $dbname`;
+     my ($fh, $filename) = tempfile();
+     print $fh "$host:$port:$dbname:$dbuser:$password";
+     $result=`PGPASSFILE=$filename @@PGBINDIR@@/psql -p $port -h $host -U $dbuser -c "$query" --tuples-only $dbname`;
   } else {
      $result=`@@PGBINDIR@@/psql -p $port -h $host -U $dbuser -c "$query" --tuples-only $dbname`;
   }
@@ -312,9 +315,11 @@ limit 1;   --- One such entry is sufficient...
   my ($port, $host, $dbname, $dbuser, $passwd)= ($PORT[$nodenum], $HOST[$nodenum], $DBNAME[$nodenum], $USER[$nodenum], $PASSWORD[$nodenum]);
   my $result;
   if ($passwd) {
-     $result=`PGPASSWORD=$passwd @@PGBINDIR@@/psql -p $port -h $host -c "$query" --tuples-only -U $dbuser $dbname`;
+     my ($fh, $filename) = tempfile();
+     print $fh "$host:$port:$dbname:$dbuser:$password";
+     $result=`PGPASSFILE=$filename @@PGBINDIR@@/psql -p $port -h $host -U $dbuser -c "$query" --tuples-only $dbname`;
   } else {
-     $result=`@@PGBINDIR@@/psql -p $port -h $host -c "$query" --tuples-only -U $dbuser $dbname`;
+     $result=`@@PGBINDIR@@/psql -p $port -h $host -c "$query" -U $dbuser --tuples-only $dbname`;
   }
   chomp $result;
   #print "Query was: $query\n";