|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00009 die('TODO: MDL-19380'); 00010 00011 $fd = fopen('php://stdin','r'); 00012 if (!$fd) { 00013 exit(); 00014 } 00015 00016 require_once(dirname(dirname(__FILE__)).'/config.php'); 00017 require_once($CFG->libdir.'/eventslib.php'); 00018 require_once($CFG->dirroot.'/lib/uploadlib.php'); // contains virus handling stuff. 00019 00020 $site = get_site(); 00021 00022 while(!feof($fd)) { 00023 $entry = fgets($fd); 00024 if (strlen(trim($entry)) == 0) { 00025 continue; 00026 } 00027 if (!$file = validate_line($entry)) { 00028 continue; 00029 } 00030 $bits = explode('/',$file); 00031 $a->filename = $bits[count($bits)-1]; 00032 00033 if (!$log = $DB->get_record("log", array("module"=>"upload", "info"=>$file, "action"=>"upload"))) { 00034 $a->action = clam_handle_infected_file($file,0,false); 00035 clam_replace_infected_file($file); 00036 notify_admins_unknown($file,$a); 00037 continue; 00038 } 00039 $action = clam_handle_infected_file($file,$log->userid,true); 00040 clam_replace_infected_file($file); 00041 00042 list($ctxselect, $ctxjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx'); 00043 $sql = "SELECT c.id, c.fullname $ctxselect FROM {course} c $ctxjoin WHERE c.id = :courseid"; 00044 $course = $DB->get_record_sql($sql, array('courseid' => $log->course)); 00045 context_instance_preload($course); 00046 00047 $user = $DB->get_record("user", array("id"=>$log->userid)); 00048 $subject = get_string('virusfoundsubject','moodle',format_string($site->fullname)); 00049 $a->date = userdate($log->time); 00050 00051 $a->action = $action; 00052 $a->course = format_string($course->fullname, true, array('context' => get_context_instance(CONTEXT_COURSE, $course->id))); 00053 $a->user = fullname($user); 00054 00055 notify_user($user,$subject,$a); 00056 notify_admins($user,$subject,$a); 00057 } 00058 fclose($fd); 00059 00060 00061 function notify_user($user,$subject,$a) { 00062 00063 if (!$user) { 00064 return false; 00065 } 00066 $body = get_string('virusfoundlater','moodle',$a); 00067 00068 $eventdata = new stdClass(); 00069 $eventdata->modulename = 'moodle'; 00070 $eventdata->userfrom = get_admin(); 00071 $eventdata->userto = $user; 00072 $eventdata->subject = $subject; 00073 $eventdata->fullmessage = $body; 00074 $eventdata->fullmessageformat = FORMAT_PLAIN; 00075 $eventdata->fullmessagehtml = ''; 00076 $eventdata->smallmessage = ''; 00077 message_send($eventdata); 00078 } 00079 00080 00081 function notify_admins($user,$subject,$a) { 00082 00083 $admins = get_admins(); 00084 00085 $body = get_string('virusfoundlateradmin','moodle',$a); 00086 foreach ($admins as $admin) { 00087 $eventdata = new stdClass(); 00088 $eventdata->modulename = 'moodle'; 00089 $eventdata->userfrom = $admin; 00090 $eventdata->userto = $admin; 00091 $eventdata->subject = $subject; 00092 $eventdata->fullmessage = $body; 00093 $eventdata->fullmessageformat = FORMAT_PLAIN; 00094 $eventdata->fullmessagehtml = ''; 00095 $eventdata->smallmessage = ''; 00096 message_send($eventdata); 00097 } 00098 } 00099 00100 function notify_admins_unknown($file,$a) { 00101 00102 global $site; 00103 00104 $admins = get_admins(); 00105 $subject = get_string('virusfoundsubject','moodle',format_string($site->fullname)); 00106 $body = get_string('virusfoundlateradminnolog','moodle',$a); 00107 foreach ($admins as $admin) { 00108 $eventdata = new stdClass(); 00109 $eventdata->modulename = 'moodle'; 00110 $eventdata->userfrom = $admin; 00111 $eventdata->userto = $admin; 00112 $eventdata->subject = $subject; 00113 $eventdata->fullmessage = $body; 00114 $eventdata->fullmessageformat = FORMAT_PLAIN; 00115 $eventdata->fullmessagehtml = ''; 00116 $eventdata->smallmessage = ''; 00117 message_send($eventdata); 00118 } 00119 } 00120 00121 function validate_line($line) { 00122 global $CFG; 00123 if (strpos($line,"FOUND") === false) { 00124 return false; 00125 } 00126 $index = strpos($line,":"); 00127 $file = substr($line,0,$index); 00128 if (!(strpos($file,$CFG->dataroot) === false)) { 00129 if (!file_exists($file)) { 00130 return false; 00131 } 00132 } 00133 else { 00134 if ($file{0} == "/") { 00135 $file = $CFG->dataroot.$file; 00136 } 00137 else { 00138 $file = $CFG->dataroot."/".$file; 00139 } 00140 if (!file_exists($file)) { 00141 return false; 00142 } 00143 } 00144 // clean up 00145 $file = preg_replace('/\.\//','/',$file); 00146 $file = preg_replace('/\/\//','/',$file); 00147 return $file; 00148 } 00149 00150