You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
(5) |
Jun
(73) |
Jul
(155) |
Aug
(142) |
Sep
(50) |
Oct
(89) |
Nov
(39) |
Dec
(59) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(239) |
Feb
(293) |
Mar
(90) |
Apr
(149) |
May
(117) |
Jun
(52) |
Jul
(67) |
Aug
(15) |
Sep
(97) |
Oct
(304) |
Nov
(295) |
Dec
(372) |
2002 |
Jan
(357) |
Feb
(272) |
Mar
(153) |
Apr
(158) |
May
(170) |
Jun
(139) |
Jul
(226) |
Aug
(401) |
Sep
(314) |
Oct
(343) |
Nov
(270) |
Dec
(231) |
2003 |
Jan
(201) |
Feb
(112) |
Mar
(146) |
Apr
(103) |
May
(148) |
Jun
(287) |
Jul
(302) |
Aug
(139) |
Sep
(206) |
Oct
(281) |
Nov
(116) |
Dec
(191) |
2004 |
Jan
(82) |
Feb
(223) |
Mar
(175) |
Apr
(280) |
May
(260) |
Jun
(206) |
Jul
(107) |
Aug
(207) |
Sep
(108) |
Oct
(171) |
Nov
(186) |
Dec
(180) |
2005 |
Jan
(144) |
Feb
(226) |
Mar
(200) |
Apr
(286) |
May
(120) |
Jun
(144) |
Jul
(125) |
Aug
(111) |
Sep
(221) |
Oct
(51) |
Nov
(275) |
Dec
(73) |
2006 |
Jan
(178) |
Feb
(313) |
Mar
(87) |
Apr
(104) |
May
(145) |
Jun
(74) |
Jul
(197) |
Aug
(229) |
Sep
(118) |
Oct
(298) |
Nov
(39) |
Dec
(170) |
2007 |
Jan
(251) |
Feb
(109) |
Mar
(82) |
Apr
(5) |
May
(80) |
Jun
(63) |
Jul
(98) |
Aug
(103) |
Sep
(61) |
Oct
(41) |
Nov
(50) |
Dec
(47) |
2008 |
Jan
(74) |
Feb
(71) |
Mar
(102) |
Apr
(31) |
May
(117) |
Jun
(33) |
Jul
(61) |
Aug
(12) |
Sep
(22) |
Oct
(25) |
Nov
(21) |
Dec
(52) |
2009 |
Jan
(13) |
Feb
(16) |
Mar
(79) |
Apr
(181) |
May
(164) |
Jun
(10) |
Jul
(23) |
Aug
(30) |
Sep
(19) |
Oct
(18) |
Nov
(7) |
Dec
(5) |
2010 |
Jan
(23) |
Feb
(17) |
Mar
(15) |
Apr
(2) |
May
(4) |
Jun
(23) |
Jul
(89) |
Aug
(8) |
Sep
(13) |
Oct
(6) |
Nov
(4) |
Dec
(6) |
2011 |
Jan
(4) |
Feb
(1) |
Mar
(5) |
Apr
(13) |
May
(9) |
Jun
|
Jul
(23) |
Aug
(1) |
Sep
(9) |
Oct
(1) |
Nov
(11) |
Dec
(89) |
2012 |
Jan
(19) |
Feb
(16) |
Mar
(17) |
Apr
(24) |
May
(2) |
Jun
(2) |
Jul
(8) |
Aug
(5) |
Sep
(4) |
Oct
|
Nov
|
Dec
(2) |
2013 |
Jan
(2) |
Feb
|
Mar
(9) |
Apr
|
May
(4) |
Jun
(24) |
Jul
(4) |
Aug
|
Sep
(2) |
Oct
(5) |
Nov
(10) |
Dec
(9) |
2014 |
Jan
(25) |
Feb
(3) |
Mar
(14) |
Apr
(3) |
May
(5) |
Jun
(1) |
Jul
(4) |
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2015 |
Jan
(23) |
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
(16) |
Jul
|
Aug
(10) |
Sep
(2) |
Oct
|
Nov
(10) |
Dec
(2) |
2016 |
Jan
(9) |
Feb
(3) |
Mar
|
Apr
(3) |
May
(4) |
Jun
|
Jul
(1) |
Aug
|
Sep
(17) |
Oct
(30) |
Nov
(2) |
Dec
(31) |
2017 |
Jan
(11) |
Feb
|
Mar
|
Apr
(6) |
May
(2) |
Jun
(42) |
Jul
(16) |
Aug
(8) |
Sep
(5) |
Oct
(2) |
Nov
(23) |
Dec
(3) |
2018 |
Jan
(2) |
Feb
|
Mar
|
Apr
(15) |
May
(1) |
Jun
|
Jul
(2) |
Aug
(5) |
Sep
(8) |
Oct
(13) |
Nov
(5) |
Dec
|
2019 |
Jan
(2) |
Feb
(10) |
Mar
(1) |
Apr
(7) |
May
(5) |
Jun
(2) |
Jul
(6) |
Aug
|
Sep
(2) |
Oct
|
Nov
(1) |
Dec
|
2020 |
Jan
(11) |
Feb
|
Mar
(9) |
Apr
|
May
(14) |
Jun
|
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
(4) |
Dec
|
2021 |
Jan
(7) |
Feb
(16) |
Mar
(11) |
Apr
(5) |
May
(6) |
Jun
|
Jul
(1) |
Aug
(4) |
Sep
(3) |
Oct
(2) |
Nov
(1) |
Dec
(2) |
2022 |
Jan
(3) |
Feb
(2) |
Mar
(2) |
Apr
(7) |
May
(20) |
Jun
(8) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2023 |
Jan
(7) |
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
|
Jul
(2) |
Aug
(4) |
Sep
(2) |
Oct
|
Nov
(1) |
Dec
(2) |
2024 |
Jan
(9) |
Feb
|
Mar
(7) |
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
(10) |
Oct
|
Nov
|
Dec
|
From: <pdo...@us...> - 2022-12-06 11:42:25
|
Revision: 14979 http://sourceforge.net/p/squirrelmail/code/14979 Author: pdontthink Date: 2022-12-06 11:42:23 +0000 (Tue, 06 Dec 2022) Log Message: ----------- Fix poorly written timezone parsing Modified Paths: -------------- trunk/squirrelmail/functions/date.php Modified: trunk/squirrelmail/functions/date.php =================================================================== --- trunk/squirrelmail/functions/date.php 2022-12-06 11:40:20 UTC (rev 14978) +++ trunk/squirrelmail/functions/date.php 2022-12-06 11:42:23 UTC (rev 14979) @@ -83,13 +83,16 @@ break; } $neg = false; - if (substr($tzc, 0, 1) == '-') { - $neg = true; - } else if (substr($tzc, 0, 1) != '+') { - $tzc = '+'.$tzc; + if (preg_match('/^([+-]?)(\d\d)(\d\d)$/', $tzc, $matches)) { + if ($matches[1] === '-') + $neg = true; + $hh = $matches[2]; + $mm = $matches[3]; + } else { + // anything not listed above and not in the form +0400 + // defaults to UTC + $hh = $mm = 0; } - $hh = substr($tzc,1,2); - $mm = substr($tzc,3,2); $iTzc = ($hh * 60 + $mm) * 60; if ($neg) $iTzc = -1 * (int) $iTzc; /* stamp in gmt */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-12-06 11:40:22
|
Revision: 14978 http://sourceforge.net/p/squirrelmail/code/14978 Author: pdontthink Date: 2022-12-06 11:40:20 +0000 (Tue, 06 Dec 2022) Log Message: ----------- Fix poorly written timezone parsing Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/date.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/date.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/date.php 2022-06-20 17:26:13 UTC (rev 14977) +++ branches/SM-1_4-STABLE/squirrelmail/functions/date.php 2022-12-06 11:40:20 UTC (rev 14978) @@ -81,13 +81,16 @@ break; } $neg = false; - if (substr($tzc, 0, 1) == '-') { - $neg = true; - } else if (substr($tzc, 0, 1) != '+') { - $tzc = '+'.$tzc; + if (preg_match('/^([+-]?)(\d\d)(\d\d)$/', $tzc, $matches)) { + if ($matches[1] === '-') + $neg = true; + $hh = $matches[2]; + $mm = $matches[3]; + } else { + // anything not listed above and not in the form +0400 + // defaults to UTC + $hh = $mm = 0; } - $hh = substr($tzc,1,2); - $mm = substr($tzc,3,2); $iTzc = ($hh * 60 + $mm) * 60; if ($neg) $iTzc = -1 * (int) $iTzc; /* stamp in gmt */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 17:26:22
|
Revision: 14977 http://sourceforge.net/p/squirrelmail/code/14977 Author: pdontthink Date: 2022-06-20 17:26:13 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Remove use of each() Modified Paths: -------------- trunk/squirrelmail/src/addressbook.php Modified: trunk/squirrelmail/src/addressbook.php =================================================================== --- trunk/squirrelmail/src/addressbook.php 2022-06-20 17:19:35 UTC (rev 14976) +++ trunk/squirrelmail/src/addressbook.php 2022-06-20 17:26:13 UTC (rev 14977) @@ -305,7 +305,7 @@ /* Display the address management part */ $addresses = array(); -while (list($k, $backend) = each ($abook->backends)) { +foreach ($abook->backends as $k => $backend) { $a = array(); $a['BackendID'] = $backend->bnum; $a['BackendSource'] = $backend->sname; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 17:19:44
|
Revision: 14976 http://sourceforge.net/p/squirrelmail/code/14976 Author: pdontthink Date: 2022-06-20 17:19:35 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Remove use of each() Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/fetch.php branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/setup.php Modified: branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/fetch.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/fetch.php 2022-06-20 17:15:09 UTC (rev 14975) +++ branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/fetch.php 2022-06-20 17:19:35 UTC (rev 14976) @@ -239,7 +239,7 @@ } // end while - while (list($lineNum, $line) = each ($MessArray)) { + foreach ($MessArray as $lineNum => $line) { $Message .= $line; } Modified: branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/setup.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/setup.php 2022-06-20 17:15:09 UTC (rev 14975) +++ branches/SM-1_4-STABLE/squirrelmail/plugins/mail_fetch/setup.php 2022-06-20 17:19:35 UTC (rev 14976) @@ -176,7 +176,7 @@ continue 2; } - while (list($lineNum, $line) = each ($MessArray)) { + foreach ($MessArray as $lineNum => $line) { $Message .= $line; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 17:15:13
|
Revision: 14975 http://sourceforge.net/p/squirrelmail/code/14975 Author: pdontthink Date: 2022-06-20 17:15:09 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Backport fix from DEVEL Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/plugins/calendar/calendar_data.php Modified: branches/SM-1_4-STABLE/squirrelmail/plugins/calendar/calendar_data.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/plugins/calendar/calendar_data.php 2022-06-20 06:06:50 UTC (rev 14974) +++ branches/SM-1_4-STABLE/squirrelmail/plugins/calendar/calendar_data.php 2022-06-20 17:15:09 UTC (rev 14975) @@ -104,22 +104,20 @@ $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); $fp = fopen ($filetmp,"w"); if ($fp) { - while ( $calfoo = each ($calendardata)) { - while ( $calbar = each ($calfoo['value'])) { - $calfoobar = $calendardata[$calfoo['key']][$calbar['key']]; - array_walk($calfoobar,'calendar_encodedata'); + foreach ( $calendardata as $datetime => $events ) { + foreach ( $events as $time_of_day => $event ) { + array_walk($event,'calendar_encodedata'); /** * Make sure that reminder field is set. Calendar forms don't implement it, * but it is still used for calendar data. Backwards compatibility. */ - if (!isset($calfoobar['reminder'])) $calfoobar['reminder']=''; + if (!isset($event['reminder'])) $event['reminder']=''; - $calstr = "$calfoo[key]|$calbar[key]|$calfoobar[length]|$calfoobar[priority]|$calfoobar[title]|$calfoobar[message]|$calfoobar[reminder]\n"; + $calstr = "$datetime|$time_of_day|$event[length]|$event[priority]|$event[title]|$event[message]|$event[reminder]\n"; if(sq_fwrite($fp, $calstr, 4096) === FALSE) { error_box(_("Could not write calendar file %s", "$username.$year.cal.tmp"), $color); } } - } fclose ($fp); @unlink($filename); @@ -182,4 +180,4 @@ } } -?> \ No newline at end of file +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 06:06:52
|
Revision: 14974 http://sourceforge.net/p/squirrelmail/code/14974 Author: pdontthink Date: 2022-06-20 06:06:50 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Fix PHP notice Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/src/view_text.php Modified: branches/SM-1_4-STABLE/squirrelmail/src/view_text.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/src/view_text.php 2022-06-20 05:55:19 UTC (rev 14973) +++ branches/SM-1_4-STABLE/squirrelmail/src/view_text.php 2022-06-20 06:06:50 UTC (rev 14974) @@ -63,7 +63,7 @@ $message = $messages[$mbx_response['UIDVALIDITY']][$passed_id]; $message_ent = $message->getEntity($ent_id); if ($passed_ent_id) { - $message = &$message->getEntity($passed_ent_id); + $message = $message->getEntity($passed_ent_id); } $header = $message_ent->header; $type0 = $header->type0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 05:55:20
|
Revision: 14973 http://sourceforge.net/p/squirrelmail/code/14973 Author: pdontthink Date: 2022-06-20 05:55:19 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Fix PHP notice Modified Paths: -------------- trunk/squirrelmail/src/view_text.php Modified: trunk/squirrelmail/src/view_text.php =================================================================== --- trunk/squirrelmail/src/view_text.php 2022-06-20 02:27:20 UTC (rev 14972) +++ trunk/squirrelmail/src/view_text.php 2022-06-20 05:55:19 UTC (rev 14973) @@ -39,7 +39,7 @@ } $message_ent = $message->getEntity($ent_id); if ($passed_ent_id) { - $message = &$message->getEntity($passed_ent_id); + $message = $message->getEntity($passed_ent_id); } $header = $message_ent->header; $type0 = $header->type0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-20 02:27:22
|
Revision: 14972 http://sourceforge.net/p/squirrelmail/code/14972 Author: pdontthink Date: 2022-06-20 02:27:20 +0000 (Mon, 20 Jun 2022) Log Message: ----------- Restore line incorrectly deleted Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php Modified: branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php 2022-06-04 17:50:55 UTC (rev 14971) +++ branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php 2022-06-20 02:27:20 UTC (rev 14972) @@ -133,6 +133,7 @@ $show_num = getPref($data_dir, $username, 'show_num', 15 ); +$wrap_at = getPref( $data_dir, $username, 'wrap_at', 86 ); if ($wrap_at < 15) { $wrap_at = 15; } $left_size = getPref($data_dir, $username, 'left_size'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-04 17:50:56
|
Revision: 14971 http://sourceforge.net/p/squirrelmail/code/14971 Author: pdontthink Date: 2022-06-04 17:50:55 +0000 (Sat, 04 Jun 2022) Log Message: ----------- Remove use of each() and make sense of poorly named variables Modified Paths: -------------- trunk/squirrelmail/plugins/calendar/calendar_data.php Modified: trunk/squirrelmail/plugins/calendar/calendar_data.php =================================================================== --- trunk/squirrelmail/plugins/calendar/calendar_data.php 2022-06-04 17:20:28 UTC (rev 14970) +++ trunk/squirrelmail/plugins/calendar/calendar_data.php 2022-06-04 17:50:55 UTC (rev 14971) @@ -104,22 +104,20 @@ $filename = getHashedFile($username, $data_dir, "$username.$year.cal"); $fp = fopen ($filetmp,"w"); if ($fp) { - while ( $calfoo = each ($calendardata)) { - while ( $calbar = each ($calfoo['value'])) { - $calfoobar = $calendardata[$calfoo['key']][$calbar['key']]; - array_walk($calfoobar,'calendar_encodedata'); + foreach ( $calendardata as $datetime => $events ) { + foreach ( $events as $time_of_day => $event ) { + array_walk($event,'calendar_encodedata'); /** * Make sure that reminder field is set. Calendar forms don't implement it, * but it is still used for calendar data. Backwards compatibility. */ - if (!isset($calfoobar['reminder'])) $calfoobar['reminder']=''; + if (!isset($event['reminder'])) $event['reminder']=''; - $calstr = "$calfoo[key]|$calbar[key]|$calfoobar[length]|$calfoobar[priority]|$calfoobar[title]|$calfoobar[message]|$calfoobar[reminder]\n"; + $calstr = "$datetime|$time_of_day|$event[length]|$event[priority]|$event[title]|$event[message]|$event[reminder]\n"; if(sq_fwrite($fp, $calstr, 4096) === FALSE) { error_box(_("Could not write calendar file %s", "$username.$year.cal.tmp")); } } - } fclose ($fp); @unlink($filename); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-06-04 17:20:30
|
Revision: 14970 http://sourceforge.net/p/squirrelmail/code/14970 Author: pdontthink Date: 2022-06-04 17:20:28 +0000 (Sat, 04 Jun 2022) Log Message: ----------- Fix undefined variable notices Modified Paths: -------------- trunk/squirrelmail/src/read_body.php Modified: trunk/squirrelmail/src/read_body.php =================================================================== --- trunk/squirrelmail/src/read_body.php 2022-05-27 21:33:27 UTC (rev 14969) +++ trunk/squirrelmail/src/read_body.php 2022-06-04 17:20:28 UTC (rev 14970) @@ -490,6 +490,7 @@ $mailbox = $aMailbox['NAME']; $urlMailbox = urlencode($mailbox); + $next = $prev = -1; // Create Prev & Next links // Handle nested entities first (i.e. Mime Attach parts) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-27 21:33:31
|
Revision: 14969 http://sourceforge.net/p/squirrelmail/code/14969 Author: pdontthink Date: 2022-05-27 21:33:27 +0000 (Fri, 27 May 2022) Log Message: ----------- Add ability to explicitly set address book DB connection charset, though usually if database defaults are sensible this is not something to be concerned with in configuring SquirrelMail Modified Paths: -------------- trunk/squirrelmail/config/config_local.example.php trunk/squirrelmail/functions/abook_database.php Modified: trunk/squirrelmail/config/config_local.example.php =================================================================== --- trunk/squirrelmail/config/config_local.example.php 2022-05-27 21:31:26 UTC (rev 14968) +++ trunk/squirrelmail/config/config_local.example.php 2022-05-27 21:33:27 UTC (rev 14969) @@ -133,6 +133,14 @@ * the selection as needed, for example: * $prefs_db_charset = 'utf8mb4'; * + * $addrbook_db_charset (string) allows you to explicitly + * set the address book (SQL) database connection character + * set. In most cases, system defaults should be sufficient, + * even for UTF-8 contact names and so forth, but this + * allows you to specifically make the selection as needed, + * for example: + * $addrbook_db_charset = 'utf8mb4'; + * * $use_expiring_security_tokens (boolean) allows you to * make SquirrelMail use short-lived anti-CSRF security * tokens that expire as desired (not recommended, can Modified: trunk/squirrelmail/functions/abook_database.php =================================================================== --- trunk/squirrelmail/functions/abook_database.php 2022-05-27 21:31:26 UTC (rev 14968) +++ trunk/squirrelmail/functions/abook_database.php 2022-05-27 21:33:27 UTC (rev 14969) @@ -48,8 +48,8 @@ * An array with the following elements must be passed to * the class constructor (elements marked ? are optional): * <pre> - * dsn => database DNS (see PEAR for syntax, but more or - * less it is: mysql://user:pass@hostname/dbname) + * dsn => database DNS (see PEAR for syntax, but basically + * it is: mysql://user:pass@hostname/dbname) * table => table to store addresses in (must exist) * owner => current user (owner of address data) * ? name => name of address book @@ -88,6 +88,13 @@ * NOT to quote identifiers by setting * this to "none" * + * + * If needed, you can also set $addrbook_db_charset as a string + * (such as "utf8mb4") in config/config_local.php if your system + * does not default the SQL connection character set as expected + * (most sensible systems will do the right thing transparently). + * TODO: make this specific to each backend and not a global? + * * @package squirrelmail * @subpackage addressbook */ @@ -220,7 +227,7 @@ * @return bool */ function open($new = false) { - global $use_pdo; + global $use_pdo, $addrbook_db_charset; $this->error = ''; /* Return true is file is open and $new is unset */ @@ -276,6 +283,8 @@ $pdo_prefs_dsn = $matches[1] . ':unix_socket=' . $matches[9] . ';dbname=' . $matches[5]; else $pdo_prefs_dsn = $matches[1] . ':host=' . $matches[4] . (!empty($matches[6]) ? ';port=' . $matches[6] : '') . ';dbname=' . $matches[5]; + if (!empty($addrbook_db_charset)) + $pdo_prefs_dsn .= ';charset=' . $addrbook_db_charset; try { $dbh = new PDO($pdo_prefs_dsn, $matches[2], $matches[3]); } catch (Exception $e) { @@ -300,6 +309,31 @@ } $this->dbh = $dbh; + + // Older versions of PHP are buggy with setting charset on the dsn so we also issue a SET NAMES + if (!empty($addrbook_db_charset)) { + if ($use_pdo) { + $res = $dbh->exec('SET NAMES \'' . $addrbook_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if ($res === FALSE) { + if ($pdo_show_sql_errors) + $this->error = implode(' - ', $sth->errorInfo()); + else + $this->error = _("Could not execute query"); + } + $this->failQuery(); + */ + } + else { + $res = $this->dbh->simpleQuery('SET NAMES \'' . $addrbook_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if(DB::isError($res)) { + $this->failQuery($res); + } + */ + } + } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-27 21:31:28
|
Revision: 14968 http://sourceforge.net/p/squirrelmail/code/14968 Author: pdontthink Date: 2022-05-27 21:31:26 +0000 (Fri, 27 May 2022) Log Message: ----------- Add ability to explicitly set prefs DB connection charset, though usually if database defaults are sensible this is not something to be concerned with in configuring SquirrelMail Modified Paths: -------------- trunk/squirrelmail/config/config_local.example.php trunk/squirrelmail/functions/db_prefs.php Modified: trunk/squirrelmail/config/config_local.example.php =================================================================== --- trunk/squirrelmail/config/config_local.example.php 2022-05-27 21:26:24 UTC (rev 14967) +++ trunk/squirrelmail/config/config_local.example.php 2022-05-27 21:31:26 UTC (rev 14968) @@ -125,6 +125,14 @@ * being used (backtick for MySQL (and thus MariaDB), * double quotes for all others). * + * $prefs_db_charset (string) allows you to explicitly + * set the user preferences (SQL) database connection + * character set. In most cases, system defaults should + * be sufficient, even for UTF-8 preference values and + * so forth, but this allows you to specifically make + * the selection as needed, for example: + * $prefs_db_charset = 'utf8mb4'; + * * $use_expiring_security_tokens (boolean) allows you to * make SquirrelMail use short-lived anti-CSRF security * tokens that expire as desired (not recommended, can Modified: trunk/squirrelmail/functions/db_prefs.php =================================================================== --- trunk/squirrelmail/functions/db_prefs.php 2022-05-27 21:26:24 UTC (rev 14967) +++ trunk/squirrelmail/functions/db_prefs.php 2022-05-27 21:31:26 UTC (rev 14968) @@ -47,6 +47,11 @@ * NOT to quote identifiers by setting * this to "none" * + * If needed, you can also set $prefs_db_charset as a string + * (such as "utf8mb4") in config/config_local.php if your system + * does not default the SQL connection character set as expected + * (most sensible systems will do the right thing transparently). + * * @copyright 1999-2022 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ @@ -245,7 +250,7 @@ * */ function open() { - global $prefs_dsn, $prefs_table, $use_pdo, $db_identifier_quote_char; + global $prefs_dsn, $prefs_db_charset, $prefs_table, $use_pdo, $db_identifier_quote_char; global $prefs_user_field, $prefs_key_field, $prefs_val_field; global $prefs_user_size, $prefs_key_size, $prefs_val_size; @@ -347,6 +352,8 @@ $pdo_prefs_dsn = $matches[1] . ':unix_socket=' . $matches[9] . ';dbname=' . $matches[5]; else $pdo_prefs_dsn = $matches[1] . ':host=' . $matches[4] . (!empty($matches[6]) ? ';port=' . $matches[6] : '') . ';dbname=' . $matches[5]; + if (!empty($prefs_db_charset)) + $pdo_prefs_dsn .= ';charset=' . $prefs_db_charset; try { $dbh = new PDO($pdo_prefs_dsn, $matches[2], $matches[3]); } catch (Exception $e) { @@ -363,6 +370,31 @@ } $this->dbh = $dbh; + + // Older versions of PHP are buggy with setting charset on the dsn so we also issue a SET NAMES + if (!empty($prefs_db_charset)) { + if ($use_pdo) { + $res = $dbh->exec('SET NAMES \'' . $prefs_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch this on queries like this + if ($res === FALSE) { + if ($pdo_show_sql_errors) + $this->error = implode(' - ', $sth->errorInfo()); + else + $this->error = _("Could not execute query"); + } + $this->failQuery(); + */ + } + else { + $res = $this->dbh->simpleQuery('SET NAMES \'' . $prefs_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch this on queries like this + if(DB::isError($res)) { + $this->failQuery($res); + } + */ + } + } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-27 21:26:27
|
Revision: 14967 http://sourceforge.net/p/squirrelmail/code/14967 Author: pdontthink Date: 2022-05-27 21:26:24 +0000 (Fri, 27 May 2022) Log Message: ----------- Add ability to explicitly set address book DB connection charset, though usually if database defaults are sensible this is not something to be concerned with in configuring SquirrelMail Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/abook_database.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/abook_database.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/abook_database.php 2022-05-27 21:25:53 UTC (rev 14966) +++ branches/SM-1_4-STABLE/squirrelmail/functions/abook_database.php 2022-05-27 21:26:24 UTC (rev 14967) @@ -43,8 +43,8 @@ * An array with the following elements must be passed to * the class constructor (elements marked ? are optional): * <pre> - * dsn => database DNS (see PEAR for syntax, but more or - * less it is: mysql://user:pass@hostname/dbname) + * dsn => database DNS (see PEAR for syntax, but basically + * it is: mysql://user:pass@hostname/dbname) * table => table to store addresses in (must exist) * owner => current user (owner of address data) * ? name => name of address book @@ -83,6 +83,12 @@ * NOT to quote identifiers by setting * this to "none" * + * If needed, you can also set $addrbook_db_charset as a string + * (such as "utf8mb4") in config/config_local.php if your system + * does not default the SQL connection character set as expected + * (most sensible systems will do the right thing transparently). + * TODO: make this specific to each backend and not a global? + * * @package squirrelmail * @subpackage addressbook */ @@ -205,7 +211,7 @@ * @return bool */ function open($new = false) { - global $use_pdo; + global $use_pdo, $addrbook_db_charset; $this->error = ''; /* Return true is file is open and $new is unset */ @@ -261,6 +267,8 @@ $pdo_prefs_dsn = $matches[1] . ':unix_socket=' . $matches[9] . ';dbname=' . $matches[5]; else $pdo_prefs_dsn = $matches[1] . ':host=' . $matches[4] . (!empty($matches[6]) ? ';port=' . $matches[6] : '') . ';dbname=' . $matches[5]; + if (!empty($addrbook_db_charset)) + $pdo_prefs_dsn .= ';charset=' . $addrbook_db_charset; try { $dbh = new PDO($pdo_prefs_dsn, $matches[2], $matches[3]); } catch (Exception $e) { @@ -285,6 +293,31 @@ } $this->dbh = $dbh; + + // Older versions of PHP are buggy with setting charset on the dsn so we also issue a SET NAMES + if (!empty($addrbook_db_charset)) { + if ($use_pdo) { + $res = $dbh->exec('SET NAMES \'' . $addrbook_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if ($res === FALSE) { + if ($pdo_show_sql_errors) + $this->error = implode(' - ', $sth->errorInfo()); + else + $this->error = _("Could not execute query"); + } + $this->failQuery(); + */ + } + else { + $res = $this->dbh->simpleQuery('SET NAMES \'' . $addrbook_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if(DB::isError($res)) { + $this->failQuery($res); + } + */ + } + } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-27 21:25:55
|
Revision: 14966 http://sourceforge.net/p/squirrelmail/code/14966 Author: pdontthink Date: 2022-05-27 21:25:53 +0000 (Fri, 27 May 2022) Log Message: ----------- Add ability to explicitly set prefs DB connection charset, though usually if database defaults are sensible this is not something to be concerned with in configuring SquirrelMail Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php 2022-05-24 08:26:45 UTC (rev 14965) +++ branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php 2022-05-27 21:25:53 UTC (rev 14966) @@ -47,6 +47,11 @@ * NOT to quote identifiers by setting * this to "none" * + * If needed, you can also set $prefs_db_charset as a string + * (such as "utf8mb4") in config/config_local.php if your system + * does not default the SQL connection character set as expected + * (most sensible systems will do the right thing transparently). + * * @copyright 1999-2022 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ @@ -170,7 +175,7 @@ } function open() { - global $prefs_dsn, $prefs_table, $use_pdo, $db_identifier_quote_char; + global $prefs_dsn, $prefs_db_charset, $prefs_table, $use_pdo, $db_identifier_quote_char; global $prefs_user_field, $prefs_key_field, $prefs_val_field; if(isset($this->dbh)) { @@ -254,6 +259,8 @@ $pdo_prefs_dsn = $matches[1] . ':unix_socket=' . $matches[9] . ';dbname=' . $matches[5]; else $pdo_prefs_dsn = $matches[1] . ':host=' . $matches[4] . (!empty($matches[6]) ? ';port=' . $matches[6] : '') . ';dbname=' . $matches[5]; + if (!empty($prefs_db_charset)) + $pdo_prefs_dsn .= ';charset=' . $prefs_db_charset; try { $dbh = new PDO($pdo_prefs_dsn, $matches[2], $matches[3]); } catch (Exception $e) { @@ -270,6 +277,31 @@ } $this->dbh = $dbh; + + // Older versions of PHP are buggy with setting charset on the dsn so we also issue a SET NAMES + if (!empty($prefs_db_charset)) { + if ($use_pdo) { + $res = $dbh->exec('SET NAMES \'' . $prefs_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if ($res === FALSE) { + if ($pdo_show_sql_errors) + $this->error = implode(' - ', $sth->errorInfo()); + else + $this->error = _("Could not execute query"); + } + $this->failQuery(); + */ + } + else { + $res = $this->dbh->simpleQuery('SET NAMES \'' . $prefs_db_charset . '\''); + /* Purposefully not checking for errors; some setups reportedly botch it on queries like this + if(DB::isError($res)) { + $this->failQuery($res); + } + */ + } + } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-24 08:26:47
|
Revision: 14965 http://sourceforge.net/p/squirrelmail/code/14965 Author: pdontthink Date: 2022-05-24 08:26:45 +0000 (Tue, 24 May 2022) Log Message: ----------- Fix PHP notice when property doesn't exist Modified Paths: -------------- trunk/squirrelmail/class/deliver/Deliver_SMTP.class.php Modified: trunk/squirrelmail/class/deliver/Deliver_SMTP.class.php =================================================================== --- trunk/squirrelmail/class/deliver/Deliver_SMTP.class.php 2022-05-24 04:43:39 UTC (rev 14964) +++ trunk/squirrelmail/class/deliver/Deliver_SMTP.class.php 2022-05-24 08:26:45 UTC (rev 14965) @@ -347,7 +347,8 @@ if (!$to[$i]->host) $to[$i]->host = $domain; if (strlen($to[$i]->mailbox)) { // Ask for DSN if user has requested such and remote server supports it - if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) { + if (isset($rfc822_header->dsn) && $rfc822_header->dsn + && array_key_exists('DSN',$this->ehlo)) { // TODO: Make the DSN parameters configurable by admin? user? fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n"); // Retry without DSN fields for cranky MTAs @@ -368,7 +369,8 @@ if (!$cc[$i]->host) $cc[$i]->host = $domain; if (strlen($cc[$i]->mailbox)) { // Ask for DSN if user has requested such and remote server supports it - if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) { + if (isset($rfc822_header->dsn) && $rfc822_header->dsn + && array_key_exists('DSN',$this->ehlo)) { // TODO: Make the DSN parameters configurable by admin? user? fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n"); // Retry without DSN fields for cranky MTAs @@ -389,7 +391,8 @@ if (!$bcc[$i]->host) $bcc[$i]->host = $domain; if (strlen($bcc[$i]->mailbox)) { // Ask for DSN if user has requested such and remote server supports it - if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) { + if (isset($rfc822_header->dsn) && $rfc822_header->dsn + && array_key_exists('DSN',$this->ehlo)) { // TODO: Make the DSN parameters configurable by admin? user? fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n"); // Retry without DSN fields for cranky MTAs This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-24 04:43:40
|
Revision: 14964 http://sourceforge.net/p/squirrelmail/code/14964 Author: pdontthink Date: 2022-05-24 04:43:39 +0000 (Tue, 24 May 2022) Log Message: ----------- Add contrib directory Added Paths: ----------- trunk/imap_proxy/contrib/ trunk/imap_proxy/contrib/0001-icc-add-possibility-to-explicit-set-the-last-logout-time.patch trunk/imap_proxy/contrib/0002-request-close-the-server-connection-on-error.patch trunk/imap_proxy/contrib/README Added: trunk/imap_proxy/contrib/0001-icc-add-possibility-to-explicit-set-the-last-logout-time.patch =================================================================== --- trunk/imap_proxy/contrib/0001-icc-add-possibility-to-explicit-set-the-last-logout-time.patch (rev 0) +++ trunk/imap_proxy/contrib/0001-icc-add-possibility-to-explicit-set-the-last-logout-time.patch 2022-05-24 04:43:39 UTC (rev 14964) @@ -0,0 +1,60 @@ +From a820b6b2e87800b53a7b63723d491120d645ff0a Mon Sep 17 00:00:00 2001 +From: Alexander Sulfrian <ale...@fu...> +Date: Mon, 29 Oct 2012 16:25:32 +0100 +Subject: [PATCH 1/2] icc: add possibility to explicit set the last logout time + +--- + src/icc.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/src/icc.c b/src/icc.c +index 3fc0363..03fe639 100644 +--- a/src/icc.c ++++ b/src/icc.c +@@ -248,19 +248,20 @@ extern void ICC_Recycle_Loop( void ) + + + /*++ +- * Function: ICC_Logout ++ * Function: ICC_Set_Logout_Time + * + * Purpose: set the last logout time for an IMAP connection context. + * + * Parameters: char *Username + * int server-side socket descriptor ++ * time_t logout time to set + * + * Returns: nada + * + * Authors: Dave McMurtrie <dav...@ho...> + *-- + */ +-extern void ICC_Logout( char *Username, ICD_Struct *conn ) ++extern void ICC_Set_Logout_Time( char *Username, ICD_Struct *conn, time_t time ) + { + char *fn = "ICC_Logout()"; + unsigned int HashIndex; +@@ -298,7 +299,7 @@ extern void ICC_Logout( char *Username, ICD_Struct *conn ) + return; + } + +- ICC_Active->logouttime = time(0); ++ ICC_Active->logouttime = time; + + UnLockMutex( &mp ); + +@@ -307,6 +308,11 @@ extern void ICC_Logout( char *Username, ICD_Struct *conn ) + return; + } + ++extern void ICC_Logout( char *Username, ICD_Struct *conn ) ++{ ++ return ICC_Set_Logout_Time(Username, conn, time(0)); ++} ++ + + + /* +-- +1.7.12.3-zedat + Added: trunk/imap_proxy/contrib/0002-request-close-the-server-connection-on-error.patch =================================================================== --- trunk/imap_proxy/contrib/0002-request-close-the-server-connection-on-error.patch (rev 0) +++ trunk/imap_proxy/contrib/0002-request-close-the-server-connection-on-error.patch 2022-05-24 04:43:39 UTC (rev 14964) @@ -0,0 +1,51 @@ +From de0585cdae6cf7d5025f990e06ef474192b5e9d4 Mon Sep 17 00:00:00 2001 +From: Alexander Sulfrian <ale...@fu...> +Date: Mon, 29 Oct 2012 16:28:18 +0100 +Subject: [PATCH 2/2] request: close the server connection on error + +if an error occurs during the connection proxy the the server +(f.e. caused by a connection close from the client during attachment +transfer) the connection to the server is also closed to force a new +connection on the next connection attempt from the client +--- + src/request.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/src/request.c b/src/request.c +index 627036f..622fb09 100644 +--- a/src/request.c ++++ b/src/request.c +@@ -910,7 +910,12 @@ static int cmd_authenticate_login( ITD_Struct *Client, + Client->TraceOn = 0; + Server.TraceOn = 0; + +- ICC_Logout( Username, Server.conn ); ++ if ( rc < 0 ) { ++ ICC_Set_Logout_Time( Username, Server.conn, 1 ); ++ } ++ else { ++ ICC_Logout( Username, Server.conn ); ++ } + + return( rc ); + } +@@ -1070,8 +1075,14 @@ static int cmd_login( ITD_Struct *Client, + Client->TraceOn = 0; + Server.TraceOn = 0; + +- /* update the logout time for this cached connection */ +- ICC_Logout( Username, Server.conn ); ++ if ( rc < 0 ) { ++ /* close the server connection on error (timeout) */ ++ ICC_Set_Logout_Time( Username, Server.conn, 1 ); ++ } ++ else { ++ /* update the logout time for this cached connection */ ++ ICC_Logout( Username, Server.conn ); ++ } + + return( rc ); + } +-- +1.7.12.3-zedat + Added: trunk/imap_proxy/contrib/README =================================================================== --- trunk/imap_proxy/contrib/README (rev 0) +++ trunk/imap_proxy/contrib/README 2022-05-24 04:43:39 UTC (rev 14964) @@ -0,0 +1,41 @@ +The contrib directory contains miscellaneous information or resources +related to SquirrelMail IMAP Proxy. + +=============================================================================== + +Alexander contributed a patch for solving a problem +he had with hung connections: + +https://sourceforge.net/p/squirrelmail/patches/480/ + +------------------------------------------------------------------------------- + +Hi, + +in our setup we had a problem with imapproxy. The problem occurs if a user cancels a attachment download within squirrelmail. After that all folder seems empty and the user has to wait the configured time until imapproxy closes the connections. Debugging the situation we found out, that imapproxy preserves the closed connection and continue to send the attachment data within the next imap connection. + +I have prepared a series of two patches to fix this issue: + +The first patch renames the ICC_Logout function to ICC_Set_Logout_Time, that accepts a third parameter, that is the value to set the logouttime to. ICC_Logout is a simple wrapper of that function to set the logout time time to the current time (the same behavior as before). + +The second patch closes the connection to the server (by setting the logouttime to 1) if an error occurs in the Raw_Proxy method (returning a status code less than 0). This is exactly the case if the client does close the connection within a transfer. The error that occurs is a write error on the closed client fd. If no error occurs the logouttime is set to the current time exactly as before. + +The two patches fixes the problem for our setup. + +Thanks, +Alex + +------------------------------------------------------------------------------- + +These patches are believed to be unnecessary because +they were based on an older version (pre 1.2.8) where +newer code already has changes that help invalidate +hung server connections. + +Nevertheless, the patch files are included herein for posterity as: + +0001-icc-add-possibility-to-explicit-set-the-last-logout-time.patch +0002-request-close-the-server-connection-on-error.patch + +=============================================================================== + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-24 01:56:23
|
Revision: 14963 http://sourceforge.net/p/squirrelmail/code/14963 Author: pdontthink Date: 2022-05-24 01:56:21 +0000 (Tue, 24 May 2022) Log Message: ----------- New configuration items for regular SASL AUTH PLAIN capability Modified Paths: -------------- trunk/imap_proxy/scripts/imapproxy.conf Modified: trunk/imap_proxy/scripts/imapproxy.conf =================================================================== --- trunk/imap_proxy/scripts/imapproxy.conf 2022-05-24 01:55:24 UTC (rev 14962) +++ trunk/imap_proxy/scripts/imapproxy.conf 2022-05-24 01:56:21 UTC (rev 14963) @@ -222,8 +222,8 @@ # -## Set any of these to "yes" if the corresponding TLS version is not -## sufficiently secure for your needs +## Set any of these to "yes" if the corresponding TLS version +## is not sufficiently secure for your needs # #tls_no_tlsv1 no #tls_no_tlsv1.1 no @@ -232,17 +232,32 @@ # ## Authenticate using SASL AUTHENTICATE PLAIN +## (instead of the default IMAP LOGIN mechanism) ## -## The following authentication username and password are used -## along with the username from the client as the authorization -## identity. In order to avoid having the service wide open (no -## password needed from the client), the client is required to -## send the auth_shared_secret in leiu of a user password. +## There are two ways this can be used: ## +## 1) Send the username and password to the upstream +## server for a typical proxied login +## +## 2) Send a pre-configured authorization identity along +## with the client's authentication identity (username) +## +## For the typical (1) usage, uncomment and make sure +## auth_sasl_mech is set to "plain" +## +## To use a static authorization identity (2), set +## auth_sasl_plain_username and auth_sasl_plain_password +## with the needed credentials and enter a shared secret +## in auth_shared_secret which is required so that the service +## is not wide open: the client must still provide this secret +## in leiu of a user password. +## ## NOTE: This functionality *assumes* that the server supports ## AUTHENTICATE PLAIN, and it does *not* verify this by ## looking at the server's capabilities list. # +#auth_sasl_mech plain +# #auth_sasl_plain_username #auth_sasl_plain_password #auth_shared_secret @@ -266,5 +281,5 @@ ## Default if unset is AF_UNSPEC for both A and AAAA. # #ipversion_only 6 - + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-24 01:55:28
|
Revision: 14962 http://sourceforge.net/p/squirrelmail/code/14962 Author: pdontthink Date: 2022-05-24 01:55:24 +0000 (Tue, 24 May 2022) Log Message: ----------- Add regular SASL AUTH PLAIN (to upstream) capability (thanks to Emmanuel Dreyfus) (#484) Modified Paths: -------------- trunk/imap_proxy/include/imapproxy.h trunk/imap_proxy/src/config.c trunk/imap_proxy/src/imapcommon.c Modified: trunk/imap_proxy/include/imapproxy.h =================================================================== --- trunk/imap_proxy/include/imapproxy.h 2022-05-23 00:25:07 UTC (rev 14961) +++ trunk/imap_proxy/include/imapproxy.h 2022-05-24 01:55:24 UTC (rev 14962) @@ -311,6 +311,7 @@ unsigned char login_disabled; /* login disabled flag */ char *chroot_directory; /* chroot(2) into this dir */ char *preauth_command; /* arbitrary pre-authentication command */ + char *auth_sasl_mech; /* SASL mechanism */ char *auth_sasl_plain_username; /* authentication username under SASL PLAIN */ char *auth_sasl_plain_password; /* authentication password under SASL PLAIN */ char *auth_shared_secret; /* REQUIRED shared secret in leiu of a user password when using LOGIN command with SASL PLAIN authentication */ Modified: trunk/imap_proxy/src/config.c =================================================================== --- trunk/imap_proxy/src/config.c 2022-05-23 00:25:07 UTC (rev 14961) +++ trunk/imap_proxy/src/config.c 2022-05-24 01:55:24 UTC (rev 14962) @@ -398,6 +398,9 @@ ADD_TO_TABLE( "preauth_command", SetStringValue, &PC_Struct.preauth_command, index ); + ADD_TO_TABLE( "auth_sasl_mech", SetStringValue, + &PC_Struct.auth_sasl_mech, index ); + ADD_TO_TABLE( "auth_sasl_plain_username", SetStringValue, &PC_Struct.auth_sasl_plain_username, index ); Modified: trunk/imap_proxy/src/imapcommon.c =================================================================== --- trunk/imap_proxy/src/imapcommon.c 2022-05-23 00:25:07 UTC (rev 14961) +++ trunk/imap_proxy/src/imapcommon.c 2022-05-24 01:55:24 UTC (rev 14962) @@ -540,7 +540,7 @@ char EncodedAuthBuf[BUFSIZE]; char AuthBuf[BUFSIZE]; - char AuthBufIndex; + unsigned int AuthBufIndex; unsigned int BufLen = BUFSIZE - 1; char md5pw[MD5_DIGEST_LENGTH]; @@ -903,11 +903,11 @@ goto fail; } } - + /* * If configured to do so, execute SASL PLAIN authentication - * using the static authentication username and password from + * using the static authorization username and password from * configuration (auth_sasl_plain_username/auth_sasl_plain_password). * * Note that because this means no password is required from @@ -937,7 +937,7 @@ /* * Build SASL AUTH PLAIN string: - * username\0authentication_username\0authentication_password + * authentication_username\0authorization_username\0authorization_password */ char *ptr_username; unsigned int username_size; @@ -998,6 +998,91 @@ /* + * If configured to do so, use SASL PLAIN instead of IMAP LOGIN to authenticate + */ + else if ( PC_Struct.auth_sasl_mech + && !strcmp( PC_Struct.auth_sasl_mech, "plain" ) ) + { + /* + * Build SASL AUTH PLAIN string: + * username\0username\0password + */ + char *ptr_username; + unsigned int username_size; + char *ptr_password; + unsigned int password_size; + unsigned int total_size; + + /* + * But first, if username is enclosed in quotes, skip the + * first one and overwrite the second with \0 (with pointer + * math for our use below, since we are still working on + * the original Username) + */ + ptr_username = Username; + username_size = strlen( Username ); + if ( *ptr_username == '"' && *(ptr_username + username_size - 1) == '"' ) + { + ++ptr_username; + username_size = username_size - 2; + } + + /* + * Same with password + */ + ptr_password = Password; + password_size = strlen( Password ); + if ( *ptr_password == '"' && *(ptr_password + password_size - 1) == '"' ) + { + ++ptr_password; + password_size = password_size - 2; + } + + /* + * Make sure output buffer is big enough ( +3 for three \0 ) + */ + total_size = username_size + username_size + password_size + 3; + if ( total_size > BufLen ) { + syslog( LOG_INFO, + "LOGIN: '%s' (%s:%s) failed: PLAIN AUTH needs %d bytes; BUFSIZE is only %d", + Username, ClientAddr, portstr, total_size, BufLen ); + goto fail; + } + + /* + * Prepare the buffer + */ + AuthBufIndex = 0; + + memcpy( AuthBuf + AuthBufIndex, ptr_username, username_size ); + AuthBufIndex += username_size; + AuthBuf[AuthBufIndex++] = '\0'; + + memcpy( AuthBuf + AuthBufIndex, ptr_username, username_size ); + AuthBufIndex += username_size; + AuthBuf[AuthBufIndex++] = '\0'; + + memcpy( AuthBuf + AuthBufIndex, ptr_password, password_size ); + AuthBufIndex += password_size; + AuthBuf[AuthBufIndex++] = '\0'; + + EVP_EncodeBlock( EncodedAuthBuf, AuthBuf, AuthBufIndex ); + + snprintf( SendBuf, BufLen, "A0001 AUTHENTICATE PLAIN %s\r\n", EncodedAuthBuf ); + + /* syslog( LOG_INFO, "sending auth plain '%s'", EncodedAuthBuf ); */ + + if ( IMAP_Write( Server.conn, SendBuf, strlen(SendBuf) ) == -1 ) + { + syslog( LOG_INFO, + "LOGIN: '%s' (%s:%s) failed: IMAP_Write() failed attempting to send AUTHENTICATE command to IMAP server: %s", + Username, ClientAddr, portstr, strerror( errno ) ); + goto fail; + } + } + + + /* * Otherwise, send a normal login command off to the IMAP server. * * ... but login command has to treat literal passwords differently: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-23 00:25:09
|
Revision: 14961 http://sourceforge.net/p/squirrelmail/code/14961 Author: pdontthink Date: 2022-05-23 00:25:07 +0000 (Mon, 23 May 2022) Log Message: ----------- Greatly fix the plaintext display of messages that do not have a text part. Patch from Alexey Shpakovsky (#496) Modified Paths: -------------- trunk/squirrelmail/functions/mime.php Modified: trunk/squirrelmail/functions/mime.php =================================================================== --- trunk/squirrelmail/functions/mime.php 2022-05-23 00:19:51 UTC (rev 14960) +++ trunk/squirrelmail/functions/mime.php 2022-05-23 00:25:07 UTC (rev 14961) @@ -396,18 +396,38 @@ */ if ($body_message->header->type1 == 'html') { - if ($show_html_default <> 1) { + // Do we need to make an HTML part viewable as non-HTML plain text? + if ($show_html_default != 1) { $entity_conv = array(' ' => ' ', - '<p>' => "\n", - '<P>' => "\n", - '<br>' => "\n", - '<BR>' => "\n", - '<br />' => "\n", - '<BR />' => "\n", + // These are better done by regex (below) + // '<p>' => "\n", + // '<P>' => "\n", + // '<br>' => "\n", + // '<BR>' => "\n", + // '<br />' => "\n", + // '<BR />' => "\n", + // '<tr>' => "\n", + // '<div>' => "\n", '>' => '>', - '<' => '<'); + '<' => '<', + '&' => '&', + '©' => '©'); + // first, completely remove <style> tags as they aren't useful in this context + $body = preg_replace('/<style.*>.*<\/style.*>/isU', '', $body); + // emulate how newlines are treated as spaces in HTML + $body = preg_replace('/(\r|\n)+/', ' ', $body); + // now replace the tags listed just above $body = strtr($body, $entity_conv); + // <p>, <br>, <tr> and <div> are best replaced by a newline + $body = preg_replace('/<(p|br|tr|div).*>/isU', "\n", $body); + // remove the rest of the HTML tags $body = strip_tags($body); + // condense multiple spaces into one + $body = preg_replace('/[ \t]+/', ' ', $body); + // trim each line + $body = preg_replace('/ *\n */', "\n", $body); + // allow maximum two newlines + $body = preg_replace('/\n\n\n+/', "\n\n", $body); $body = trim($body); translateText($body, $wrap_at, $body_message->header->getParameter('charset')); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-23 00:19:54
|
Revision: 14960 http://sourceforge.net/p/squirrelmail/code/14960 Author: pdontthink Date: 2022-05-23 00:19:51 +0000 (Mon, 23 May 2022) Log Message: ----------- Greatly fix the plaintext display of messages that do not have a text part. Patch from Alexey Shpakovsky (#496) Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/mime.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/mime.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/mime.php 2022-05-22 22:30:12 UTC (rev 14959) +++ branches/SM-1_4-STABLE/squirrelmail/functions/mime.php 2022-05-23 00:19:51 UTC (rev 14960) @@ -348,18 +348,38 @@ */ if ($body_message->header->type1 == 'html') { - if ($show_html_default <> 1) { + // Do we need to make an HTML part viewable as non-HTML plain text? + if ($show_html_default != 1) { $entity_conv = array(' ' => ' ', - '<p>' => "\n", - '<P>' => "\n", - '<br>' => "\n", - '<BR>' => "\n", - '<br />' => "\n", - '<BR />' => "\n", + // These are better done by regex (below) + // '<p>' => "\n", + // '<P>' => "\n", + // '<br>' => "\n", + // '<BR>' => "\n", + // '<br />' => "\n", + // '<BR />' => "\n", + // '<tr>' => "\n", + // '<div>' => "\n", '>' => '>', - '<' => '<'); + '<' => '<', + '&' => '&', + '©' => '©'); + // first, completely remove <style> tags as they aren't useful in this context + $body = preg_replace('/<style.*>.*<\/style.*>/isU', '', $body); + // emulate how newlines are treated as spaces in HTML + $body = preg_replace('/(\r|\n)+/', ' ', $body); + // now replace the tags listed just above $body = strtr($body, $entity_conv); + // <p>, <br>, <tr> and <div> are best replaced by a newline + $body = preg_replace('/<(p|br|tr|div).*>/isU', "\n", $body); + // remove the rest of the HTML tags $body = strip_tags($body); + // condense multiple spaces into one + $body = preg_replace('/[ \t]+/', ' ', $body); + // trim each line + $body = preg_replace('/ *\n */', "\n", $body); + // allow maximum two newlines + $body = preg_replace('/\n\n\n+/', "\n\n", $body); $body = trim($body); translateText($body, $wrap_at, $body_message->header->getParameter('charset')); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-22 22:30:14
|
Revision: 14959 http://sourceforge.net/p/squirrelmail/code/14959 Author: pdontthink Date: 2022-05-22 22:30:12 +0000 (Sun, 22 May 2022) Log Message: ----------- Fix: Login mechanisms other than "login" were broken if server returned untagged data before login response (#2854) Modified Paths: -------------- trunk/squirrelmail/functions/imap_general.php Modified: trunk/squirrelmail/functions/imap_general.php =================================================================== --- trunk/squirrelmail/functions/imap_general.php 2022-05-22 22:15:28 UTC (rev 14958) +++ trunk/squirrelmail/functions/imap_general.php 2022-05-22 22:30:12 UTC (rev 14959) @@ -908,6 +908,11 @@ $read=sqimap_fgets($imap_stream); } } + // IMAP server might return some untagged info before + // the tagged login command response - skip over that + while ($read[0] === '*') { + $read = sqimap_fgets($imap_stream); + } $results=explode(" ",$read,3); $response=$results[1]; $message=$results[2]; @@ -936,7 +941,7 @@ * credentials and use that as the authorization identity. */ $tag=sqimap_session_id(false); - $sasl = (isset($sqimap_capabilities['SASL-IR']) && $sqimap_capabilities['SASL-IR']) ? true : false; + $sasl = sqimap_capability($imap_stream, 'SASL-IR'); if(!empty($authz)) { $auth = base64_encode("$username\0$authz\0$password"); } else { @@ -957,6 +962,11 @@ $read = sqimap_fgets($imap_stream); } } + // IMAP server might return some untagged info before + // the tagged login command response - skip over that + while ($read[0] === '*') { + $read = sqimap_fgets($imap_stream); + } $results=explode(" ",$read,3); $response=$results[1]; $message=$results[2]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-22 22:15:29
|
Revision: 14958 http://sourceforge.net/p/squirrelmail/code/14958 Author: pdontthink Date: 2022-05-22 22:15:28 +0000 (Sun, 22 May 2022) Log Message: ----------- Fix: Login mechanisms other than "login" were broken if server returned untagged data before login response (#2854) Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/imap_general.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/imap_general.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/imap_general.php 2022-05-22 20:32:06 UTC (rev 14957) +++ branches/SM-1_4-STABLE/squirrelmail/functions/imap_general.php 2022-05-22 22:15:28 UTC (rev 14958) @@ -568,6 +568,11 @@ $read=sqimap_fgets($imap_stream); } } + // IMAP server might return some untagged info before + // the tagged login command response - skip over that + while ($read[0] === '*') { + $read = sqimap_fgets($imap_stream); + } $results=explode(" ",$read,3); $response=$results[1]; $message=$results[2]; @@ -618,7 +623,7 @@ * credentials and use that as the authorization identity. */ $tag=sqimap_session_id(false); - $sasl = (isset($sqimap_capabilities['SASL-IR']) && $sqimap_capabilities['SASL-IR']) ? true : false; + $sasl = sqimap_capability($imap_stream, 'SASL-IR'); if(!empty($authz)) { $auth = base64_encode("$username\0$authz\0$password"); } else { @@ -639,6 +644,11 @@ $read = sqimap_fgets($imap_stream); } } + // IMAP server might return some untagged info before + // the tagged login command response - skip over that + while ($read[0] === '*') { + $read = sqimap_fgets($imap_stream); + } $results=explode(" ",$read,3); $response=$results[1]; $message=$results[2]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-22 20:32:09
|
Revision: 14957 http://sourceforge.net/p/squirrelmail/code/14957 Author: pdontthink Date: 2022-05-22 20:32:06 +0000 (Sun, 22 May 2022) Log Message: ----------- Add option to folder prefs for marking deleted messages as read Modified Paths: -------------- trunk/squirrelmail/functions/imap_messages.php trunk/squirrelmail/include/load_prefs.php trunk/squirrelmail/include/options/folder.php Modified: trunk/squirrelmail/functions/imap_messages.php =================================================================== --- trunk/squirrelmail/functions/imap_messages.php 2022-05-22 20:16:41 UTC (rev 14956) +++ trunk/squirrelmail/functions/imap_messages.php 2022-05-22 20:32:06 UTC (rev 14957) @@ -68,7 +68,9 @@ */ function sqimap_msgs_list_delete($imap_stream, $mailbox, $id, $bypass_trash=false) { // FIXME: Remove globals by introducing an associative array with properties as 4th argument as replacement for the $bypass_trash variable. - global $move_to_trash, $trash_folder; + global $move_to_trash, $trash_folder, $mark_as_read_upon_delete; + if ($mark_as_read_upon_delete) + sqimap_toggle_flag($imap_stream, $id, '\\Seen', true, true); if (($move_to_trash == true) && ($bypass_trash != true) && (sqimap_mailbox_exists($imap_stream, $trash_folder) && ($mailbox != $trash_folder)) ) { /** Modified: trunk/squirrelmail/include/load_prefs.php =================================================================== --- trunk/squirrelmail/include/load_prefs.php 2022-05-22 20:16:41 UTC (rev 14956) +++ trunk/squirrelmail/include/load_prefs.php 2022-05-22 20:32:06 UTC (rev 14957) @@ -78,6 +78,9 @@ $save_as_draft = getPref($data_dir, $username, 'save_as_draft', $default_save_as_draft); +$mark_as_read_upon_delete = + getPref($data_dir, $username, 'mark_as_read_upon_delete', FALSE); + if ($default_unseen_type == '') { $default_unseen_type = 1; } Modified: trunk/squirrelmail/include/options/folder.php =================================================================== --- trunk/squirrelmail/include/options/folder.php 2022-05-22 20:16:41 UTC (rev 14956) +++ trunk/squirrelmail/include/options/folder.php 2022-05-22 20:32:06 UTC (rev 14957) @@ -105,6 +105,14 @@ ); $optvals[SMOPT_GRP_SPCFOLDER][] = array( + 'name' => 'mark_as_read_upon_delete', + 'caption' => _("Mark Deleted Messages as Read"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); + +//TODO: Arguably, this should go in Compose preferences, not here + $optvals[SMOPT_GRP_SPCFOLDER][] = array( 'name' => 'save_reply_with_orig', 'caption' => _("Save Replies with Original Message"), 'type' => SMOPT_TYPE_BOOLEAN, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-22 20:16:44
|
Revision: 14956 http://sourceforge.net/p/squirrelmail/code/14956 Author: pdontthink Date: 2022-05-22 20:16:41 +0000 (Sun, 22 May 2022) Log Message: ----------- Add option to folder prefs for marking deleted messages as read Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/imap_messages.php branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php branches/SM-1_4-STABLE/squirrelmail/include/options/folder.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/imap_messages.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/imap_messages.php 2022-05-22 18:57:29 UTC (rev 14955) +++ branches/SM-1_4-STABLE/squirrelmail/functions/imap_messages.php 2022-05-22 20:16:41 UTC (rev 14956) @@ -71,8 +71,10 @@ * */ function sqimap_msgs_list_delete($imap_stream, $mailbox, $id) { - global $move_to_trash, $trash_folder, $uid_support; + global $move_to_trash, $trash_folder, $uid_support, $mark_as_read_upon_delete; $msgs_id = sqimap_message_list_squisher($id); + if ($mark_as_read_upon_delete) + sqimap_toggle_flag($imap_stream, $id, '\\Seen', true, true); if (($move_to_trash == true) && (sqimap_mailbox_exists($imap_stream, $trash_folder) && ($mailbox != $trash_folder))) { /** * turn off internal error handling (third argument = false) and Modified: branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php 2022-05-22 18:57:29 UTC (rev 14955) +++ branches/SM-1_4-STABLE/squirrelmail/include/load_prefs.php 2022-05-22 20:16:41 UTC (rev 14956) @@ -87,6 +87,9 @@ $save_as_draft = getPref($data_dir, $username, 'save_as_draft', $default_save_as_draft); +$mark_as_read_upon_delete = + getPref($data_dir, $username, 'mark_as_read_upon_delete', FALSE); + if ($default_unseen_type == '') { $default_unseen_type = 1; } @@ -130,7 +133,6 @@ $show_num = getPref($data_dir, $username, 'show_num', 15 ); -$wrap_at = getPref( $data_dir, $username, 'wrap_at', 86 ); if ($wrap_at < 15) { $wrap_at = 15; } $left_size = getPref($data_dir, $username, 'left_size'); Modified: branches/SM-1_4-STABLE/squirrelmail/include/options/folder.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/include/options/folder.php 2022-05-22 18:57:29 UTC (rev 14955) +++ branches/SM-1_4-STABLE/squirrelmail/include/options/folder.php 2022-05-22 20:16:41 UTC (rev 14956) @@ -97,6 +97,12 @@ 'posvals' => $sent_folder_values, 'save' => 'save_option_sent_folder' ); + $optvals[SMOPT_GRP_SPCFOLDER][] = array( + 'name' => 'mark_as_read_upon_delete', + 'caption' => _("Mark Deleted Messages as Read"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_NONE + ); /*** Load the General Options into the array ***/ $optgrps[SMOPT_GRP_FOLDERLIST] = _("Folder List Options"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2022-05-22 18:57:30
|
Revision: 14955 http://sourceforge.net/p/squirrelmail/code/14955 Author: pdontthink Date: 2022-05-22 18:57:29 +0000 (Sun, 22 May 2022) Log Message: ----------- Correct global config name Modified Paths: -------------- branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php Modified: branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php =================================================================== --- branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php 2022-05-22 18:55:29 UTC (rev 14954) +++ branches/SM-1_4-STABLE/squirrelmail/functions/db_prefs.php 2022-05-22 18:57:29 UTC (rev 14955) @@ -35,17 +35,17 @@ * internal database information from being * exposed. This should be enabled only for * debugging purposes. - * string $identifier_quote_char By default, SquirrelMail will quote - * table and field names in database - * queries with what it thinks is the - * appropriate quote character for the - * database type being used (backtick - * for MySQL (and thus MariaDB), double - * quotes for all others), but you can - * override the character used by - * putting it here, or tell SquirrelMail - * NOT to quote identifiers by setting - * this to "none" + * string $db_identifier_quote_char By default, SquirrelMail will quote + * table and field names in database + * queries with what it thinks is the + * appropriate quote character for the + * database type being used (backtick + * for MySQL (and thus MariaDB), double + * quotes for all others), but you can + * override the character used by + * putting it here, or tell SquirrelMail + * NOT to quote identifiers by setting + * this to "none" * * @copyright 1999-2022 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License @@ -170,7 +170,7 @@ } function open() { - global $prefs_dsn, $prefs_table, $use_pdo, $identifier_quote_char; + global $prefs_dsn, $prefs_table, $use_pdo, $db_identifier_quote_char; global $prefs_user_field, $prefs_key_field, $prefs_val_field; if(isset($this->dbh)) { @@ -184,15 +184,15 @@ } // figure out identifier quoting - if (empty($identifier_quote_char)) { + if (empty($db_identifier_quote_char)) { if ($this->db_type == SMDB_MYSQL) $this->identifier_quote_char = '`'; else $this->identifier_quote_char = '"'; - } else if ($identifier_quote_char === 'none') + } else if ($db_identifier_quote_char === 'none') $this->identifier_quote_char = ''; else - $this->identifier_quote_char = $identifier_quote_char; + $this->identifier_quote_char = $db_identifier_quote_char; if (!empty($prefs_table)) { $this->table = $prefs_table; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |