#!/usr/bin/perl -w # squirrely WRS 2002-06-25 # - V0.92 WRS 2001-06-27 # check for squirreliness in /sbin, possibly detecting "suckit"? use strict ; my $rootdev ; foreach (`mount`) { $rootdev = $1 if m|^(\S+) on / | ; } die "Can't determine root device!\n" unless $rootdev ; print "RootDev: $rootdev\n" ; print "Validate /sbin directory:\n" ; my %ls ; foreach (`ls -ia /sbin`) { next if /^\s*$/ ; next if /^total / ; my ($inode, $file) = /\s*(\d+)\s*(.*)/ or die "Bad ls -i output:\n$_\n" ; $ls{$file}->{file} = $file ; $ls{$file}->{inode} = $inode ; } my %lsd ; foreach (`/sbin/debugfs -R "ls -l /sbin" $rootdev`) { next if /^\s*$/ ; my ($inode, $mode, $nlink, $uid, $gid, $size, $date, $file) = /\s*(\d+)\s*(\d*)\s*(\(\d*\)\s*)?(\d*)\s*(\d*)\s*(\d*)\s*(\S* \S*)\s*(.*)/ or die "Bad debugfs output:\n$_\n" ; # print "< $inode, $mode, $uid, $gid, $size, $date, $file >\n" ; $lsd{$file}->{file} = $file ; $lsd{$file}->{inode} = $inode ; } my %files = map {$_,1} keys %ls, keys %lsd ; my @files = keys %files ; my $valid = 0 ; my $squirrely = 0 ; foreach my $in (@files) { my $inode = $ls{$in}->{inode} ; my $inoded = $lsd{$in}->{inode} ; if ( defined $inode and defined $inoded) { if ($inode == $inoded) { $valid++ ; } else { $squirrely++ ; print " $in \t$inode != \t$inoded \n" ; } } elsif ( defined $inode and !defined $inoded) { $squirrely++ ; print " $in \t$inode added \n" ; } elsif (!defined $inode and defined $inoded) { $squirrely++ ; print " $in \t$inoded missing \n" ; } else { die "Impossible! Strange Error" ; } } print "Valid: $valid, Squirrely: $squirrely\n" ; if ($squirrely > 0) { print "\n*** Squirreliness Alert!!! ***\n\n" ; }