#!/usr/bin/php <?php define('EXPORT_LOCK_FILE', '/var/piler/tmp/export-attachments.lock'); $webuidir = ""; $outdir = ''; $opts = 'hw:d:'; $lopts = [ 'webui:', 'dir:', 'help' ]; if($options = getopt($opts, $lopts)) { if(isset($options['webui'])) { $webuidir = $options['webui']; } if(isset($options['dir'])) { $outdir = $options['dir']; } if(isset($options['help'])) { usage(); } } if($webuidir == '' || $outdir == '') { usage(); } require_once("$webuidir/config.php"); require(DIR_SYSTEM . "/startup.php"); $request = new Request(); Registry::set("request", $request); $start = NULL; $loader = new Loader(); Registry::set('load', $loader); $loader->load->model('domain/domain'); $loader->load->model('search/search'); $loader->load->model('search/message'); $loader->load->model('message/attachment'); $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PREFIX); Registry::set('db', $db); Registry::set('auditor_user', 1); openlog("export-attachments", LOG_PID, LOG_MAIL); $fp = fopen(EXPORT_LOCK_FILE, "w"); if(!flock($fp, LOCK_EX)) { syslog(LOG_INFO, "WARN: couldn't get a lock on " . EXPORT_LOCK_FILE); exit; } $domain = new ModelDomainDomain(); $attachment = new ModelMessageAttachment(); $message = new ModelSearchMessage(); $domains = $domain->get_mapped_domains(); $last_id = $attachment->get_last_attachment_id(); $start_id = $attachment->get_checkpoint(); syslog(LOG_INFO, "start: $start_id, limit: $last_id"); for($i=$start_id; $i<$last_id; $i++) { $a = $attachment->get_attachment_by_id($i); $m = $message->get_message_addresses_by_piler_id($a['piler_id'], $domains); $attachment->dump_attachment($outdir, "out", $m['sender'], $i, $a); foreach($m['rcpt'] as $rcpt) { $attachment->dump_attachment($outdir, "in", $rcpt, $i, $a); } if($i % 100 == 0) { $attachment->update_checkpoint($i); } } $attachment->update_checkpoint($i); // Release lock flock($fp, LOCK_UN); fclose($fp); function usage() { print "\nUsage: " . __FILE__ . "\n\n"; print "\t--webui <path to webui directory>\n"; print "\t--dir <basedir to write attachments>\n"; print "\t--help\n\n"; exit; }