1#! @PERL@ -T 2# -*-Perl-*- 3 4# Copyright (C) 1994-2005 The Free Software Foundation, Inc. 5 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2, or (at your option) 9# any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15 16############################################################################### 17############################################################################### 18############################################################################### 19# 20# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE 21# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE 22# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS 23# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND 24# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE 25# <@PACKAGE_BUGREPORT@> MAILING LIST. 26# 27# For more on general Perl security and taint-checking, please try running the 28# `perldoc perlsec' command. 29# 30############################################################################### 31############################################################################### 32############################################################################### 33 34# Perl filter to handle pre-commit checking of files. This program 35# records the last directory where commits will be taking place for 36# use by the log_accum.pl script. 37# 38# IMPORTANT: this script interacts with log_accum, they have to agree 39# on the tmpfile name to use. See $LAST_FILE below. 40# 41# Contributed by David Hampton <hampton@cisco.com> 42# Stripped to minimum by Roy Fielding 43# 44############################################################ 45$TMPDIR = $ENV{'TMPDIR'} || '/tmp'; 46$FILE_PREFIX = '#cvs.'; 47 48# If see a "-u $USER" argument, then destructively remove it from the 49# argument list, so $ARGV[0] will be the repository dir again, as it 50# used to be before we added the -u flag. 51if ($ARGV[0] eq '-u') { 52 shift @ARGV; 53 $CVS_USERNAME = shift (@ARGV); 54} 55 56# This needs to match the corresponding var in log_accum.pl, including 57# the appending of the pgrp and username suffixes (see uses of this 58# var farther down). 59$LAST_FILE = "$TMPDIR/${FILE_PREFIX}lastdir"; 60 61sub write_line { 62 my ($filename, $line) = @_; 63 64# A check of some kind is needed here, but the rules aren't apparent 65# at the moment: 66 67# foreach($filename, $line){ 68# $_ =~ m#^([-\@\w.\#]+)$#; 69# $_ = $1; 70# } 71 72 open(FILE, ">$filename") || die("Cannot open $filename: $!\n"); 73 print(FILE $line, "\n"); 74 close(FILE); 75} 76 77# 78# Record this directory as the last one checked. This will be used 79# by the log_accumulate script to determine when it is processing 80# the final directory of a multi-directory commit. 81# 82$id = getpgrp(); 83 84&write_line("$LAST_FILE.$id.$CVS_USERNAME", $ARGV[0]); 85 86exit(0); 87