diff options
Diffstat (limited to 'usr/src/pinyadmin/sbin/rmrepo')
-rwxr-xr-x | usr/src/pinyadmin/sbin/rmrepo | 63 |
1 files changed, 10 insertions, 53 deletions
diff --git a/usr/src/pinyadmin/sbin/rmrepo b/usr/src/pinyadmin/sbin/rmrepo index 864830f..8b26feb 100755 --- a/usr/src/pinyadmin/sbin/rmrepo +++ b/usr/src/pinyadmin/sbin/rmrepo @@ -3,62 +3,19 @@ use strict; use warnings; -my( $reponame, $uid, $gitowner, $wikilisttempfile, $cgitrctempfile); +use Piny; -if ( ( ! scalar $ARGV[0] ) or ( scalar $ARGV[1] ) or ( $ARGV[0] !~ /^[a-z0-9][a-z0-9-]+$/ ) ) { - print( "Usage: rmrepo REPONAME\n" ); - exit( 1 ); -} else { - $reponame = $ARGV[0]; -}; - -open (PASSWD, '/etc/passwd'); -while(<PASSWD>) { - if( $_ =~ /^$ENV{SUDO_USER}:.+?:(.+?):/ ) { $uid = $1; }; # grabbing uid. -}; -close(PASSWD); - -unless( -d "/srv/git/$reponame.git" ) { - print( "/srv/git/$reponame.git doesn't exist!\n" ); - exit( 2 ); -}; - -$gitowner = (stat "/srv/git/$reponame.git")[4]; +my $env = Piny::Environment->new; -if( ( $gitowner != $uid ) and ( $gitowner != 65534 ) ) { - print( "$reponame is not owned by you!\n" ); - exit( 3 ); -}; - -# We have to be careful about how we delete things; we don't want have post-update or ikiwiki.cgi thrashing, and we REALLY don't want to leave remappable owner UIDs around, but we're also keying security on /srv/git/$reponame -system( "/bin/chown -R nobody.nogroup /srv/git/$reponame.git" ); - -unlink( "/etc/ikiwiki/wikilist.d/$reponame" ); -$wikilisttempfile = `/bin/mktemp`; -chomp ( $wikilisttempfile ); -chmod ( 0644, $wikilisttempfile ); -system( "/bin/cat /etc/ikiwiki/wikilist.d/* > $wikilisttempfile" ); -system( "/bin/mv $wikilisttempfile /etc/ikiwiki/wikilist" ); # This is marginally racy, but the consequences are probably ignorable. +foreach my $reponame ( @ARGV ) { -unlink( "/etc/cgitrc.d/$reponame" ); -$cgitrctempfile = `/bin/mktemp`; -chomp ( $cgitrctempfile ); -chmod ( 0644, $cgitrctempfile ); -system( "/bin/cat /etc/cgitrc.d/* > $cgitrctempfile" ); -system( "/bin/mv $cgitrctempfile /etc/cgitrepos" ); # This is marginally racy, but the consequences are probably ignorable. + my $repo = Piny::Repo->new( $reponame ); -system( "/bin/rm -r /srv/www/piny.be/$reponame" ); -system( "/bin/rm -r /srv/www/secure.piny.be/repos/$reponame" ); + if ( $repo->owner->uid != $env->user->uid ) { + print STDERR "You are not the owner of $reponame!\n"; + exit 1; + }; -unlink( "/etc/ikiwiki/piny/$reponame.setup" ); -system( "/bin/rm -r /srv/ikiwiki/$reponame" ); + $repo->destroy; -unlink( "/etc/apache2/piny-available/$reponame" ); -unlink( "/etc/apache2/piny-enabled/$reponame" ); -system( '/etc/init.d/apache2 reload | grep -v "Reloading web server config: apache2."' ); - -system( "/usr/sbin/delgroup --quiet git-$reponame" ); -system( "/usr/sbin/deluser --quiet --remove-home ikiwiki-$reponame" ); -system( "/usr/sbin/delgroup --quiet ikiwiki-$reponame" ); - -system( "/bin/rm -rf /srv/git/$reponame.git" ); +}; |