#!/usr/bin/env perl use strict; use warnings; use v5.10; use File::Basename; use Net::IP; use utf8; use ACU::Log; $ACU::Log::log_file = "/var/log/hooks/" . basename($0) . ".log"; my $ip = $1 if ($ENV{'SSH_CLIENT'} =~ m/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/); exit 0 if (!$ip); log DEBUG, "Connection with $ARGV[0] to $ENV{GL_REPO} from $ip"; my $promo = qx(git config hooks.promo); my $id_project = qx(git config hooks.idproject); my $repo_login = qx(git config hooks.repologin); my @habitent_loin = qw(amed_m bellev_m freima_m ikouna_l simon_j faure_n abdelm_a habri_z trang_d henrie_p verbec_y molini_v); # First, check if the repository is in the YYYY/ directory exit 0 if (($promo && $id_project && $repo_login) || $ENV{GL_REPO} !~ /^2[0-9]{3}\/.+\/.+/); my ($ref, $oldsha, $newsha) = @ARGV; $promo = $1 if (!$promo && $ENV{'GL_REPO'} =~ m/([0-9]{4}).*/); $id_project = $1 if (!$id_project && $ENV{'GL_REPO'} =~ m/.*\/(.*)\//); $repo_login = $1 if (!$repo_login && $ENV{'GL_REPO'} =~ m/.*\/.*\/(.*)/); my $read = ($ARGV[0] =~ /R/); my $write = ($ARGV[0] =~ /W/); $ip = Net::IP->new($ip) or die ("IP invalide"); my $labnetwork = Net::IP->new('192.168.0.0/16'); if ($ip->overlaps($labnetwork) == $IP_A_IN_B_OVERLAP) { exit 0; } #else #{ # log ERROR, "Les dépôts Git sont en cours de maintenance, veuillez réessayer dans quelques minutes."; # exit 1; #} exit 0 if (grep { /\Q$ENV{GL_USER}\E/ } @habitent_loin); my $schoolnetwork = Net::IP->new('10.41.0.0/16'); my $vjschoolnetwork = Net::IP->new('10.3.0.0/16'); if ( $ip->overlaps($schoolnetwork) != $IP_A_IN_B_OVERLAP && $ip->overlaps($vjschoolnetwork) != $IP_A_IN_B_OVERLAP ) { say "Votre IP est : ".$ip->ip(); log ERROR, "Vous n'êtes pas autorisé à envoyer vos modifications depuis cette IP." if ($write); log ERROR, "Vous n'êtes pas autorisé à accéder à ce dépôt depuis cette IP." if ($read); exit 1; } my $sshnetwork = Net::IP->new('10.41.253.0/24'); if ($ip->overlaps($sshnetwork) == $IP_A_IN_B_OVERLAP) { say "Votre IP est : ".$ip->ip(); log ERROR, "Vous n'êtes pas autorisé à envoyer vos modifications depuis cette IP." if ($write); log ERROR, "Vous n'êtes pas autorisé à accéder à ce dépôt depuis cette IP." if ($read); exit 1; } exit 0;