MDL-34939: Fix clamdscan permissions-related issues

Use --fdpass parameter that passes the file descriptor permissions to clamd,
which allows to scan given file irrespective of directory and file
permissions. Changing file permissions is not required.
This commit is contained in:
Ruslan Kabalin
2013-04-24 14:59:19 +08:00
committed by Damyon Wiese
parent ca61ed1bbe
commit 414095a014
2 changed files with 10 additions and 9 deletions
+10 -4
View File
@@ -1141,11 +1141,17 @@ abstract class repository {
return;
}
// do NOT mess with permissions here, the calling party is responsible for making
// sure the scanner engine can access the files!
$clamparam = ' --stdout ';
// If we are dealing with clamdscan, clamd is likely run as a different user
// that might not have permissions to access your file.
// To make clamdscan work, we use --fdpass parameter that passes the file
// descriptor permissions to clamd, which allows it to scan given file
// irrespective of directory and file permissions.
if (basename($CFG->pathtoclam) == 'clamdscan') {
$clamparam .= '--fdpass ';
}
// execute test
$cmd = escapeshellcmd($CFG->pathtoclam).' --stdout '.escapeshellarg($thefile);
$cmd = escapeshellcmd($CFG->pathtoclam).$clamparam.escapeshellarg($thefile);
exec($cmd, $output, $return);
if ($return == 0) {
-5
View File
@@ -141,12 +141,7 @@ class repository_upload extends repository {
}
}
// scan the files, throws exception and deletes if virus found
// this is tricky because clamdscan daemon might not be able to access the files
$permissions = fileperms($_FILES[$elname]['tmp_name']);
@chmod($_FILES[$elname]['tmp_name'], $CFG->filepermissions);
self::antivir_scan_file($_FILES[$elname]['tmp_name'], $_FILES[$elname]['name'], true);
@chmod($_FILES[$elname]['tmp_name'], $permissions);
// {@link repository::build_source_field()}
$sourcefield = $this->get_file_source_info($_FILES[$elname]['name']);