#!/usr/bin/perl5 -w
# Script: trackthis.pl (rg.cgi)
# Authour: MAST Communications mast@interlog.com
# Modified by: Tom Brown
# For: The Roberts Group
# Last Modified: February 25, 1998
$| = 1;
# set $sendgif to 0 to use server side includes to invoke the script
# if $sendgif is set to 1, invoke the script with an IMG tag on the HTML
# page to be logged
# e.g.
my $sendgif = 1;
# send gif
@gif = qw(47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff
00 00 00 21 f9 04 01 00 00 00 00 2c 00 00 00 00
01 00 01 00 00 02 02 44 01 00 3b);
if ($sendgif) {
print "Content-type: image/gif\n\n", pack("c43", map hex($_), @gif);
}
# global variables
my ($dir,$sec,$min,$hour,$mday,$mon,$year,@garbage,$pages,@junk,
@pages,$host,$realhost,$IP,$browser,$page,@fields,
$real_page,$real_browser);
$recipient1 = 'broberts@interlog.com';
$recipient2 = 'tom@tntt.com';
$max_entries = 500;
$dir = '/user/br/broberts';
$error = '/user/br/broberts/public_html/nocache/rgerror.log';
$logfile = '/user/br/broberts/public_html/nocache/rghits.txt';
$bak = '/user/br/broberts/public_html/nocache/rgsummary.txt';
$mailprog = '/usr/sbin/sendmail';
# get the date
($min,$hour,$mday,$year) = (localtime)[1,2,3,5];
($min < 10) ? $min = "0$min" : $min = $min;
$mon = ('01' .. '12')[(localtime)[4]];
$year += 1900;
$shortdate = "$mon/$mday/$year $hour:$min";
# stuff to get around Interlog's Cache system
$realhost = $ENV{'REMOTE_ADDR'};
$realhost =~ s/\s.*//;
# resolve host name from IP address
$IP = $realhost;
($a,$b,$c,$d) = split /\./,$IP;
$ipadr = pack "C4",$a,$b,$c,$d;
($host,@junk)=(gethostbyaddr("$ipadr", 2));
unless (($IP) && $IP =~ m(199\.212\.155\.202)) {
# format the data to be printed in the log
$real_browser = $ENV{'HTTP_USER_AGENT'};
@fields = split /\s+/, $real_browser;
$browser = "$fields[0] $fields[1] $fields[2]";
$browser =~ s/via.*//g;
if ($sendgif) {
$real_page = $ENV{'HTTP_REFERER'};
@pages = split /\/+/,$real_page;
shift @pages;
shift @pages;
shift @pages;
} else {
$real_page = $ENV{'DOCUMENT_URI'};
@pages = split /\//,$real_page;
($x,$y,@pages) = @pages;
}
$page = join "/",@pages;
# add data to log
open FILE, ">>$logfile" or &ErrorLog("Can't open $logfile: $!\n");
print FILE "$shortdate\|$real_page\|$browser\|$host\n";
close FILE;
open FILE, $logfile;
@filetext = ;
$log_count = @filetext;
close FILE;
if ($log_count >= $max_entries) {
open MAIL, "|$mailprog -t -oi" or &ErrorLog("Can't fork $mailprog: $!\n");
print MAIL "To: $recipient1\n";
print MAIL "From: $recipient1\n";
print MAIL "Cc: $recipient2\n";
print MAIL "Subject: Log File\n\n";
print MAIL qq(Latest 500 Roberts Group Hits now available at);
print MAIL qq(http://www.interlog.com/~broberts/nocache/rgsumpage.cgi\n);
close MAIL;
open OLDLOG, ">$bak" or &ErrorLog("Can't open $bak: $!\n");
print OLDLOG @filetext;
close OLDLOG;
open FILE, ">$logfile";
print "";
close FILE;
}
}
sub ErrorLog {
local($msg) = @_;
open FILE, ">>$error";
print FILE "$shortdate - rg.cgi error: $msg";
close FILE;
}
exit;