httpd-test-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestRun.pm
Date Fri, 31 Jan 2003 00:53:45 GMT
stas        2003/01/30 16:53:45

  Modified:    perl-framework/Apache-Test/lib/Apache TestRun.pm
  Log:
  # handle the cases when the test suite is run under 'root':
  #
  # 1. When user 'bar' is chosen to run Apache with, files and dirs
  #    created by 'root' might be not writable/readable by 'bar'
  #
  # 2. when the source is extracted as user 'foo', and the chosen user
  #    to run Apache under is 'bar', in which case normally 'bar' won't
  #    have the right permissions to write into the fs created by 'foo'.
  #
  # We solve that by 'chown -R bar.bar t/' in a portable way.
  #
  # at the end of the run we restore the perms to the original ones
  
  Revision  Changes    Path
  1.100     +46 -0     httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm
  
  Index: TestRun.pm
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
  retrieving revision 1.99
  retrieving revision 1.100
  diff -u -r1.99 -r1.100
  --- TestRun.pm	30 Jan 2003 23:59:40 -0000	1.99
  +++ TestRun.pm	31 Jan 2003 00:53:45 -0000	1.100
  @@ -20,6 +20,7 @@
   use subs qw(exit_shell exit_perl);
   
   my %core_files  = ();
  +my %original_t_perms = ();
   
   my @std_run      = qw(start-httpd run-tests stop-httpd);
   my @others       = qw(verbose configure clean help ssl http11);
  @@ -451,6 +452,8 @@
           }
       }
   
  +    $self->adjust_t_perms();
  +
       if ($opts->{'start-httpd'}) {
           exit_perl 0 unless $server->start;
       }
  @@ -489,6 +492,8 @@
   sub stop {
       my $self = shift;
   
  +    $self->restore_t_perms;
  +
       return $self->{server}->stop if $self->{opts}->{'stop-httpd'};
   }
   
  @@ -645,6 +650,47 @@
           # old core file at the end of the run and not complain then
           $core_files{$core} = -M $core;
       }, $vars->{top_dir});
  +}
  +
  +# this function handles the cases when the test suite is run under
  +# 'root':
  +#
  +# 1. When user 'bar' is chosen to run Apache with, files and dirs
  +#    created by 'root' might be not writable/readable by 'bar'
  +#
  +# 2. when the source is extracted as user 'foo', and the chosen user
  +#    to run Apache under is 'bar', in which case normally 'bar' won't
  +#    have the right permissions to write into the fs created by 'foo'.
  +#
  +# We solve that by 'chown -R bar.bar t/' in a portable way.
  +sub adjust_t_perms {
  +    my $self = shift;
  +    %original_t_perms = (); # reset global
  +
  +    my $user = getpwuid($>) || '';
  +    if ($user eq 'root') {
  +        my $vars = $self->{test_config}->{vars};
  +        my $user = $vars->{user};
  +        my($uid, $gid) = (getpwnam($user))[2..3]
  +            or die "Can't find out uid/gid of '$user'";
  +        warning "root mode: changing the fs ownership to '$user' ($uid:$gid)";
  +        finddepth(sub {
  +            $original_t_perms{$File::Find::name} = [(stat $_)[4..5]];
  +            chown $uid, $gid, $_;
  +        }, $vars->{t_dir});
  +    }
  +}
  +
  +sub restore_t_perms {
  +    my $self = shift;
  +
  +    if (%original_t_perms) {
  +        my $vars = $self->{test_config}->{vars};
  +        while (my($file, $ids) = each %original_t_perms) {
  +            next unless -e $file; # files could be deleted
  +            chown @$ids, $file;
  +        }
  +    }
   }
   
   sub run_request {
  
  
  

Mime
View raw message