#!/usr/bin/perl @ll = `lastlog | grep -vi "never logged" | grep -vi "latest"`; @monthdays = (0,31,59,90,120,151,181,212,243,273,303,334); $maxdays = 60; chomp ($ct = `date`); foreach $l (@ll) { chomp($l); my ($user,$rest) = split(/ +/,$l); my $lastdate = substr($l,43); my $pd = parsedate($lastdate); my $cd = parsedate($ct); $diff = "$cd $pd"; my $delta = delta($diff); if (($delta >= $maxdays) && ($user ne "root")) { print "user:$user lastlogin:$delta days ago \t=> \tusermod -L $user\n"; system("usermod -L $user"); } } exit; sub parsedate { my $ds; $ds = $_[0]; $_ = $ds; my ($dow,$mon,$dd,$hms,$timez,$yyyy) = split(/ +/,$_); my $ix = index("-Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec","-$mon"); if ($ix == -1) { die "Illegal month specification: [$mon]"; } my $mno = substr("010203040506070809101112",($ix / 2),2); my ($hh,$mm,$ss) = split(/:/,$hms); $dd = "0" . $dd if length($dd) == 1; my $parsedate="$yyyy $mno $dd $hh $mm $ss"; return $parsedate; } sub delta { my $ds; $ds = $_[0]; $_ = $ds; my ($ny, $nm, $nd, $hour1, $minute1, $seconds1, $oy, $om, $od, $hour2, $minute2, $seconds2) = split(/ +/,$_); return ($ny-$oy) * 365 + $monthdays[$nm-1]-$monthdays[$om-1] + ($nd-$od); }