File: cfwrap.in

package info (click to toggle)
cfengine 1.4.9-3
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 3,540 kB
  • ctags: 1,861
  • sloc: ansic: 25,408; sh: 1,708; perl: 1,088; lex: 690; makefile: 435; lisp: 182; yacc: 101; csh: 24
file content (113 lines) | stat: -rw-r--r-- 1,984 bytes parent folder | download | duplicates (2)
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);