]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-18040 rewritten XSS query, I hope this will be much faster
authorskodak <skodak>
Wed, 28 Jan 2009 22:45:07 +0000 (22:45 +0000)
committerskodak <skodak>
Wed, 28 Jan 2009 22:45:07 +0000 (22:45 +0000)
admin/report/security/lib.php

index a1eed212c2be6644366c3e19dbd84d7bfcfe4896..10bc5b0c632c620edc253477e1b0cfc7b473f294 100644 (file)
@@ -484,15 +484,16 @@ function report_security_check_riskxss($detailed=false) {
 
     $params = array('capallow'=>CAP_ALLOW);
 
-    $sqlfrom = "FROM {role_capabilities} rc
-                JOIN {capabilities} cap ON cap.name = rc.capability
-                JOIN {context} c ON c.id = rc.contextid
-                JOIN {context} sc ON (sc.path = c.path OR sc.path LIKE ".$DB->sql_concat('c.path', "'/%'")." OR c.path LIKE ".$DB->sql_concat('sc.path', "'/%'").")
-                JOIN {role_assignments} ra ON (ra.contextid = sc.id AND ra.roleid = rc.roleid)
-                JOIN {user} u ON u.id = ra.userid
-               WHERE ".$DB->sql_bitand('cap.riskbitmask', RISK_XSS)." <> 0
-                     AND rc.permission = :capallow
-                     AND u.deleted = 0";
+    $sqlfrom = "FROM (SELECT rcx.* FROM {role_capabilities} rcx JOIN {capabilities} cap ON (cap.name = rcx.capability AND ".$DB->sql_bitand('cap.riskbitmask', RISK_XSS)." <> 0))rc,
+                     {context} c,
+                     {context} sc,
+                     {role_assignments} ra,
+                     {user} u
+               WHERE c.id = rc.contextid
+                     AND (sc.path = c.path OR sc.path LIKE ".$DB->sql_concat('c.path', "'/%'")." OR c.path LIKE ".$DB->sql_concat('sc.path', "'/%'").")
+                     AND u.id = ra.userid
+                     AND ra.contextid = sc.id AND ra.roleid = rc.roleid
+                     AND rc.permission = :capallow AND u.deleted = 0";
 
     $count = $DB->count_records_sql("SELECT COUNT(DISTINCT u.id) $sqlfrom", $params);