diff --git a/security/mailzu/Makefile b/security/mailzu/Makefile index f5d1b4cd6c72..6a806dc2b6c2 100644 --- a/security/mailzu/Makefile +++ b/security/mailzu/Makefile @@ -1,67 +1,67 @@ # Created by: Sahil Tandon PORTNAME= mailzu DISTVERSION= 0.8rc3 -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= security MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/MailZu%200.8RC3 PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX} DISTNAME= MailZu_${DISTVERSION:S/rc/RC/} MAINTAINER= ports@bsdserwis.com COMMENT= Simple and intuitive web interface to manage amavisd-new quarantine LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE RUN_DEPENDS= ${LOCALBASE}/sbin/amavisd:security/amavisd-new \ ${PEARDIR}/DB.php:databases/pear-DB@${PHP_FLAVOR} \ ${PEARDIR}/Mail/mime.php:mail/pear-Mail_Mime@${PHP_FLAVOR} \ ${PEARDIR}/Mail/mimeDecode.php:mail/pear-Mail_mimeDecode@${PHP_FLAVOR} \ ${PEARDIR}/Net/Socket.php:net/pear-Net_Socket@${PHP_FLAVOR} USES= php:flavors,web USE_PHP= sockets NO_ARCH= yes NO_BUILD= yes SUB_FILES= pkg-message PLIST_SUB= WWWGRP="${WWWGRP}" \ WWWOWN="${WWWOWN}" PORTDOCS= * OPTIONS_DEFINE= DOCS IMAP LDAP OPTIONS_DEFAULT= MYSQL OPTIONS_MULTI= SQL OPTIONS_MULTI_SQL= MYSQL PGSQL IMAP_DESC= Use IMAP auth backend LDAP_DESC= Use LDAP auth backend MYSQL_DESC= Use MySQL database storage/auth backend (default) PGSQL_DESC= Use PostgreSQL database/auth storage backend SQL_DESC= SQL sotage backend IMAP_USE= PHP=imap LDAP_USE= PHP=ldap MYSQL_USE= PHP=mysqli PGSQL_USE= PHP=pgsql PEARDIR?= ${LOCALBASE}/share/pear post-patch: ${INSTALL_DATA} ${FILESDIR}/pl.*.php ${WRKSRC}/lang/ do-install: @${MKDIR} ${STAGEDIR}${WWWDIR} ${INSTALL_DATA} ${WRKSRC}/*.php ${WRKSRC}/*.js ${WRKSRC}/*.css ${STAGEDIR}${WWWDIR} (cd ${WRKSRC} && ${COPYTREE_SHARE} "config contrib img lang lib templates" \ ${STAGEDIR}${WWWDIR} "! -name '*.orig'") (cd ${WRKSRC} && ${COPYTREE_BIN} scripts ${STAGEDIR}${WWWDIR}) do-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/CHANGELOG ${WRKSRC}/README ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/docs/* ${STAGEDIR}${DOCSDIR} .include diff --git a/security/mailzu/files/patch-config_constants.php b/security/mailzu/files/patch-config_constants.php new file mode 100644 index 000000000000..08794aec82a6 --- /dev/null +++ b/security/mailzu/files/patch-config_constants.php @@ -0,0 +1,8 @@ +--- config/constants.php.orig 2007-06-14 19:00:15 UTC ++++ config/constants.php +@@ -1,4 +1,4 @@ +-convertEmailaddresses2SQL($emailaddresses); # mysql seems to run faster with a left join - if ($conf['db']['dbtype'] == 'mysql') { + if ($conf['db']['dbType'] == 'mysql') { $join_type = ' LEFT JOIN'; } else { $join_type = ' INNER JOIN'; @@ -254,38 +254,38 @@ class DBEngine { MAX(stattable.pending) AS pending FROM ( SELECT CAST(time_iso AS DATE) AS date, - COUNT(content) AS spam, + COUNT(msgs.content) AS spam, 0 AS banned, 0 AS viruses, 0 AS badheaders, 0 AS pending FROM msgs INNER JOIN msgrcpt ON msgs.mail_id=msgrcpt.mail_id $join_type maddr AS recip ON msgrcpt.rid=recip.id - WHERE content='S' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') + WHERE msgs.content='S' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') AND $recipEmailClause GROUP BY CAST(time_iso AS DATE) UNION SELECT CAST(time_iso AS DATE) AS date, 0 AS spam, - COUNT(content) AS banned, + COUNT(msgs.content) AS banned, 0 AS viruses, 0 AS badheaders, 0 AS pending FROM msgs INNER JOIN msgrcpt ON msgs.mail_id=msgrcpt.mail_id $join_type maddr AS recip ON msgrcpt.rid=recip.id - WHERE content='B' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') + WHERE msgs.content='B' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') AND $recipEmailClause GROUP BY CAST(time_iso AS DATE) UNION SELECT CAST(time_iso AS DATE) AS date, 0 AS spam, 0 AS banned, - COUNT(content) AS viruses, + COUNT(msgs.content) AS viruses, 0 AS badheaders, 0 AS pending FROM msgs INNER JOIN msgrcpt ON msgs.mail_id=msgrcpt.mail_id $join_type maddr AS recip ON msgrcpt.rid=recip.id - WHERE content='V' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') + WHERE msgs.content='V' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') AND $recipEmailClause GROUP BY CAST(time_iso AS DATE) UNION @@ -293,11 +293,11 @@ class DBEngine { 0 AS spam, 0 AS banned, 0 AS viruses, - COUNT(content) AS badheaders, + COUNT(msgs.content) AS badheaders, 0 AS pending FROM msgs INNER JOIN msgrcpt ON msgs.mail_id=msgrcpt.mail_id $join_type maddr AS recip ON msgrcpt.rid=recip.id - WHERE content='H' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') + WHERE msgs.content='H' AND NOT (msgs.quar_type = '') AND msgrcpt.rs IN ('','v') AND $recipEmailClause GROUP BY CAST(time_iso AS DATE) UNION @@ -306,7 +306,7 @@ class DBEngine { 0 AS banned, 0 AS viruses, 0 AS badheaders, - COUNT(content) AS pending + COUNT(msgs.content) AS pending FROM msgs INNER JOIN msgrcpt ON msgs.mail_id=msgrcpt.mail_id $join_type maddr AS recip ON msgrcpt.rid=recip.id WHERE msgrcpt.rs='p' AND NOT (msgs.quar_type = '') +@@ -606,7 +606,7 @@ class DBEngine { + */ + function get_raw_mail($mail_id, $email_recip) { + global $conf; +- ++ $ret_text = ""; + $mail_text_column = ' mail_text'; + # If using the bytea or BLOB type for sql quarantine use proper conversion + # (since amavisd 2.4.4 +@@ -642,12 +642,12 @@ class DBEngine { + return false; + } + while ($rs = $result->fetchRow()) { +- $return .= $rs['mail_text']; ++ $ret_text .= $rs['mail_text']; + } + + $result->free(); + +- return $return; ++ return $ret_text; + } + + /** diff --git a/security/mailzu/files/patch-lib_CmnFns.class.php b/security/mailzu/files/patch-lib_CmnFns.class.php index 2d6d19fa3c08..e78d4ebc8d61 100644 --- a/security/mailzu/files/patch-lib_CmnFns.class.php +++ b/security/mailzu/files/patch-lib_CmnFns.class.php @@ -1,382 +1,382 @@ --- lib/CmnFns.class.php.orig 2007-06-14 19:00:15 UTC +++ lib/CmnFns.class.php @@ -53,7 +53,7 @@ class CmnFns { * @param double $time time to convert in minutes * @return string time in 12 hour time */ - function formatTime($time) { + public static function formatTime($time) { global $conf; // Set up time array with $timeArray[0]=hour, $timeArray[1]=minute @@ -82,7 +82,7 @@ class CmnFns { * @param string $date string (yyyy-mm-dd) * @return int timestamp */ - function formatDateISO($date) { + public static function formatDateISO($date) { $time = strtotime($date); return $time; @@ -94,7 +94,7 @@ class CmnFns { * @param string $format format to put datestamp into * @return string date as $format or as default format */ - function formatDate($date, $format = '') { + public static function formatDate($date, $format = '') { global $dates; if (empty($format)) $format = $dates['general_date']; @@ -108,7 +108,7 @@ class CmnFns { * @param string $format format to put datestamp into * @return string date/time as $format or as default format */ - function formatDateTime($ts, $format = '') { + public static function formatDateTime($ts, $format = '') { global $conf; global $dates; @@ -123,7 +123,7 @@ class CmnFns { * @param int $minutes minutes to convert * @return string version of hours and minutes */ - function minutes_to_hours($minutes) { + public static function minutes_to_hours($minutes) { if ($minutes == 0) return '0 ' . translate('hours'); @@ -137,7 +137,7 @@ class CmnFns { * @param none * @return url url of curent script directory */ - function getScriptURL() { + public static function getScriptURL() { global $conf; $uri = $conf['app']['weburi']; return (strrpos($uri, '/') === false) ? $uri : substr($uri, 0, strlen($uri)); @@ -150,7 +150,7 @@ class CmnFns { * @param string $style inline CSS style definition to apply to box * @param boolean $die whether to kill the app or not */ - function do_error_box($msg, $style='', $die = true) { + public static function do_error_box($msg, $style='', $die = true) { global $conf; echo '
' . $msg . '
'; @@ -171,7 +171,7 @@ class CmnFns { * @param string $msg message to print out * @param string $style inline CSS style definition to apply to box */ - function do_message_box($msg, $style='') { + public static function do_message_box($msg, $style='') { echo '
' . $msg . '
'; } @@ -181,7 +181,7 @@ class CmnFns { * @param none * @return Link object */ - function getNewLink() { + public static function getNewLink() { return new Link(); } @@ -191,7 +191,7 @@ class CmnFns { * @param none * @return Pager object */ - function getNewPager() { + public static function getNewPager() { return new Pager(); } @@ -200,7 +200,7 @@ class CmnFns { * @param none * @return array of cleaned up POST values */ - function cleanPostVals() { + public static function cleanPostVals() { $return = array(); foreach ($_POST as $key => $val) @@ -214,7 +214,7 @@ class CmnFns { * @param none * @return array of cleaned up data */ - function cleanVals($data) { + public static function cleanVals($data) { $return = array(); foreach ($data as $key => $val) @@ -228,7 +228,7 @@ class CmnFns { * @param string $vert value of vertical order * @return string vertical order */ - function get_vert_order($get_name = 'vert') { + public static function get_vert_order($get_name = 'vert') { // If no vertical value is specified, use DESC $vert = isset($_GET[$get_name]) ? $_GET[$get_name] : 'DESC'; @@ -251,7 +251,7 @@ class CmnFns { * @param array $orders all valid order names * @return string order of recorset */ - function get_value_order($orders = array(), $get_name = 'order') { + public static function get_value_order($orders = array(), $get_name = 'order') { if (empty($orders)) // Return null if the order array is empty return NULL; @@ -269,12 +269,12 @@ class CmnFns { /** - * Opposite of php's nl2br function. + * Opposite of php's nl2br public static function. * Subs in a newline for all brs * @param string $subject line to make subs on * @return reformatted line */ - function br2nl($subject) { + public static function br2nl($subject) { return str_replace('
', "\n", $subject); } @@ -284,7 +284,7 @@ class CmnFns { * @param string $userid memeber id of user performing the action * @param string $ip ip address of user performing the action */ - function write_log($string, $userid = NULL, $ip = NULL) { + public static function write_log($string, $userid = NULL, $ip = NULL) { global $conf; $delim = "\t"; $file = $conf['app']['logfile']; @@ -319,7 +319,7 @@ class CmnFns { * @param int $day_of_week day of the week * @param int $type how to return the day name (0 = full, 1 = one letter, 2 = two letter, 3 = three letter) */ - function get_day_name($day_of_week, $type = 0) { + public static function get_day_name($day_of_week, $type = 0) { global $days_full; global $days_abbr; global $days_letter; @@ -343,7 +343,7 @@ class CmnFns { * @param string $location new http location * @param int $time time in seconds to wait before redirect */ - function redirect($location, $time = 0, $die = true) { + public static function redirect($location, $time = 0, $die = true) { header("Refresh: $time; URL=$location"); if ($die) exit; } @@ -352,11 +352,11 @@ class CmnFns { * Prints out the HTML to choose a language * @param none */ - function print_language_pulldown() { + public static function print_language_pulldown() { global $conf; ?> - \1', $str); $str = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', '\1\2', $str); $str = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})','\1', $str); @@ -388,7 +388,7 @@ class CmnFns { * @param integer $page value of current page number * @return integer current page number */ - function get_current_page_number($get_name = 'page') { + public static function get_current_page_number($get_name = 'page') { // If no page number is specified, use 0 $page = ( isset($_GET[$get_name]) && is_numeric($_GET[$get_name]) ) ? $_GET[$get_name] : 0; return $page; @@ -399,7 +399,7 @@ class CmnFns { * @param none * @return string mail_id */ - function get_mail_id($get_name = 'mail_id') { + public static function get_mail_id($get_name = 'mail_id') { // If there isnt one set, return NULL $mail_id = (isset($_GET[$get_name])) ? $_GET[$get_name] : NULL; return $mail_id; @@ -413,7 +413,7 @@ class CmnFns { * @param array $exclude_vars to be excluded from the resulting string * @param boolean $url_encode_ampersands */ - function array_to_query_string( $array, $exclude_vars=array(), $url_encode_ampersands=true ) + public static function array_to_query_string( $array, $exclude_vars=array(), $url_encode_ampersands=true ) { if( ! is_array( $array ) ) return ''; @@ -441,8 +441,12 @@ class CmnFns { * @param integer $sizeLimit maximum number of messages per page * @param integer $count total number of messages */ - function genMultiPagesLinks( $page, $sizeLimit, $count) { + public static function genMultiPagesLinks( $page, $sizeLimit, $count) { global $link; + global $pager_html; + global $size_limit; + global $query_string_next; + global $query_string_last; $total_pages = $count / $sizeLimit; @@ -501,7 +505,7 @@ class CmnFns { * Generate HTML for search engine * @param $content_type: 'B' (attachment) or 'S' (spam) */ - function searchEngine($content_type, $submit_page, $full_search = false) { + public static function searchEngine($content_type, $submit_page, $full_search = false) { global $conf; $fields_array = array("f" => translate('From'), -@@ -514,11 +514,11 @@ class CmnFns { +@@ -514,11 +518,11 @@ class CmnFns { ?> - + - + \n\t\t\t
 
 
  - $name) { -@@ -543,34 +543,34 @@ class CmnFns { +@@ -543,34 +547,34 @@ class CmnFns { $i ++; } ?> - : + :
 \n" : "  "; ?> - - " /> + "; ?>  
- "; echo "parent.location.href = '" . $location . "';"; echo ""; diff --git a/security/mailzu/files/patch-lib_MailMime.class.php b/security/mailzu/files/patch-lib_MailMime.class.php new file mode 100644 index 000000000000..b44eb75f73fd --- /dev/null +++ b/security/mailzu/files/patch-lib_MailMime.class.php @@ -0,0 +1,52 @@ +--- lib/MailMime.class.php.orig 2007-06-14 19:00:15 UTC ++++ lib/MailMime.class.php +@@ -94,8 +94,14 @@ function MsgParseBody($struct) { + + case "text": + // Do not display attached text types +- if ($attachment = $struct->d_parameters['filename'] or +- $attachment = $struct->d_parameters['name']) { ++ if ( isset($struct->d_parameters['filename']) ) { ++ $attachment = $struct->d_parameters['filename']; ++ } elseif ( isset($struct->d_parameters['name']) ) { ++ $attachment = $struct->d_parameters['name']; ++ } else { ++ $attachment = NULL; ++ } ++ if ($attachment) { + array_push($filelist, $attachment); + break; + } +@@ -117,7 +123,9 @@ function MsgParseBody($struct) { + default: + // Save the listed filename or notify the + // reader that this mail is not displayed completely +- $attachment = $struct->d_parameters['filename']; ++ if ( isset( $struct->d_parameters['filename'] )) { ++ $attachment = $struct->d_parameters['filename']; ++ } else { $attachment = NULL; } + $attachment ? array_push($filelist, $attachment) : $errors['Unsupported MIME objects present'] = true; + + } +@@ -137,9 +145,9 @@ function FindMultiAlt($parts) { + foreach ($parts as $cur_part) { + $type = GetCtype($cur_part); + if ($type == 'multipart/related') { +- $type = $cur_part->d_parameters['type']; +- // Mozilla bug. Mozilla does not provide the parameter type. +- if (!$type) $type = 'text/html'; ++ if ( isset( $cur_part->d_parameters['type'] )) { $type = $cur_part->d_parameters['type']; } ++ // Mozilla bug. Mozilla does not provide the parameter type. ++ if (!$type) $type = 'text/html'; + } + $altCount = count($alt_pref); + for ($j = $best_view; $j < $altCount; ++$j) { +@@ -163,7 +171,7 @@ function FindMultiAlt($parts) { + */ + function FindMultiRel($struct) { + $entities = array(); +- $type = $struct->d_parameters['type']; ++ if ( isset( $cur_part->d_parameters['type'] )) { $type = $cur_part->d_parameters['type']; } + // Mozilla bug. Mozilla does not provide the parameter type. + if (!$type) $type = 'text/html'; + // Bad Headers sometimes have invalid MIME.... diff --git a/security/mailzu/files/patch-templates_quarantine.template.php b/security/mailzu/files/patch-templates_quarantine.template.php index 7f4c469fa24f..aa5b9b000fdb 100644 --- a/security/mailzu/files/patch-templates_quarantine.template.php +++ b/security/mailzu/files/patch-templates_quarantine.template.php @@ -1,11 +1,249 @@ --- templates/quarantine.template.php.orig 2007-06-14 19:00:15 UTC +++ templates/quarantine.template.php -@@ -143,7 +143,7 @@ function showMessagesTable($content_type +@@ -56,10 +56,10 @@ function showMessagesTable($content_type, $res, $page, + +
+ +- +- ++ ++ + +- + + +- + + + +
+- doLink('javascript: help(\'msg_index\');', '?', '', 'color: #FFFFFF;', ++ doLink('javascript: help(\'msg_index\');', '?', '', 'color: #FFFFFF;', + translate('Help') . ' - ' . translate('My Quarantine')) ?> +
+ +@@ -93,43 +93,43 @@ function showMessagesTable($content_type, $res, $page, + + +   +- 1) || ((Auth::isMailAdmin()) && ++ 1) || ((Auth::isMailAdmin()) && + ("Site Quarantine" == $_SESSION['sessionNav'] || "Site Pending Requests" == $_SESSION['sessionNav']))) { ?> +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=recip.email&vert=' . $new_vert, translate('To'), '', '', $mouseover_text) ?> + +- +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=from_addr&vert=' . $new_vert, translate('From'), '', '', $mouseover_text) ?> + +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=msgs.subject&vert=' . $new_vert, translate('Subject'), '', '', $mouseover_text) ?> + +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=msgs.time_num&vert=' . $new_vert, translate('Date'), '', '', $mouseover_text) ?> + +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=spam_level&vert=' . $new_vert, translate('Score'), '', '', $mouseover_text) ?> + +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=msgs.content&vert=' . $new_vert, translate('Content Type'), '', '', $mouseover_text) ?> + +- +- > +- doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) ++ > ++ doLink($_SERVER['PHP_SELF'] . '?' . CmnFns::querystring_exclude_vars( array('order','vert')) + . '&order=mail_id&vert=' . $new_vert, translate('Mail ID'), '', '', $mouseover_text) ?> + +- ++ + + +- "; echo ' '; + name="mail_id_array[]" value="' . $rs['mail_id'] . '__' . $rs['email'] . '">'; if ( (count($_SESSION['sessionMail']) > 1) || (Auth::isMailAdmin() && ("Site Quarantine" == $_SESSION['sessionNav'] || "Site Pending Requests" == $_SESSION['sessionNav']))) { echo ' ' . $to . ''; +@@ -192,7 +192,7 @@ function showMessagesTable($content_type, $res, $page, + + + +- + +
+- '; + echo '' . translate('There are no matching records.') . ''; + echo ''; +@@ -221,25 +221,25 @@ function printSearchEngine($content_type, $submit_page + + + + + +
+- ++ + +
+- doLink('javascript: help(\'search\');', '?', '', 'color: #FFFFFF;', translate('Help') . ' - ' . translate('My Re ++ doLink('javascript: help(\'search\');', '?', '', 'color: #FFFFFF;', translate('Help') . ' - ' . translate('My Re + servations')) ?> +
+
+-