|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 2088 (0x828) Types: TextFile Names: »scanner«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦b5330643c⟧ »./cops/perl-4.019/perl.tar.Z« └─⟦2b9a58213⟧ └─⟦this⟧ »perl-4.019/eg/scan/scanner«
#!/usr/bin/perl # $Header: scanner,v 4.0 91/03/20 01:14:11 lwall Locked $ # This runs all the scan_* routines on all the machines in /etc/ghosts. # We run this every morning at about 6 am: # !/bin/sh # cd /usr/adm/private # decrypt scanner | perl >scan.out 2>&1 # mail admin <scan.out # Note that the scan_* files should be encrypted with the key "-inquire", and # scanner should be encrypted somehow so that people can't find that key. # I leave it up to you to figure out how to unencrypt it before executing. $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin:/usr/ucb:.'; $| = 1; # command buffering on stdout print "Subject: bizarre happenings\n\n"; (chdir '/usr/adm/private') || die "Can't cd to /usr/adm/private: $!\n"; if ($#ARGV >= 0) { @scanlist = @ARGV; } else { @scanlist = split(/[ \t\n]+/,`echo scan_*`); } scan: while ($scan = shift(@scanlist)) { print "\n********** $scan **********\n"; $showhost++; $systype = 'all'; open(ghosts, '/etc/ghosts') || die 'No /etc/ghosts file'; $one_of_these = ":$systype:"; if ($systype =~ s/\+/[+]/g) { $one_of_these =~ s/\+/:/g; } line: while (<ghosts>) { s/[ \t]*\n//; if (!$_ || /^#/) { next line; } if (/^([a-zA-Z_0-9]+)=(.+)/) { $name = $1; $repl = $2; $repl =~ s/\+/:/g; $one_of_these =~ s/:$name:/:$repl:/; next line; } @gh = split; $host = $gh[0]; if ($showhost) { $showhost = "$host:\t"; } class: while ($class = pop(gh)) { if (index($one_of_these,":$class:") >=0) { $iter = 0; `exec crypt -inquire <$scan >.x 2>/dev/null`; unless (open(scan,'.x')) { print "Can't run $scan: $!\n"; next scan; } $cmd = <scan>; unless ($cmd =~ s/#!(.*)\n/$1/) { $cmd = '/usr/bin/perl'; } close(scan); if (open(PIPE,"exec rsh $host '$cmd' <.x|")) { sleep(5); unlink '.x'; while (<PIPE>) { last if $iter++ > 1000; # must be looping next if /^[0-9.]+u [0-9.]+s/; print $showhost,$_; } close(PIPE); } else { print "(Can't execute rsh: $!)\n"; } last class; } } } }