From 32c6a808925fc401ae01c134a2b99dff0e2ce5f1 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Sun, 26 Apr 2015 15:38:22 -0700 Subject: [PATCH] Project.pm: sanitize hooks directory on project creation Remove any kruft left over from `git init` and make sure the correct permissions and group are set before installing any of our own hooks. Signed-off-by: Kyle J. McKay --- Girocco/Project.pm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Girocco/Project.pm b/Girocco/Project.pm index 373fe38..cd14872 100644 --- a/Girocco/Project.pm +++ b/Girocco/Project.pm @@ -588,9 +588,10 @@ sub _setup { $self->_mkdir_forkees; + my $gid; mkdir($self->{path}) or die "mkdir $self->{path} failed: $!"; if ($Girocco::Config::owning_group) { - my $gid = scalar(getgrnam($Girocco::Config::owning_group)); + $gid = scalar(getgrnam($Girocco::Config::owning_group)); chown(-1, $gid, $self->{path}) or die "chgrp $gid $self->{path} failed: $!"; chmod(02775, $self->{path}) or die "chmod 02775 $self->{path} failed: $!"; } else { @@ -602,7 +603,16 @@ sub _setup { or die "info directory does not exist and unable to create it: $!"; -d $self->{path}."/hooks" or mkdir $self->{path}."/hooks" or die "hooks directory does not exist and unable to create it: $!"; - chmod 02775, $self->{path}."/hooks"; # this one never world writable + # clean out any kruft that may have come in from the initial template directory + if (opendir my $hooksdir, $self->{path}."/hooks") { + unlink map "$self->{path}/$_", grep { $_ ne '.' && $_ ne '..' } readdir $hooksdir; + closedir $hooksdir; + } + if ($Girocco::Config::owning_group) { + chown(-1, $gid, $self->{path}."/hooks") or die "chgrp $gid $self->{path}/hooks failed: $!"; + } + # hooks never world writable + chmod 02775, $self->{path}."/hooks" or die "chmod 02775 $self->{path}/hooks failed: $!"; system($Girocco::Config::git_bin, '--git-dir='.$self->{path}, 'config', 'receive.denyNonFastforwards', 'false') == 0 or die "disabling receive.denyNonFastforwards failed: $?"; system($Girocco::Config::git_bin, '--git-dir='.$self->{path}, 'config', 'gc.auto', '0') == 0 -- 2.11.4.GIT