home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / passwd / examples / passwd.expire.cron
Encoding:
Text File  |  2006-07-11  |  1.8 KB  |  58 lines

  1. #!/usr/bin/perl
  2. #
  3. # passwd.expire.cron: sample expiry notification script for use as a cronjob
  4. #
  5. # Copyright 1999 by Ben Collins <bcollins@debian.org>, complete rights granted
  6. # for use, distribution, modification, etc.
  7. #
  8. # Usage:
  9. #    edit the listed options, including the actual email, then rename to
  10. #    /etc/cron.daily/passwd
  11. #
  12. #    If your users don't have a valid login shell (ie. they are ftp or mail
  13. #    users only), they will need some other way to change their password
  14. #    (telnet will work since login will handle password aging, or a poppasswd
  15. #    program, if they are mail users).
  16.  
  17. # <CONFIG> #
  18.  
  19. # should be same as /etc/adduser.conf
  20. $LOW_UID=1000;
  21. $HIGH_UID=29999;
  22.  
  23. # this let's the MTA handle the domain,
  24. # set it manually if you want. Make sure
  25. # you also add the @ like "\@domain.com"
  26. $MAIL_DOM="";
  27.  
  28. # </CONFIG> #
  29.  
  30. # Set the current day reference
  31. $curdays = int(time() / (60 * 60 * 24));
  32.  
  33. # Now go through the list
  34.  
  35. open(SH, "< /etc/shadow");
  36. while (<SH>) {
  37.     @shent = split(':', $_);
  38.     @userent = getpwnam($shent[0]);
  39.     if ($userent[2] >= $LOW_UID && $userent[2] <= $HIGH_UID) {
  40.     if ($curdays > $shent[2] + $shent[4] - $shent[5] &&
  41.         $shent[4] != -1 && $shent[4] != 0 &&
  42.         $shent[5] != -1 && $shent[5] != 0) {
  43.         $daysleft = ($shent[2] + $shent[4]) - $curdays;
  44.         if ($daysleft == 1) { $days = "day"; } else {$days = "days"; }
  45.             if ($daysleft < 0) { next; }
  46.         open (MAIL, "| mail -s '[WARNING] account will expire in $daysleft $days' $shent[0]${MAIL_DOM}");
  47.         print MAIL <<EOF;
  48. Your account will expire in $daysleft $days. Please change your password before
  49. then or your account will expire
  50. EOF
  51.         close (MAIL);
  52.         # This makes sure we also get a list of almost expired users
  53.         print "$shent[0]'s account will expire in $daysleft days\n";
  54.     }
  55.     }
  56.     @userent = getpwent();
  57. }
  58.