| | |
| | | * It's clickable interface which operates on text scripts and communicates |
| | | * with server using managesieve protocol. Adds Filters tab in Settings. |
| | | * |
| | | * @version 5.0 |
| | | * @version @package_version@ |
| | | * @author Aleksander Machniak <alec@alec.pl> |
| | | * |
| | | * Configuration (see config.inc.php.dist) |
| | | * |
| | | * Copyright (C) 2008-2011, The Roundcube Dev Team |
| | | * Copyright (C) 2011, Kolab Systems AG |
| | | * Copyright (C) 2008-2012, The Roundcube Dev Team |
| | | * Copyright (C) 2011-2012, Kolab Systems AG |
| | | * |
| | | * This program is free software; you can redistribute it and/or modify |
| | | * it under the terms of the GNU General Public License version 2 |
| | |
| | | "x-beenthere", |
| | | ); |
| | | |
| | | const VERSION = '5.2'; |
| | | const VERSION = '6.1'; |
| | | const PROGNAME = 'Roundcube (Managesieve)'; |
| | | const PORT = 4190; |
| | | |
| | | |
| | | function init() |
| | |
| | | $include_path .= ini_get('include_path'); |
| | | set_include_path($include_path); |
| | | |
| | | $host = rcube_parse_host($this->rc->config->get('managesieve_host', 'localhost')); |
| | | $port = $this->rc->config->get('managesieve_port', 2000); |
| | | // Get connection parameters |
| | | $host = $this->rc->config->get('managesieve_host', 'localhost'); |
| | | $port = $this->rc->config->get('managesieve_port'); |
| | | $tls = $this->rc->config->get('managesieve_usetls', false); |
| | | |
| | | $host = rcube_parse_host($host); |
| | | $host = rcube_idn_to_ascii($host); |
| | | |
| | | // remove tls:// prefix, set TLS flag |
| | | if (($host = preg_replace('|^tls://|i', '', $host, 1, $cnt)) && $cnt) { |
| | | $tls = true; |
| | | } |
| | | |
| | | if (empty($port)) { |
| | | $port = getservbyname('sieve', 'tcp'); |
| | | if (empty($port)) { |
| | | $port = self::PORT; |
| | | } |
| | | } |
| | | |
| | | $plugin = $this->rc->plugins->exec_hook('managesieve_connect', array( |
| | | 'user' => $_SESSION['username'], |
| | | 'password' => $this->rc->decrypt($_SESSION['password']), |
| | | 'host' => $host, |
| | | 'port' => $port, |
| | | 'usetls' => $tls, |
| | | 'auth_type' => $this->rc->config->get('managesieve_auth_type'), |
| | | 'usetls' => $this->rc->config->get('managesieve_usetls', false), |
| | | 'disabled' => $this->rc->config->get('managesieve_disabled_extensions'), |
| | | 'debug' => $this->rc->config->get('managesieve_debug', false), |
| | | 'auth_cid' => $this->rc->config->get('managesieve_auth_cid'), |
| | |
| | | // Init plugin and handle managesieve connection |
| | | $error = $this->managesieve_start(); |
| | | |
| | | // filters set add action |
| | | if (!empty($_POST['_newset'])) { |
| | | // get request size limits (#1488648) |
| | | $max_post = max(array( |
| | | ini_get('max_input_vars'), |
| | | ini_get('suhosin.request.max_vars'), |
| | | ini_get('suhosin.post.max_vars'), |
| | | )); |
| | | $max_depth = max(array( |
| | | ini_get('suhosin.request.max_array_depth'), |
| | | ini_get('suhosin.post.max_array_depth'), |
| | | )); |
| | | |
| | | // check request size limit |
| | | if ($max_post && count($_POST, COUNT_RECURSIVE) >= $max_post) { |
| | | rcube::raise_error(array( |
| | | 'code' => 500, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Request size limit exceeded (one of max_input_vars/suhosin.request.max_vars/suhosin.post.max_vars)" |
| | | ), true, false); |
| | | $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); |
| | | } |
| | | // check request depth limits |
| | | else if ($max_depth && count($_POST['_header']) > $max_depth) { |
| | | rcube::raise_error(array( |
| | | 'code' => 500, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Request size limit exceeded (one of suhosin.request.max_array_depth/suhosin.post.max_array_depth)" |
| | | ), true, false); |
| | | $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); |
| | | } |
| | | // filters set add action |
| | | else if (!empty($_POST['_newset'])) { |
| | | $name = get_input_value('_name', RCUBE_INPUT_POST, true); |
| | | $copy = get_input_value('_copy', RCUBE_INPUT_POST, true); |
| | | $from = get_input_value('_from', RCUBE_INPUT_POST); |
| | |
| | | |
| | | case 'fileinto': |
| | | case 'fileinto_copy': |
| | | $mailbox = $this->strip_value($mailboxes[$idx]); |
| | | $mailbox = $this->strip_value($mailboxes[$idx], false, false); |
| | | $this->form['actions'][$i]['target'] = $this->mod_mailbox($mailbox, 'in'); |
| | | if ($type == 'fileinto_copy') { |
| | | $type = 'fileinto'; |
| | |
| | | $this->rc->output->set_env('blankpage', $attrib['src'] ? |
| | | $this->rc->output->abs_url($attrib['src']) : 'program/resources/blank.gif'); |
| | | |
| | | return html::tag('iframe', $attrib); |
| | | return $this->rc->output->frame($attrib); |
| | | } |
| | | |
| | | function filterset_form($attrib) |
| | |
| | | |
| | | private function genid() |
| | | { |
| | | $result = preg_replace('/[^0-9]/', '', microtime(true)); |
| | | return $result; |
| | | return preg_replace('/[^0-9]/', '', microtime(true)); |
| | | } |
| | | |
| | | private function strip_value($str, $allow_html=false) |
| | | private function strip_value($str, $allow_html = false, $trim = true) |
| | | { |
| | | if (!$allow_html) |
| | | if (!$allow_html) { |
| | | $str = strip_tags($str); |
| | | } |
| | | |
| | | return trim($str); |
| | | return $trim ? trim($str) : $str; |
| | | } |
| | | |
| | | private function error_class($id, $type, $target, $elem_prefix='') |
| | |
| | | if ($active = $this->sieve->get_active()) { |
| | | $this->active = array($active); |
| | | } |
| | | |
| | | // Hide scripts from config |
| | | $exceptions = $this->rc->config->get('managesieve_filename_exceptions'); |
| | | if (!empty($exceptions)) { |
| | | $this->list = array_diff($this->list, (array)$exceptions); |
| | | } |
| | | } |
| | | |
| | | return $this->list; |