Return-Path: Delivered-To: apmail-httpd-test-cvs-archive@httpd.apache.org Received: (qmail 50236 invoked by uid 500); 31 Jan 2003 00:53:47 -0000 Mailing-List: contact test-cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: test-dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list test-cvs@httpd.apache.org Received: (qmail 50225 invoked from network); 31 Jan 2003 00:53:46 -0000 Date: 31 Jan 2003 00:53:45 -0000 Message-ID: <20030131005345.75032.qmail@icarus.apache.org> From: stas@apache.org To: httpd-test-cvs@apache.org Subject: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestRun.pm X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N 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 {