From 3e923725dbdc198f7dbad36a67d64d952e967ff4 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sat, 16 Jul 2016 16:07:21 +0200 Subject: [PATCH] cleanup job FreeRadius --- lam/HISTORY | 2 +- lam/docs/manual-sources/howto.xml | 48 ++++++++++ .../images/jobs_freeRadiusCleanup.png | Bin 0 -> 13233 bytes lam/lib/modules/freeRadius.inc | 90 +++++++++++++++++- lam/lib/modules/shadowAccount.inc | 5 +- 5 files changed, 139 insertions(+), 6 deletions(-) create mode 100644 lam/docs/manual-sources/images/jobs_freeRadiusCleanup.png diff --git a/lam/HISTORY b/lam/HISTORY index 6848675f..50399b73 100644 --- a/lam/HISTORY +++ b/lam/HISTORY @@ -2,7 +2,7 @@ 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) + -> Cron jobs: Move or delete expired accounts (Shadow, FreeRadius) 21.06.2016 5.4 diff --git a/lam/docs/manual-sources/howto.xml b/lam/docs/manual-sources/howto.xml index 7777db2c..3d06a8b1 100644 --- a/lam/docs/manual-sources/howto.xml +++ b/lam/docs/manual-sources/howto.xml @@ -2371,6 +2371,54 @@ mysql> GRANT ALL PRIVILEGES ON lam_cron.* TO 'lam_cron'@'localhost'; @@EXPIRE_DATE_YYYYMMDD@@ will print the date as e.g. "2016-12-31". + +
+ FreeRadius: Delete or move expired accounts + + You can automatically delete or move expired accounts. + + + + + + + + + + + Options + + + + + Option + + Description + + + + Delay + + Number of days to wait after the account is + expired. + + + + Action + + Delete or move accounts + + + + Target DN + + Move only: specifies the DN where accounts are + moved + + + +
+
diff --git a/lam/docs/manual-sources/images/jobs_freeRadiusCleanup.png b/lam/docs/manual-sources/images/jobs_freeRadiusCleanup.png new file mode 100644 index 0000000000000000000000000000000000000000..edf31600af122b74878b0bb06f57c1bec052a270 GIT binary patch literal 13233 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 ZPs}j{TuwGpP5?tdvXV*?profileCache; } + /** + * Returns a list of jobs that can be run. + * + * @param LAMConfig $config configuration + * @return array list of jobs + */ + public function getSupportedJobs(&$config) { + return array( + new FreeRadiusAccountExpirationCleanupJob() + ); + } + +} + +if (interface_exists('\LAM\JOB\Job', false)) { + + include_once dirname(__FILE__) . '/../passwordExpirationJob.inc'; + + /** + * Job to delete or move users on account expiration. + * + * @package jobs + */ + class FreeRadiusAccountExpirationCleanupJob extends \LAM\JOB\AccountExpirationCleanupJob { + + /** + * Returns the alias name of the job. + * + * @return String name + */ + public function getAlias() { + return _('FreeRadius') . ': ' . _('Cleanup expired user accounts'); + } + + /** + * Returns the description of the job. + * + * @return String description + */ + public function getDescription() { + return _('This job deletes or moves user accounts when they expire.'); + } + + /** + * Searches for users in LDAP. + * + * @param String $jobID unique job identifier + * @param array $options config options (name => value) + * @return array list of user attributes + */ + protected function findUsers($jobID, $options) { + // read users + $attrs = array('radiusExpiration'); + $userResults = searchLDAPByFilter('(radiusExpiration=*)', $attrs, array('user')); + return $userResults; + } + + /** + * Checks if a user is expired. + * + * @param integer $jobID job ID + * @param array $options job settings + * @param PDO $pdo PDO + * @param DateTime $now current time + * @param array $policyOptions list of policy options by getPolicyOptions() + * @param array $user user attributes + * @param boolean $isDryRun just do a dry run, nothing is modified + */ + protected function checkSingleUser($jobID, $options, &$pdo, $now, $policyOptions, $user, $isDryRun) { + $expireTime = DateTime::createFromFormat('d M Y H:i', $user['radiusexpiration'][0], new DateTimeZone('UTC')); + logNewMessage(LOG_DEBUG, "Expiration on " . $expireTime->format('Y-m-d')); + $delay = 0; + if (!empty($options[$this->getConfigPrefix() . '_delay' . $jobID][0])) { + $delay = $options[$this->getConfigPrefix() . '_delay' . $jobID][0]; + } + $actionTime = clone $expireTime; + if ($delay != 0) { + $actionTime->add(new DateInterval('P' . $delay . 'D')); + } + $actionTime->setTimeZone(getTimeZone()); + logNewMessage(LOG_DEBUG, "Action time on " . $actionTime->format('Y-m-d')); + if ($actionTime <= $now) { + $this->performAction($jobID, $options, $user, $isDryRun); + } + } + + } + } diff --git a/lam/lib/modules/shadowAccount.inc b/lam/lib/modules/shadowAccount.inc index 8c157105..a66b890e 100644 --- a/lam/lib/modules/shadowAccount.inc +++ b/lam/lib/modules/shadowAccount.inc @@ -935,7 +935,7 @@ if (interface_exists('\LAM\JOB\Job', false)) { } /** - * Checks if a user needs to change his password. + * Checks if a user is expired. * * @param integer $jobID job ID * @param array $options job settings @@ -953,9 +953,6 @@ if (interface_exists('\LAM\JOB\Job', false)) { if (!empty($options[$this->getConfigPrefix() . '_delay' . $jobID][0])) { $delay = $options[$this->getConfigPrefix() . '_delay' . $jobID][0]; } - if (!empty($user['shadowwarning'][0]) && ($user['shadowwarning'][0] > 0)) { - $numDaysToWarn += $user['shadowwarning'][0]; - } $actionTime = clone $expireTime; if ($delay != 0) { $actionTime->add(new DateInterval('P' . $delay . 'D'));