From 192a8e13c308d21444bfda2690f376ad2d303eba Mon Sep 17 00:00:00 2001 From: Eric Merrill Date: Mon, 14 May 2012 11:00:39 -0400 Subject: [PATCH] MDL-32985 cron: don't execute notify_login_failures unnecessarily --- lib/cronlib.php | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/cronlib.php b/lib/cronlib.php index f02769d7a39..af2da19d8f1 100644 --- a/lib/cronlib.php +++ b/lib/cronlib.php @@ -174,9 +174,8 @@ function cron_run() { // Send login failures notification - brute force protection in moodle is weak, // we should at least send notices early in each cron execution - if (!empty($CFG->notifyloginfailures)) { - notify_login_failures(); - mtrace(' Notified login failured'); + if (notify_login_failures()) { + mtrace(' Notified login failures'); } @@ -600,12 +599,23 @@ function cron_bc_hack_plugin_functions($plugintype, $plugins) { * Note that this function must be only executed from the cron script * It uses the cache_flags system to store temporary records, deleting them * by name before finishing + * + * @return bool True if executed, false if not */ function notify_login_failures() { global $CFG, $DB, $OUTPUT; + if (empty($CFG->notifyloginfailures)) { + return false; + } + $recip = get_users_from_config($CFG->notifyloginfailures, 'moodle/site:config'); + // If it has been less than an hour, or if there are no recipients, don't execute. + if (((time() - HOURSECS) < $CFG->lastnotifyfailure) || !is_array($recip) || count($recip) <= 0) { + return false; + } + if (empty($CFG->lastnotifyfailure)) { $CFG->lastnotifyfailure=0; } @@ -682,10 +692,8 @@ function notify_login_failures() { } $rs->close(); - // If we haven't run in the last hour and - // we have something useful to report and we - // are actually supposed to be reporting to somebody - if ((time() - HOURSECS) > $CFG->lastnotifyfailure && $count > 0 && is_array($recip) && count($recip) > 0) { + // If we have something useful to report. + if ($count > 0) { $site = get_site(); $subject = get_string('notifyloginfailuressubject', '', format_string($site->fullname)); // Calculate the complete body of notification (start + messages + end) @@ -707,4 +715,6 @@ function notify_login_failures() { // Finally, delete all the temp records we have created in cache_flags $DB->delete_records_select('cache_flags', "flagtype IN ('login_failure_by_ip', 'login_failure_by_info')"); + + return true; }