diff --git a/lam/HISTORY b/lam/HISTORY
index 8188ee61..dba2912f 100644
--- a/lam/HISTORY
+++ b/lam/HISTORY
@@ -2,7 +2,10 @@ September 2016
- Windows: allow to show effective members of a group
- LAM Pro:
-> Group of names/members + roles: allow to show effective members of a group
- -> Cron jobs: Move or delete expired accounts (Shadow, Windows, qmail, FreeRadius)
+ -> Cron jobs:
+ * Move or delete expired accounts (Shadow, Windows, qmail, FreeRadius)
+ * 389ds: added job to notify before password expires
+ -> 389ds: manage password expiration time with module "Account locking"
21.06.2016 5.4
diff --git a/lam/docs/manual-sources/howto.xml b/lam/docs/manual-sources/howto.xml
index 4b693ae1..20f471ed 100644
--- a/lam/docs/manual-sources/howto.xml
+++ b/lam/docs/manual-sources/howto.xml
@@ -2131,6 +2131,99 @@ mysql> GRANT ALL PRIVILEGES ON lam_cron.* TO 'lam_cron'@'localhost';
"2016-12-31".
+
+ 389ds: Notify users about password expiration
+
+ This will send your users an email reminder before their
+ password expires.
+
+ You need to activate the Account Locking module for users to
+ be able to add this job. The job can be added multiple times (e.g.
+ to send a second warning at a later time).
+
+ LAM calculates the expiration date based on the attribute
+ passwordExpirationTime.
+
+
+
+
+
+
+
+
+
+
+ Options
+
+
+
+
+ Option
+
+ Description
+
+
+
+ From address
+
+ The email address to set as FROM.
+
+
+
+ Reply-to address
+
+ Optional Reply-to address for email.
+
+
+
+ CC address
+
+ Optional CC mail address.
+
+
+
+ BCC address
+
+ Optional BCC mail address.
+
+
+
+ Subject
+
+ The email subject line. Supports wildcards, see
+ below.
+
+
+
+ Text
+
+ The email body text. Supports wildcards, see
+ below.
+
+
+
+ Notification period
+
+ Number of days to notify before password
+ expires.
+
+
+
+
+
+ Wildcards:
+
+ You can enter LDAP attributes as wildcards in the form
+ @@ATTRIBUTE_NAME@@. E.g. to add the user's common name use "@@cn@@".
+ For the common name it would be "@@cn@@".
+
+ There are also two special wildcards for the expiration date.
+ @@EXPIRE_DATE_DDMMYYYY@@ will print the date as e.g. "31.12.2016".
+ @@EXPIRE_DATE_YYYYMMDD@@ will print the date as e.g.
+ "2016-12-31".
+
+
Shadow: Notify users about password expiration
diff --git a/lam/docs/manual-sources/images/jobs_389dsPasswordMail1.png b/lam/docs/manual-sources/images/jobs_389dsPasswordMail1.png
new file mode 100644
index 00000000..d069d824
Binary files /dev/null and b/lam/docs/manual-sources/images/jobs_389dsPasswordMail1.png differ
diff --git a/lam/help/help.inc b/lam/help/help.inc
index 15051ba7..91fcfdbc 100644
--- a/lam/help/help.inc
+++ b/lam/help/help.inc
@@ -320,6 +320,7 @@ $helpArray = array (
"Headline" => _('Text'),
"Text" => _('The mail text of all mails.') .
_('You can use wildcards for LDAP attributes in the form @@attribute@@ (e.g. @@uid@@ for the user name).')
+ . ' ' . _('The expiration date can be added with @@EXPIRE_DATE_DDMMYYYY@@ or @@EXPIRE_DATE_YYYYMMDD@@.')
),
'804' => array(
"Headline" => _('Notification period'),
diff --git a/lam/lib/modules/shadowAccount.inc b/lam/lib/modules/shadowAccount.inc
index 94eaedc2..e515c0ea 100644
--- a/lam/lib/modules/shadowAccount.inc
+++ b/lam/lib/modules/shadowAccount.inc
@@ -800,15 +800,6 @@ if (interface_exists('\LAM\JOB\Job', false)) {
return _('Shadow') . ': ' . _('Notify users about password expiration');
}
- /**
- * Returns the description of the job.
- *
- * @return String description
- */
- public function getDescription() {
- return _('This job sends out emails to inform your users that their passwords will expire soon.');
- }
-
/**
* Searches for users in LDAP.
*
diff --git a/lam/lib/modules/windowsUser.inc b/lam/lib/modules/windowsUser.inc
index f91a5dd3..f5f2b648 100644
--- a/lam/lib/modules/windowsUser.inc
+++ b/lam/lib/modules/windowsUser.inc
@@ -3174,15 +3174,6 @@ if (interface_exists('\LAM\JOB\Job', false)) {
return _('Windows') . ': ' . _('Notify users about password expiration');
}
- /**
- * Returns the description of the job.
- *
- * @return String description
- */
- public function getDescription() {
- return _('This job sends out emails to inform your users that their passwords will expire soon.');
- }
-
/**
* Returns a list of password policy options. The options are later passed to function checkSingleUser().
* This reads the password policy to calculate expiration times later. Maxpwdage is the maximum amount of