summaryrefslogtreecommitdiff
path: root/eg/scan/scan_last
blob: 65a07fe37724a1d7c19c6c6510cf5395aad92960 (plain)
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
#!/usr/bin/perl -P

# $Header: scan_last,v 3.0 89/10/18 15:15:31 lwall Locked $

# This reports who was logged on at weird hours

($dy, $mo, $lastdt) = split(/ +/,`date`);

open(Last, 'exec last 2>&1 |') || die "scan_last: can't run last";

while (<Last>) {
#if defined(mc300) || defined(mc500) || defined(mc700)
    $_ = substr($_,0,19) . substr($_,23,100);
#endif
    next if /^$/;
    (print),next if m|^/|;
    $login  = substr($_,0,8);
    $tty    = substr($_,10,7);
    $from   = substr($_,19,15);
    $day    = substr($_,36,3);
    $mo     = substr($_,40,3);
    $dt     = substr($_,44,2);
    $hr     = substr($_,47,2);
    $min    = substr($_,50,2);
    $dash   = substr($_,53,1);
    $tohr   = substr($_,55,2);
    $tomin  = substr($_,58,2);
    $durhr  = substr($_,63,2);
    $durmin = substr($_,66,2);
    
    next unless $hr;
    next if $login eq 'reboot  ';
    next if $login eq 'shutdown';

    if ($dt != $lastdt) {
	if ($lastdt < $dt) {
	    $seen += $dt - $lastdt;
	}
	else {
	    $seen++;
	}
	$lastdt = $dt;
    }

    $inat = $hr + $min / 60;
    if ($tohr =~ /^[a-z]/) {
	$outat = 12;		# something innocuous
    } else {
	$outat = $tohr + $tomin / 60;
    }

  last if $seen + ($inat < 8) > 1;

    if ($inat < 5 || $inat > 21 || $outat < 6 || $outat > 23) {
	print;
    }
}