[BACK]Return to Sh.pm CVS log [TXT][DIR] Up to [local] / botnow

Annotation of botnow/Sh.pm, Revision 1.1

1.1     ! bountyht    1: #!/usr/bin/perl
        !             2:
        !             3: package Shell;
        !             4:
        !             5: use strict;
        !             6: use warnings;
        !             7: use OpenBSD::Pledge;
        !             8: use OpenBSD::Unveil;
        !             9: use Data::Dumper;
        !            10:
        !            11: my $authlog = "/var/log/authlog";
        !            12: my $etcpasswd = "/etc/master.passwd";
        !            13: my @etcpasswd = readarray($etcpasswd);
        !            14: my @users;
        !            15: foreach my $line (@etcpasswd) {
        !            16:        if ($line =~ /^([^:]+):[^:]+:([^:]+)/) {
        !            17:                my ($username, $uid) = ($1, $2);
        !            18:                if ($uid > 1000) {
        !            19:                        push(@users, $username);
        !            20:                }
        !            21:        }
        !            22: }
        !            23: my @files = ("/var/log/authlog");
        !            24: push(@files, glob q("/var/log/authlog.?"));
        !            25: push(@files, glob q("/var/log/authlog.1?"));
        !            26: foreach my $user (@users) {
        !            27:        my $lastseen;
        !            28:        foreach my $file (@files) {
        !            29:                my @logs = readarray($file);
        !            30:                my @seen = grep(/$user/, @logs);
        !            31:                if (scalar(@seen) && $seen[0] =~ /^(\w+ \d+ \d\d:\d\d:\d\d)/) {
        !            32:                        $lastseen = $1;
        !            33:                        print "$user => $lastseen\n";
        !            34:                        last;
        !            35:                }
        !            36:        }
        !            37:        if (!defined($lastseen)) {
        !            38:                print "$user => Never logged in\n";
        !            39:        }
        !            40: }
        !            41: #warn Dumper \$loglines[1];
        !            42: sub readarray {
        !            43:        my ($filename) = @_;
        !            44:        open(my $fh, '<', $filename) or die "Could not read file '$filename' $!";
        !            45:        chomp(my @lines = <$fh>);
        !            46:        close $fh;
        !            47:        return @lines;
        !            48: }

CVSweb