1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
#!@PERL@
##############################################################
#
# Script wrapper, mails output if there is any
#
# Mainly intended for running cfengine.
#
##############################################################
if ($< != 0)
{
die "cfwrap: Bad luck, only root can run this one!\n";
}
$mail = 0;
$prefix = "@prefix@";
$ENV{CFINPUTS} = "$prefix/lib/cfengine/inputs";
$ENV{LD_LIBRARY_PATH} = "/usr/ucblib";
$sysadm = `$prefix/bin/cfengine -a`;
$comm = join(" ",@ARGV);
@path = split(m;/;,$comm);
$suff = $path[$#path];
if ( -d "/var/run/cfengine" )
{
$tmpfile = "/var/run/cfengine/cfwrap.$$";
$oldtmpfile = "/var/run/cfengine/oldcfwrap";
unlink "/etc/oldcfwrap";
}
elsif ( -d "/etc/cfengine" )
{
$tmpfile = "/etc/cfengine/cfwrap.$$";
$oldtmpfile = "/etc/cfengine/oldcfwrap";
unlink "/etc/oldcfwrap";
}
else
{
$tmpfile = "/etc/cfwrap.$$";
$oldtmpfile = "/etc/oldcfwrap";
}
open (H,"/bin/hostname |") || die "cfwrap: Can't get hostname";
$hostname = <H>;
chop $hostname;
close(H);
open (SH,"$comm 2>&1 | ") || die "cfwrap: Can't start shell\n";
open (OUT,">$tmpfile") || die "cfwrap: Can't open workfile\n";
($s,$m,$h,$md,$mn,$yr,$wd,$yday) = localtime(time);
print OUT "Subject: cfengine ($hostname) ($yday)\n\n";
print OUT "This message originates from host $hostname on $today\n";
print OUT "The full command issued was: $comm.\n\n";
for ($i = 0; $i < $wd; $i++)
{
print OUT "+";
}
print OUT "\n";
while (<SH>)
{
if ( /\S/ )
{
print OUT "$_";
$mail = 1;
}
}
close(OUT);
close(SH);
#
# Only mail if mail is different or new day
#
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size1) = stat $oldtmpfile;
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size2) = stat $tmpfile;
if (($size1 != $size2))
{
if ($mail)
{
system ("/bin/cat $tmpfile | $prefix/lib/cfengine/bin/cfmail $sysadm");
}
}
rename ($tmpfile,$oldtmpfile);
|