Jan Wieck JanWieck
Fri Oct 20 21:28:01 PDT 2006
On 10/20/2006 2:08 PM, Peter Eisentraut wrote:
> I looked into fixing the temporary file exploits in the Perl tools (bug 
> 1599), but I didn't really get the point of using temporary files at 
> all.  You can just build the script in a string.  See the attached 
> patch for an example.  If this is acceptable, I'll fix up the other 
> scripts as well.

Thinking of it ... shouldn't the "proper" implementation of temp 
directory perms of a server OS take care of the issue to begin with? 
/tmp on my systems is drwxrwxrwt ... doesn't that avoid the problem?


Jan



> 
> 
> 
> ------------------------------------------------------------------------
> 
> diff -ur ../slony1-1.2.0.orig/tools/altperl/slonik_subscribe_set.pl ./tools/altperl/slonik_subscribe_set.pl
> --- ../slony1-1.2.0.orig/tools/altperl/slonik_subscribe_set.pl	2005-05-31 18:11:05.000000000 +0200
> +++ ./tools/altperl/slonik_subscribe_set.pl	2006-10-20 19:50:47.000000000 +0200
> @@ -45,10 +45,10 @@
>  
>  get_set($set) or die "Non-existent set specified.\n";
>  
> -$FILE="/tmp/slonik-subscribe.$$";
> -open(SLONIK, ">$FILE");
> -print SLONIK genheader();
> -print SLONIK "  try {\n";
> +my $slonik = '';
> +
> +$slonik .= genheader();
> +$slonik .= "  try {\n";
>  
>  if ($DSN[$node]) {
>    my $provider = $SET_ORIGIN;
> @@ -61,15 +61,14 @@
>    } else {
>      $forward = "yes";
>    }
> -  print SLONIK "    subscribe set (id = $set, provider = $provider, receiver = $node, forward = $forward);\n";
> +  $slonik .= "    subscribe set (id = $set, provider = $provider, receiver = $node, forward = $forward);\n";
>  } else {
>    die "Node $node not found\n";
>  }
>  
> -print SLONIK "  }\n";
> -print SLONIK "  on error {\n";
> -print SLONIK "    exit 1;\n";
> -print SLONIK "  }\n";
> -print SLONIK "  echo 'Subscribed nodes to set $set';\n";
> -close SLONIK;
> -run_slonik_script($FILE);
> +$slonik .= "  }\n";
> +$slonik .= "  on error {\n";
> +$slonik .= "    exit 1;\n";
> +$slonik .= "  }\n";
> +$slonik .= "  echo 'Subscribed nodes to set $set';\n";
> +run_slonik_script($slonik);
> diff -ur ../slony1-1.2.0.orig/tools/altperl/slon-tools.pm ./tools/altperl/slon-tools.pm
> --- ../slony1-1.2.0.orig/tools/altperl/slon-tools.pm	2005-11-15 19:09:59.000000000 +0100
> +++ ./tools/altperl/slon-tools.pm	2006-10-20 20:03:13.000000000 +0200
> @@ -83,18 +83,15 @@
>  # then invokes it and deletes it
>  sub run_slonik_script {
>    my ($script) = @_;
> -  chomp $script;
>    open(OUT, ">>$LOGDIR/slonik_scripts.log");
>    my $now = `date`;
>    chomp $now;
>    print OUT "# -------------------------------------------------------------\n";
>    print OUT "# Script: $script submitted at $now \n";
>    print OUT "# -------------------------------------------------------------\n";
> +  print OUT $script;
>    close OUT;
> -  `cat $script >> $LOGDIR/slonik_scripts.log`;
> -  #print `slonik < $script`;
> -  print `cat $script`;
> -  unlink($script);
> +  print $script;
>  }
>  
>  sub ps_args {
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Slony1-general mailing list
> Slony1-general at gborg.postgresql.org
> http://gborg.postgresql.org/mailman/listinfo/slony1-general


-- 
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck at Yahoo.com #



More information about the Slony1-general mailing list