#!/usr/bin/perl -w # user_disuse.pl - by dual # # Determine and email user disuse # # Less draconian then wiping the # user and all of their files ################################# use strict; use Date::Calc qw (Delta_Days); # So, yeah, I've only got one user my $user = 'USER'; my $mon_to_num; # Get script run time (my $yr_now, my $mon_now, my $day_now) = (localtime)[5, 4, 3]; $yr_now = $yr_now + 1900; $mon_now = $mon_now + 1; my @now = ($yr_now, $mon_now, $day_now); # Get last login time for user my $yr_then = `date '+%G'`; my @array = `last | grep $user`; # Test if user is even in last if (! @array) { mail(); exit; } my @reverse = reverse @array; my $pop = pop @reverse; my @split = split (/\s+/, $pop); my $mon_then = $split[4]; my $day_then = $split[5]; if ($mon_then =~ /Jan/) { $mon_to_num = 1; } elsif ($mon_then =~ /Feb/) { $mon_to_num = 2; } elsif ($mon_then =~ /Mar/) { $mon_to_num = 3; } elsif ($mon_then =~ /Apr/) { $mon_to_num = 4; } elsif ($mon_then =~ /May/) { $mon_to_num = 5; } elsif ($mon_then =~ /Jun/) { $mon_to_num = 6; } elsif ($mon_then =~ /Jul/) { $mon_to_num = 7; } elsif ($mon_then =~ /Aug/) { $mon_to_num = 8; } elsif ($mon_then =~ /Sep/) { $mon_to_num = 9; } elsif ($mon_then =~ /Oct/) { $mon_to_num = 10; } elsif ($mon_then =~ /Nov/) { $mon_to_num = 11; } else { $mon_to_num = 12; } my @then = ($yr_then, $mon_to_num, $day_then); # Compare dates and mail results or exit my $diff = Delta_Days (@then, @now); if ($diff >= 20) { mail(); } # Begin mail function sub mail { open MAIL, "|/bin/mail -s \"Check on user: $user\" EMAIL\@HOST" or die "Can't pipe: $!"; print MAIL "User $user isn't in last or hasn't logged in in 20 days."; print MAIL "\n"; close MAIL; }