summaryrefslogtreecommitdiffstats
path: root/debian/passwd.expire.cron
diff options
context:
space:
mode:
Diffstat (limited to 'debian/passwd.expire.cron')
-rw-r--r--debian/passwd.expire.cron57
1 files changed, 57 insertions, 0 deletions
diff --git a/debian/passwd.expire.cron b/debian/passwd.expire.cron
new file mode 100644
index 0000000..5e5b69f
--- /dev/null
+++ b/debian/passwd.expire.cron
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+#
+# passwd.expire.cron: sample expiry notification script for use as a cronjob
+#
+# Copyright 1999 by Ben Collins <bcollins@debian.org>, complete rights granted
+# for use, distribution, modification, etc.
+#
+# Usage:
+# edit the listed options, including the actual email, then rename to
+# /etc/cron.daily/passwd
+#
+# If your users don't have a valid login shell (ie. they are ftp or mail
+# users only), they will need some other way to change their password
+# (telnet will work since login will handle password aging, or a poppasswd
+# program, if they are mail users).
+
+# <CONFIG> #
+
+# should be same as /etc/adduser.conf
+$LOW_UID=1000;
+$HIGH_UID=29999;
+
+# this let's the MTA handle the domain,
+# set it manually if you want. Make sure
+# you also add the @ like "\@domain.com"
+$MAIL_DOM="";
+
+# </CONFIG> #
+
+# Set the current day reference
+$curdays = int(time() / (60 * 60 * 24));
+
+# Now go through the list
+
+open(SH, "< /etc/shadow");
+while (<SH>) {
+ @shent = split(':', $_);
+ @userent = getpwnam($shent[0]);
+ if ($userent[2] >= $LOW_UID && $userent[2] <= $HIGH_UID) {
+ if ($curdays > $shent[2] + $shent[4] - $shent[5] &&
+ $shent[4] != -1 && $shent[4] != 0 &&
+ $shent[5] != -1 && $shent[5] != 0) {
+ $daysleft = ($shent[2] + $shent[4]) - $curdays;
+ if ($daysleft == 1) { $days = "day"; } else {$days = "days"; }
+ if ($daysleft < 0) { next; }
+ open (MAIL, "| mail -s '[WARNING] account will expire in $daysleft $days' $shent[0]${MAIL_DOM}");
+ print MAIL <<EOF;
+Your account will expire in $daysleft $days. Please change your password before
+then or your account will expire
+EOF
+ close (MAIL);
+ # This makes sure we also get a list of almost expired users
+ print "$shent[0]'s account will expire in $daysleft days\n";
+ }
+ }
+ @userent = getpwent();
+}