$message_id = sanitizeInput($_GET['id']); // See if message is local dbconn(); // required db link for mysql_real_escape_string $message_data = mysql_fetch_object(dbquery("SELECT hostname, DATE_FORMAT(date,'%Y%m%d') AS date FROM maillog WHERE id='" . mysql_real_escape_string($message_id) . "' AND " . $_SESSION["global_filter"])); if (!$message_data) { die("Message '" . $message_id . "' not found\n"); } if (!is_local($message_data->hostname) || RPC_ONLY) { // Host is remote - use XML-RPC //$client = new xmlrpc_client(constant('RPC_RELATIVE_PATH').'/rpcserver.php', $host, 80); $input = new xmlrpcval($message_id); $parameters = array($input); $msg = new xmlrpcmsg('return_quarantined_file', $parameters); //$rsp = $client->send($msg); $rsp = xmlrpc_wrapper($message_data->hostname, $msg); if ($rsp->faultcode() == 0) { $response = php_xmlrpc_decode($rsp->value()); } else { die("Error: " . $rsp->faultstring()); } $file = base64_decode($response); } else { //build filename path $quarantine_dir = get_conf_var('QuarantineDir'); $filename = ''; switch (true) { case file_exists($quarantine_dir . '/' . $message_data->date . '/nonspam/' . $message_id): $filename = $message_data->date . '/nonspam/' . $message_id; break; case file_exists($quarantine_dir . '/' . $message_data->date . '/spam/' . $message_id):
/** * @param $list * @param $num * @param bool|false $rpc_only * @return string */ function quarantine_delete($list, $num, $rpc_only = false) { if (!is_array($list) || !isset($list[0]['msgid'])) { return "Invalid argument"; } else { $new = quarantine_list_items($list[0]['msgid']); $list =& $new; } if (!$rpc_only && is_local($list[0]['host'])) { foreach ($num as $key => $val) { if (@unlink($list[$val]['path'])) { $status[] = "Delete: deleted file " . $list[$val]['path']; dbquery("UPDATE maillog SET quarantined=NULL WHERE id='" . $list[$val]['msgid'] . "'"); audit_log('Deleted file from quarantine: ' . $list[$val]['path']); } else { $status[] = "Delete: error deleting file " . $list[$val]['path']; global $error; $error = true; } } return join("\n", $status); } else { // Call by RPC debug("Calling quarantine_delete on " . $list[0]['host'] . " by XML-RPC"); //$client = new xmlrpc_client(constant('RPC_RELATIVE_PATH').'/rpcserver.php',$list[0]['host'],80); // Convert input parameters foreach ($list as $list_array) { foreach ($list_array as $key => $val) { $list_struct[$key] = new xmlrpcval($val); } $list_output[] = new xmlrpcval($list_struct, 'struct'); } foreach ($num as $key => $val) { $num_output[$key] = new xmlrpcval($val); } // Build input parameters $param1 = new xmlrpcval($list_output, 'array'); $param2 = new xmlrpcval($num_output, 'array'); $parameters = array($param1, $param2); $msg = new xmlrpcmsg('quarantine_delete', $parameters); $rsp = xmlrpc_wrapper($list[0]['host'], $msg); //$client->send($msg); if ($rsp->faultcode() == 0) { $response = php_xmlrpc_decode($rsp->value()); } else { $response = "XML-RPC Error: " . $rsp->faultstring(); } return $response . " (RPC)"; } }