rpms/squirrelmail/F-10 squirrelmail-1.4.19-csrf.patch, NONE, 1.1 squirrelmail.spec, 1.65, 1.66
Michal Hlavinka
mhlavink at fedoraproject.org
Mon Aug 17 08:56:34 UTC 2009
Author: mhlavink
Update of /cvs/extras/rpms/squirrelmail/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv30575
Modified Files:
squirrelmail.spec
Added Files:
squirrelmail-1.4.19-csrf.patch
Log Message:
fix #517312 - CSRF issues in all forms (SA34627)
squirrelmail-1.4.19-csrf.patch:
config/conf.pl | 79 ++++++++++++++++-
doc/ChangeLog | 3
functions/auth.php | 49 ++++++++++-
functions/forms.php | 30 ++++++
functions/mailbox_display.php | 1
functions/strings.php | 181 +++++++++++++++++++++++++++++++++++++++++
src/addrbook_search_html.php | 4
src/addressbook.php | 14 ++-
src/compose.php | 34 +++++++
src/folders.php | 8 -
src/folders_create.php | 6 +
src/folders_delete.php | 8 +
src/folders_rename_do.php | 6 +
src/folders_rename_getname.php | 2
src/folders_subscribe.php | 6 +
src/move_messages.php | 6 +
src/options.php | 11 ++
src/options_highlight.php | 14 ++-
src/options_identities.php | 14 ++-
src/options_order.php | 13 ++
src/search.php | 13 ++
src/vcard.php | 3
22 files changed, 472 insertions(+), 33 deletions(-)
--- NEW FILE squirrelmail-1.4.19-csrf.patch ---
diff -up squirrelmail-1.4.19/config/conf.pl.scrf squirrelmail-1.4.19/config/conf.pl
--- squirrelmail-1.4.19/config/conf.pl.scrf 2009-04-13 18:52:57.000000000 +0200
+++ squirrelmail-1.4.19/config/conf.pl 2009-08-17 09:53:22.671454970 +0200
@@ -346,15 +346,19 @@ if ( !$sendmail_args && $sendmail_path =
}
# Added in 1.4.11
-$smtp_sitewide_user = '' if ( !$smtp_sitewide_user );
-$smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass );
+$smtp_sitewide_user = '' if ( !$smtp_sitewide_user );
+$smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass );
# Added in 1.4.9
$abook_global_file_listing = 'true' if ( !$abook_global_file_listing );
$abook_file_line_length = 2048 if ( !$abook_file_line_length );
# Added in 1.4.16
-$only_secure_cookies = 'true' if ( !$only_secure_cookies );
+$only_secure_cookies = 'true' if ( !$only_secure_cookies );
+
+# Added in 1.4.20RC1
+$disable_security_tokens = 'false' if ( !$disable_security_tokens );
+$check_referrer = '' if ( !$check_referrer );
if ( $ARGV[0] eq '--install-plugin' ) {
print "Activating plugin " . $ARGV[1] . "\n";
@@ -549,6 +553,8 @@ while ( ( $command ne "q" ) && ( $comman
print "14. PHP session name : $WHT$session_name$NRM\n";
print "15. Location base : $WHT$config_location_base$NRM\n";
print "16. Only secure cookies if poss. : $WHT$only_secure_cookies$NRM\n";
+ print "17. Disable secure forms : $WHT$disable_security_tokens$NRM\n";
+ print "18. Page referal requirement : $WHT$check_referrer$NRM\n";
print "\n";
print "R Return to Main Menu\n";
} elsif ( $menu == 5 ) {
@@ -766,6 +772,8 @@ while ( ( $command ne "q" ) && ( $comman
elsif ( $command == 14 ) { $session_name = command314(); }
elsif ( $command == 15 ) { $config_location_base = command_config_location_base(); }
elsif ( $command == 16 ) { $only_secure_cookies = command316(); }
+ elsif ( $command == 17 ) { $disable_security_tokens = command317(); }
+ elsif ( $command == 18 ) { $check_referrer = command318(); }
} elsif ( $menu == 5 ) {
if ( $command == 1 ) { command41(); }
elsif ( $command == 2 ) { $theme_css = command42(); }
@@ -2455,6 +2463,63 @@ sub command316 {
+# disable_security_tokens (since 1.4.20RC1)
+sub command317 {
+ print "This option allows you to turn off the security checks in the forms\n";
+ print "that SquirrelMail generates. It is NOT RECOMMENDED that you disable\n";
+ print "this feature - otherwise, your users may be exposed to phishing and\n";
+ print "other attacks.\n";
+ print "Unless you know what you are doing, you should leave this set to \"NO\".\n";
+ print "\n";
+
+ if ( lc($disable_security_tokens) eq 'true' ) {
+ $default_value = "y";
+ } else {
+ $default_value = "n";
+ }
+ print "Disable secure forms? (y/n) [$WHT$default_value$NRM]: $WHT";
+ $disable_security_tokens = <STDIN>;
+ if ( ( $disable_security_tokens =~ /^y\n/i ) || ( ( $disable_security_tokens =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+ $disable_security_tokens = 'true';
+ } else {
+ $disable_security_tokens = 'false';
+ }
+ return $disable_security_tokens;
+}
+
+
+
+# check_referrer (since 1.4.20RC1)
+sub command318 {
+ print "This option allows you to enable referal checks for all page requests\n";
+ print "made to SquirrelMail. This can help ensure that page requests came\n";
+ print "from the same server and not from an attacker's site (usually the\n";
+ print "result of a XSS or phishing attack). To enable referal checking,\n";
+ print "this setting can be set to the domain where your SquirrelMail is\n";
+ print "being hosted (usually the same as the Domain setting under Server\n";
+ print "Settings). For example, it could be \"example.com\", or if you\n";
+ print "use a plugin (such as Login Manager) to host SquirrelMail on more\n";
+ print "than one domain, you can set this to \"###DOMAIN###\" to tell it\n";
+ print "to use the current domain.\n";
+ print "\n";
+ print "However, in some cases (where proxy servers are in use, etc.), the\n";
+ print "domain might be different.\n";
+ print "\n";
+ print "NOTE that referal checks are not foolproof - they can be spoofed by\n";
+ print "browsers, and some browsers intentionally don't send referal\n";
+ print "information (in which case, the check is silently bypassed)\n";
+ print "\n";
+
+ print "Referal requirement? [$WHT$check_referrer$NRM]: $WHT";
+ $new_check_referrer = <STDIN>;
+ chomp($new_check_referrer);
+ $check_referrer = $new_check_referrer;
+
+ return $check_referrer;
+}
+
+
+
####################################################################################
#### THEMES ####
sub command41 {
@@ -3502,10 +3567,14 @@ sub save_data {
print CF "\$session_name = '$session_name';\n";
# boolean
- print CF "\$only_secure_cookies = $only_secure_cookies;\n";
+ print CF "\$only_secure_cookies = $only_secure_cookies;\n";
+ print CF "\$disable_security_tokens = $disable_security_tokens;\n";
+
+ # string
+ print CF "\$check_referrer = '$check_referrer';\n";
print CF "\n";
- print CF "\$config_location_base = '$config_location_base';\n";
+ print CF "\$config_location_base = '$config_location_base';\n";
print CF "\n";
print CF "\@include SM_PATH . 'config/config_local.php';\n";
diff -U0 squirrelmail-1.4.19/doc/ChangeLog.scrf squirrelmail-1.4.19/doc/ChangeLog
--- squirrelmail-1.4.19/doc/ChangeLog.scrf 2009-05-21 19:19:09.000000000 +0200
+++ squirrelmail-1.4.19/doc/ChangeLog 2009-08-17 09:53:30.039237290 +0200
@@ -4,0 +5,3 @@
+ - Implemented page referal verification mechanism. (Secunia Advisory SA34627)
+ - Implemented security token system. (Secunia Advisory SA34627)
+
diff -up squirrelmail-1.4.19/functions/auth.php.scrf squirrelmail-1.4.19/functions/auth.php
--- squirrelmail-1.4.19/functions/auth.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/functions/auth.php 2009-08-17 09:53:22.673549603 +0200
@@ -33,21 +33,56 @@ if (! isset($use_smtp_tls)) {
* Check if user has previously logged in to the SquirrelMail session. If user
* has not logged in, execution will stop inside this function.
*
+ * This function optionally checks the referrer of this page request. If the
+ * administrator wants to impose a check that the referrer of this page request
+ * is another page on the same domain (otherwise, the page request is likely
+ * the result of a XSS or phishing attack), then they need to specify the
+ * acceptable referrer domain in a variable named $check_referrer in
+ * config/config.php (or the configuration tool) for which the value is
+ * usually the same as the $domain setting (for example:
+ * $check_referrer = 'example.com';
+ * However, in some cases (where proxy servers are in use, etc.), the
+ * acceptable referrer might be different. If $check_referrer is set to
+ * "###DOMAIN###", then the current value of $domain is used (useful in
+ * situations where $domain might change at runtime (when using the Login
+ * Manager plugin to host multiple domains with one SquirrelMail installation,
+ * for example)):
+ * $check_referrer = '###DOMAIN###';
+ * NOTE HOWEVER, that referrer checks are not foolproof - they can be spoofed
+ * by browsers, and some browsers intentionally don't send them, in which
+ * case SquirrelMail silently ignores referrer checks.
+ *
* @return void This function returns ONLY if user has previously logged in
* successfully (otherwise, execution terminates herein).
*/
function is_logged_in() {
- if ( sqsession_is_registered('user_is_logged_in') ) {
+ // check for user login as well as referrer if needed
+ //
+ global $check_referrer, $domain;
+ if ($check_referrer == '###DOMAIN###') $check_referrer = $domain;
+ if (!empty($check_referrer)) {
+ $ssl_check_referrer = 'https://' . $check_referrer;
+ $check_referrer = 'http://' . $check_referrer;
+ }
+ if (!sqgetGlobalVar('HTTP_REFERER', $referrer, SQ_SERVER)) $referrer = '';
+ if (sqsession_is_registered('user_is_logged_in')
+ && (!$check_referrer || empty($referrer)
+ || ($check_referrer && !empty($referrer)
+ && (strpos(strtolower($referrer), strtolower($check_referrer)) === 0
+ || strpos(strtolower($referrer), strtolower($ssl_check_referrer)) === 0)))) {
return;
} else {
+
global $session_expired_post,
$session_expired_location, $squirrelmail_language;
// use $message to indicate what logout text the user
// will see... if 0, typical "You must be logged in"
// if 1, information that the user session was saved
- // and will be resumed after (re)login
+ // and will be resumed after (re)login, if 2, there
+ // seems to have been a XSS or phishing attack (bad
+ // referrer)
//
$message = 0;
@@ -67,6 +102,12 @@ function is_logged_in() {
$message = 1;
}
+ // was bad referrer the reason we were rejected?
+ //
+ if (sqsession_is_registered('user_is_logged_in')
+ && $check_referrer && !empty($referrer))
+ $message = 2;
+
session_write_close();
// signout page will deal with users who aren't logged
@@ -79,8 +120,10 @@ function is_logged_in() {
set_up_language($squirrelmail_language, true);
if (!$message)
logout_error( _("You must be logged in to access this page.") );
- else
+ else if ($message == 1)
logout_error( _("Your session has expired, but will be resumed after logging in again.") );
+ else if ($message == 2)
+ logout_error( _("The current page request appears to have originated from an unrecognized source.") );
exit;
}
}
diff -up squirrelmail-1.4.19/functions/forms.php.scrf squirrelmail-1.4.19/functions/forms.php
--- squirrelmail-1.4.19/functions/forms.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/functions/forms.php 2009-08-17 09:53:22.673549603 +0200
@@ -130,8 +130,24 @@ function addTextArea($name, $text = '',
/**
* Make a <form> start-tag.
+ *
+ * @param string $action
+ * @param string $method
+ * @param string $name
+ * @param string $enctype
+ * @param string $charset
+ * @param string $extra Any other attributes can be added with this parameter;
+ * they should use double quotes around attribute values
+ * (OPTIONAL; default empty)
+ * @param mixed $add_token When given as a string or as boolean TRUE, a hidden
+ * input is also added to the form containing a security
+ * token. When given as TRUE, the input name is "smtoken";
+ * otherwise the name is the string that is given for this
+ * parameter. When FALSE, no hidden token input field is
+ * added. (OPTIONAL; default not used)
+ *
*/
-function addForm($action, $method = 'post', $name = '', $enctype = '', $charset = '')
+function addForm($action, $method = 'post', $name = '', $enctype = '', $charset = '', $extra = '', $add_token = FALSE)
{
if($name) {
$name = ' name="'.$name.'"';
@@ -143,7 +159,15 @@ function addForm($action, $method = 'pos
$charset = ' accept-charset="'.htmlspecialchars($charset).'"';
}
- return '<form action="'. $action .'" method="'. $method .'"'.
- $enctype . $name . $charset . ">\n";
+ $form_string = '<form action="'. $action .'" method="'. $method .'"'.
+ $enctype . $name . $charset . ' ' . $extra . " >\n";
+
+ if($add_token) {
+ $form_string .= '<input type="hidden" value="' . sm_generate_security_token()
+ . '" name="' . (is_string($add_token) ? $add_token : 'smtoken')
+ . "\" />\n";
+ }
+
+ return $form_string;
}
diff -up squirrelmail-1.4.19/functions/mailbox_display.php.scrf squirrelmail-1.4.19/functions/mailbox_display.php
--- squirrelmail-1.4.19/functions/mailbox_display.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/functions/mailbox_display.php 2009-08-17 09:53:22.673549603 +0200
@@ -513,6 +513,7 @@ function showMessagesForMailbox($imapCon
$safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
$form_name = "FormMsgs" . $safe_name;
echo '<form name="' . $form_name . '" method="post" action="move_messages.php">' ."\n" .
+ '<input type="hidden" name="smtoken" value="'.sm_generate_security_token().'">' . "\n" .
'<input type="hidden" name="mailbox" value="'.htmlspecialchars($mailbox).'">' . "\n" .
'<input type="hidden" name="startMessage" value="'.htmlspecialchars($start_msg).'">' . "\n";
diff -up squirrelmail-1.4.19/functions/strings.php.scrf squirrelmail-1.4.19/functions/strings.php
--- squirrelmail-1.4.19/functions/strings.php.scrf 2009-05-21 19:19:09.000000000 +0200
+++ squirrelmail-1.4.19/functions/strings.php 2009-08-17 09:53:22.672234055 +0200
@@ -879,5 +879,186 @@ function sq_trim_value ( &$value ) {
$value = trim($value);
}
+/**
+ * Gathers the list of secuirty tokens currently
+ * stored in the user's preferences and optionally
+ * purges old ones from the list.
+ *
+ * @param boolean $purge_old Indicates if old tokens
+ * should be purged from the
+ * list ("old" is 30 days or
+ * older unless the administrator
+ * overrides that value using
+ * $max_security_token_age in
+ * config/config_local.php)
+ * (OPTIONAL; default is to always
+ * purge old tokens)
+ *
+ * @return array The list of tokens
+ *
+ * @since 1.4.19 and 1.5.2
+ *
+ */
+function sm_get_user_security_tokens($purge_old=TRUE)
+{
+
+ global $data_dir, $username, $max_token_age_days;
+
+ $tokens = getPref($data_dir, $username, 'security_tokens', '');
+ if (($tokens = unserialize($tokens)) === FALSE || !is_array($tokens))
+ $tokens = array();
+
+ // purge old tokens if necessary
+ //
+ if ($purge_old)
+ {
+ if (empty($max_token_age_days)) $max_token_age_days = 30;
+ $now = time();
+ $discard_token_date = $now - ($max_token_age_days * 86400);
+ $cleaned_tokens = array();
+ foreach ($tokens as $token => $timestamp)
+ if ($timestamp >= $discard_token_date)
+ $cleaned_tokens[$token] = $timestamp;
+ $tokens = $cleaned_tokens;
+ }
+
+ return $tokens;
+
+}
+
+/**
+ * Generates a security token that is then stored in
+ * the user's preferences with a timestamp for later
+ * verification/use.
+ *
+ * WARNING: If the administrator has turned the token system
+ * off by setting $disable_security_tokens to TRUE in
+ * config/config.php or the configuration tool, this
+ * function will not store tokens in the user
+ * preferences (but it will still generate and return
+ * a random string).
+ *
+ * @return void
+ *
+ * @since 1.4.19 and 1.5.2
+ *
+ */
+function sm_generate_security_token()
+{
+
+ global $data_dir, $username, $disable_security_tokens;
+ $max_generation_tries = 1000;
+
+ $tokens = sm_get_user_security_tokens();
+
+ $new_token = GenerateRandomString(12, '', 7);
+ $count = 0;
+ while (isset($tokens[$new_token]))
+ {
+ $new_token = GenerateRandomString(12, '', 7);
+ if (++$count > $max_generation_tries)
+ {
+ logout_error(_("Fatal token generation error; please contact your system administrator or the SquirrelMail Team"));
+ exit;
+ }
+ }
+
+ // is the token system enabled? CAREFUL!
+ //
+ if (!$disable_security_tokens)
+ {
+ $tokens[$new_token] = time();
+ setPref($data_dir, $username, 'security_tokens', serialize($tokens));
+ }
+
+ return $new_token;
+
+}
+
+/**
+ * Validates a given security token and optionally remove it
+ * from the user's preferences if it was valid. If the token
+ * is too old but otherwise valid, it will still be rejected.
+ *
+ * "Too old" is 30 days or older unless the administrator
+ * overrides that value using $max_security_token_age in
+ * config/config_local.php
+ *
+ * WARNING: If the administrator has turned the token system
+ * off by setting $disable_security_tokens to TRUE in
+ * config/config.php or the configuration tool, this
+ * function will always return TRUE.
+ *
+ * @param string $token The token to validate
+ * @param int $validity_period The number of seconds tokens are valid
+ * for (set to zero to remove valid tokens
+ * after only one use; use 3600 to allow
+ * tokens to be reused for an hour)
+ * (OPTIONAL; default is to only allow tokens
+ * to be used once)
+ * @param boolean $show_error Indicates that if the token is not
+ * valid, this function should display
+ * a generic error, log the user out
+ * and exit - this function will never
+ * return in that case.
+ * (OPTIONAL; default FALSE)
+ *
+ * @return boolean TRUE if the token validated; FALSE otherwise
+ *
+ * @since 1.4.19 and 1.5.2
+ *
+ */
+function sm_validate_security_token($token, $validity_period=0, $show_error=FALSE)
+{
+
+ global $data_dir, $username, $max_token_age_days,
+ $disable_security_tokens;
+
+ // bypass token validation? CAREFUL!
+ //
+ if ($disable_security_tokens) return TRUE;
+
+ // don't purge old tokens here because we already
+ // do it when generating tokens
+ //
+ $tokens = sm_get_user_security_tokens(FALSE);
+
+ // token not found?
+ //
+ if (empty($tokens[$token]))
+ {
+ if (!$show_error) return FALSE;
+ logout_error(_("This page request could not be verified and appears to have expired."));
+ exit;
+ }
+
+ $now = time();
+ $timestamp = $tokens[$token];
+
+ // whether valid or not, we want to remove it from
+ // user prefs if it's old enough
+ //
+ if ($timestamp < $now - $validity_period)
+ {
+ unset($tokens[$token]);
+ setPref($data_dir, $username, 'security_tokens', serialize($tokens));
+ }
+
+ // reject tokens that are too old
+ //
+ if (empty($max_token_age_days)) $max_token_age_days = 30;
+ $old_token_date = $now - ($max_token_age_days * 86400);
+ if ($timestamp < $old_token_date)
+ {
+ if (!$show_error) return FALSE;
+ logout_error(_("The current page request appears to have originated from an untrusted source."));
+ exit;
+ }
+
+ // token OK!
+ //
+ return TRUE;
+
+}
$PHP_SELF = php_self();
diff -up squirrelmail-1.4.19/src/addrbook_search_html.php.scrf squirrelmail-1.4.19/src/addrbook_search_html.php
--- squirrelmail-1.4.19/src/addrbook_search_html.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/addrbook_search_html.php 2009-08-17 09:53:22.665180003 +0200
@@ -83,7 +83,7 @@ function addr_display_result($res, $incl
if (sizeof($res) <= 0) return;
- echo addForm($PHP_SELF, 'POST', 'addrbook').
+ echo addForm($PHP_SELF, 'POST', 'addrbook', '', '', '', TRUE).
addHidden('html_addr_search_done', 'true');
addr_insert_hidden();
$line = 0;
@@ -308,7 +308,7 @@ else {
if ($addrquery == '' || sizeof($res) == 0) {
/* printf('<center><form method="post" name="k" action="compose.php">'."\n", $PHP_SELF); */
echo '<center>'.
- addForm('compose.php','POST','k');
+ addForm('compose.php','POST','k', '', '', '', TRUE);
addr_insert_hidden();
echo '<input type="submit" value="' . _("Return") . '" name="return" />' . "\n" .
'</form></center></nobr>';
diff -up squirrelmail-1.4.19/src/addressbook.php.scrf squirrelmail-1.4.19/src/addressbook.php
--- squirrelmail-1.4.19/src/addressbook.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/addressbook.php 2009-08-17 09:53:22.666180572 +0200
@@ -31,6 +31,9 @@ require_once(SM_PATH . 'functions/html.p
require_once(SM_PATH . 'functions/forms.php');
/** lets get the global vars we may need */
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
sqgetGlobalVar('key', $key, SQ_COOKIE);
sqgetGlobalVar('username', $username, SQ_SESSION);
@@ -180,6 +183,9 @@ $form_url = 'addressbook.php';
/* Handle user's actions */
if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'POST') {
+ // first, validate security token
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
/**************************************************
* Add new address *
**************************************************/
@@ -313,7 +319,7 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req
$olddata = $abook->lookup($enick, $ebackend);
/* Display the "new address" form */
- echo addForm($form_url, 'post').
+ echo addForm($form_url, 'post', '', '', '', '', TRUE).
html_tag( 'table',
html_tag( 'tr',
html_tag( 'td',
@@ -345,7 +351,7 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req
'center', '', 'width="100%"' );
/* Display the "new address" form again */
- echo addForm($form_url, 'post').
+ echo addForm($form_url, 'post', '', '', '', '', TRUE).
html_tag( 'table',
html_tag( 'tr',
html_tag( 'td',
@@ -426,7 +432,7 @@ if ($showaddrlist) {
/* List addresses */
if (count($alist) > 0) {
- echo addForm($form_url, 'post', 'address_book_form');
+ echo addForm($form_url, 'post', 'address_book_form', '', '', '', TRUE);
if ($abook->add_extra_field) {
$abook_fields = 6;
} else {
@@ -573,7 +579,7 @@ if ($showaddrlist) {
/* Display the "new address" form */
echo '<a name="AddAddress"></a>' . "\n" .
- addForm($form_url, 'post', 'f_add').
+ addForm($form_url, 'post', 'f_add', '', '', '', TRUE).
html_tag( 'table',
html_tag( 'tr',
html_tag( 'td', "\n". '<strong>' . sprintf(_("Add to %s"), $abook->localbackendname) . '</strong>' . "\n",
diff -up squirrelmail-1.4.19/src/compose.php.scrf squirrelmail-1.4.19/src/compose.php
--- squirrelmail-1.4.19/src/compose.php.scrf 2009-08-17 09:53:22.577550465 +0200
+++ squirrelmail-1.4.19/src/compose.php 2009-08-17 09:53:22.668549664 +0200
@@ -67,6 +67,9 @@ if (isset($send) && $send) {
$SQ_GLOBAL = SQ_FORM;
}
sqgetGlobalVar('smaction',$action, $SQ_GLOBAL);
+if (!sqgetGlobalVar('smtoken',$submitted_token, $SQ_GLOBAL)) {
+ $submitted_token = '';
+}
sqgetGlobalVar('session',$session, $SQ_GLOBAL);
sqgetGlobalVar('mailbox',$mailbox, $SQ_GLOBAL);
if ( !sqgetGlobalVar('identity',$identity, $SQ_GLOBAL) ) {
@@ -377,6 +380,11 @@ if (!isset($mailbox) || $mailbox == '' |
}
if ($draft) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
/*
* Set $default_charset to correspond with the user's selection
* of language interface.
@@ -428,6 +436,11 @@ if ($draft) {
}
if ($send) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
if (isset($_FILES['attachfile']) &&
$_FILES['attachfile']['tmp_name'] &&
$_FILES['attachfile']['tmp_name'] != 'none') {
@@ -513,6 +526,11 @@ if ($send) {
/* sqimap_logout($imapConnection); */
}
} elseif (isset($html_addr_search_done)) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
if ($compose_new_win == '1') {
compose_Header($color, $mailbox);
}
@@ -557,6 +575,11 @@ if ($send) {
*/
include_once('./addrbook_search_html.php');
} elseif (isset($attach)) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
if (saveAttachedFiles($session)) {
plain_error_message(_("Could not move/copy file. File not attached"), $color);
}
@@ -568,6 +591,11 @@ if ($send) {
showInputForm($session);
}
elseif (isset($sigappend)) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
$signature = $idents[$identity]['signature'];
$body .= "\n\n".($prefix_sig==true? "-- \n":'').$signature;
@@ -578,6 +606,11 @@ elseif (isset($sigappend)) {
}
showInputForm($session);
} elseif (isset($do_delete)) {
+
+ // validate security token
+ //
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
if ($compose_new_win == '1') {
compose_Header($color, $mailbox);
} else {
@@ -1032,6 +1065,7 @@ function showInputForm ($session, $value
echo ">\n";
+ echo addHidden('smtoken', sm_generate_security_token());
echo addHidden('startMessage', $startMessage);
if ($action == 'draft') {
diff -up squirrelmail-1.4.19/src/folders_create.php.scrf squirrelmail-1.4.19/src/folders_create.php
--- squirrelmail-1.4.19/src/folders_create.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders_create.php 2009-08-17 09:53:22.669549523 +0200
@@ -37,8 +37,14 @@ sqgetGlobalVar('subfolder', $subfolde
if (! sqgetGlobalVar('contain_subs', $contain_subs, SQ_POST)) {
unset($contain_subs);
}
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end of get globals */
+// first, validate security token
+sm_validate_security_token($submitted_token, 3600, TRUE);
+
$folder_name = trim($folder_name);
if (substr_count($folder_name, '"') || substr_count($folder_name, "\\") ||
diff -up squirrelmail-1.4.19/src/folders_delete.php.scrf squirrelmail-1.4.19/src/folders_delete.php
--- squirrelmail-1.4.19/src/folders_delete.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders_delete.php 2009-08-17 09:53:22.669549523 +0200
@@ -41,6 +41,9 @@ sqgetGlobalVar('username', $username,
sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
sqgetGlobalVar('mailbox', $mailbox, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end globals */
if ($mailbox == '') {
@@ -76,7 +79,7 @@ if( !sqgetGlobalVar('confirmed', $tmp, S
html_tag( 'tr' ) .
html_tag( 'td', '', 'center', $color[4] ) .
sprintf(_("Are you sure you want to delete %s?"), str_replace(array(' ','<','>'),array(' ','<','>'),imap_utf7_decode_local($mailbox_unformatted_disp))).
- addForm('folders_delete.php', 'post')."<p>\n".
+ addForm('folders_delete.php', 'post', '', '', '', '', TRUE)."<p>\n".
addHidden('mailbox', $mailbox).
addSubmit(_("Yes"), 'confirmed').
addSubmit(_("No"), 'backingout').
@@ -85,6 +88,9 @@ if( !sqgetGlobalVar('confirmed', $tmp, S
exit;
}
+// first, validate security token
+sm_validate_security_token($submitted_token, 3600, TRUE);
+
$imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
$boxes = sqimap_mailbox_list ($imap_stream);
diff -up squirrelmail-1.4.19/src/folders.php.scrf squirrelmail-1.4.19/src/folders.php
--- squirrelmail-1.4.19/src/folders.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders.php 2009-08-17 09:53:22.665180003 +0200
@@ -103,7 +103,7 @@ echo html_tag( 'table', '', 'center', ''
) .
html_tag( 'tr' ) .
html_tag( 'td', '', 'center', $color[0] ) .
- addForm('folders_create.php', 'POST', 'cf').
+ addForm('folders_create.php', 'POST', 'cf', '', '', '', TRUE).
addInput('folder_name', '', 25).
"<br />\n". _("as a subfolder of"). '<br />'.
"<tt><select name=\"subfolder\">\n";
@@ -228,7 +228,7 @@ echo html_tag( 'table', '', 'center', ''
html_tag( 'td', '', 'center', $color[0], 'width="50%"' );
if (count($skip_folders) < count($boxes)) {
- echo addForm('folders_subscribe.php?method=unsub')
+ echo addForm('folders_subscribe.php?method=unsub', 'post', '', '', '', '', TRUE)
. "<tt><select name=\"mailbox[]\" multiple=\"multiple\" size=\"8\">\n";
for ($i = 0; $i < count($boxes); $i++) {
$use_folder = true;
@@ -273,7 +273,7 @@ if(!$no_list_for_subscribe) {
}
if (count($box) > 0) {
- echo addForm('folders_subscribe.php?method=sub')
+ echo addForm('folders_subscribe.php?method=sub', 'post', '', '', '', '', TRUE)
. '<tt><select name="mailbox[]" multiple="multiple" size="8">';
for ($q = 0; $q < count($box); $q++) {
@@ -288,7 +288,7 @@ if(!$no_list_for_subscribe) {
}
} else {
/* don't perform the list action -- this is much faster */
- echo addForm('folders_subscribe.php?method=sub')
+ echo addForm('folders_subscribe.php?method=sub', 'post', '', '', '', '', TRUE)
. _("Subscribe to:") . '<br />'
. '<tt><input type="text" name="mailbox[]" size="35" />'
. '<input type="submit" value="'. _("Subscribe") . "\" />\n"
diff -up squirrelmail-1.4.19/src/folders_rename_do.php.scrf squirrelmail-1.4.19/src/folders_rename_do.php
--- squirrelmail-1.4.19/src/folders_rename_do.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders_rename_do.php 2009-08-17 09:53:22.666180572 +0200
@@ -35,8 +35,14 @@ sqgetGlobalVar('onetimepad',$onetimepad,
sqgetGlobalVar('orig', $orig, SQ_POST);
sqgetGlobalVar('old_name', $old_name, SQ_POST);
sqgetGlobalVar('new_name', $new_name, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end globals */
+// first, validate security token
+sm_validate_security_token($submitted_token, 3600, TRUE);
+
$new_name = trim($new_name);
if (substr_count($new_name, '"') || substr_count($new_name, "\\") ||
diff -up squirrelmail-1.4.19/src/folders_rename_getname.php.scrf squirrelmail-1.4.19/src/folders_rename_getname.php
--- squirrelmail-1.4.19/src/folders_rename_getname.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders_rename_getname.php 2009-08-17 09:53:22.669549523 +0200
@@ -82,7 +82,7 @@ echo '<br />' .
) .
html_tag( 'tr' ) .
html_tag( 'td', '', 'center', $color[4] ) .
- addForm('folders_rename_do.php').
+ addForm('folders_rename_do.php', 'post', '', '', '', '', TRUE).
_("New name:").
'<br /><b>'. $parent . '</b>'.
addInput('new_name', $old_name, 25) . '<br />' . "\n";
diff -up squirrelmail-1.4.19/src/folders_subscribe.php.scrf squirrelmail-1.4.19/src/folders_subscribe.php
--- squirrelmail-1.4.19/src/folders_subscribe.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/folders_subscribe.php 2009-08-17 09:53:22.665180003 +0200
@@ -33,8 +33,14 @@ sqgetGlobalVar('username', $username,
sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
sqgetGlobalVar('method', $method, SQ_GET);
sqgetGlobalVar('mailbox', $mailbox, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end globals */
+// first, validate security token
+sm_validate_security_token($submitted_token, 3600, TRUE);
+
$location = get_location();
if (!isset($mailbox) || !isset($mailbox[0]) || $mailbox[0] == '') {
diff -up squirrelmail-1.4.19/src/move_messages.php.scrf squirrelmail-1.4.19/src/move_messages.php
--- squirrelmail-1.4.19/src/move_messages.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/move_messages.php 2009-08-17 09:53:22.667549648 +0200
@@ -138,8 +138,14 @@ sqgetGlobalVar('markUnread', $markU
sqgetGlobalVar('attache', $attache, SQ_POST);
sqgetGlobalVar('location', $location, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end of get globals */
+// security check
+sm_validate_security_token($submitted_token, 3600, TRUE);
+
$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
$mbx_response=sqimap_mailbox_select($imapConnection, $mailbox);
diff -up squirrelmail-1.4.19/src/options_highlight.php.scrf squirrelmail-1.4.19/src/options_highlight.php
--- squirrelmail-1.4.19/src/options_highlight.php.scrf 2009-05-03 14:33:46.000000000 +0200
+++ squirrelmail-1.4.19/src/options_highlight.php 2009-08-17 09:53:22.666180572 +0200
@@ -40,6 +40,9 @@ sqGetGlobalVar('color_type', $color_type
sqGetGlobalVar('match_type', $match_type);
sqGetGlobalVar('value', $value);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end of get globals */
function oh_opt( $val, $sel, $tit ) {
@@ -59,6 +62,10 @@ if (! isset($message_highlight_list)) {
if (isset($theid) && ($action == 'delete') ||
($action == 'up') ||
($action == 'down')) {
+
+ // security check
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
$new_rules = array();
switch($action) {
case('delete'):
@@ -93,6 +100,9 @@ if (isset($theid) && ($action == 'delete
exit;
} else if ($action == 'save') {
+ // security check
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
if ($color_type == 1) $newcolor = $newcolor_choose;
elseif ($color_type == 2) $newcolor = $newcolor_input;
else $newcolor = $color_type;
@@ -364,7 +374,7 @@ if ($action == 'edit' || $action == 'add
else if ($selected_choose == '')
$selected_input = TRUE;
- echo addForm('options_highlight.php', 'POST', 'f').
+ echo addForm('options_highlight.php', 'POST', 'f', '', '', '', TRUE).
addHidden('action', 'save');
if($action == 'edit') {
echo addHidden('theid', (isset($theid)?$theid:''));
@@ -469,4 +479,4 @@ if ($action == 'edit' || $action == 'add
}
do_hook('options_highlight_bottom');
?>
-</table></body></html>
\ No newline at end of file
+</table></body></html>
diff -up squirrelmail-1.4.19/src/options_identities.php.scrf squirrelmail-1.4.19/src/options_identities.php
--- squirrelmail-1.4.19/src/options_identities.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/options_identities.php 2009-08-17 09:53:22.666180572 +0200
@@ -27,6 +27,7 @@ require_once(SM_PATH . 'include/validate
include_once(SM_PATH . 'functions/global.php');
include_once(SM_PATH . 'functions/display_messages.php');
include_once(SM_PATH . 'functions/html.php');
+include_once(SM_PATH . 'functions/forms.php');
include_once(SM_PATH . 'functions/identity.php');
/* make sure that page is not available when $edit_identity is false */
@@ -42,9 +43,16 @@ sqgetGlobalVar('newidentities', $newiden
sqgetGlobalVar('smaction', $smaction, SQ_POST);
sqgetGlobalVar('return', $return, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
+
// First lets see if there are any actions to perform //
if (!empty($smaction) && is_array($smaction)) {
+ // first do a security check
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
$doaction = '';
$identid = 0;
@@ -72,9 +80,9 @@ displayPageHeader($color, 'None');
do_hook('options_identities_top');
-$td_str = '';
-$td_str .= '<form name="f" action="options_identities.php" method="post"><br />' . "\n";
-$td_str .= '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n";
+$td_str = '<form name="f" action="options_identities.php" method="post"><br />' . "\n"
+ . addHidden('smtoken', sm_generate_security_token()) . "\n"
+ . '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n";
$cnt = count($identities);
foreach( $identities as $iKey=>$ident ) {
diff -up squirrelmail-1.4.19/src/options_order.php.scrf squirrelmail-1.4.19/src/options_order.php
--- squirrelmail-1.4.19/src/options_order.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/options_order.php 2009-08-17 09:53:26.573299584 +0200
@@ -28,6 +28,7 @@ require_once(SM_PATH . 'functions/displa
require_once(SM_PATH . 'functions/imap.php');
require_once(SM_PATH . 'functions/plugin.php');
require_once(SM_PATH . 'functions/html.php');
+require_once(SM_PATH . 'functions/forms.php');
/* get globals */
sqgetGlobalVar('num', $num, SQ_GET);
@@ -35,6 +36,9 @@ sqgetGlobalVar('add', $add,
sqgetGlobalVar('submit', $submit);
sqgetGlobalVar('method', $method);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end of get globals */
displayPageHeader($color, 'None');
@@ -83,6 +87,10 @@ displayPageHeader($color, 'None');
include_once(SM_PATH . 'include/load_prefs.php');
}
} else if ($method == 'add' && $add) {
+
+ // first do a security check
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+
/* User should not be able to insert PHP-code here */
$add = str_replace ('<?', '..', $add);
$add = ereg_replace ('<.*script.*language.*php.*>', '..', $add);
@@ -128,8 +136,9 @@ displayPageHeader($color, 'None');
}
if (count($index_order) != count($available)) {
- echo '<form name="f" method="post" action="options_order.php">';
- echo '<select name="add">';
+ echo '<form name="f" method="post" action="options_order.php">' . "\n"
+ . addHidden('smtoken', sm_generate_security_token())
+ . '<select name="add">' . "\n";
for ($i=1; $i <= count($available); $i++) {
$found = false;
for ($j=1; $j <= count($index_order); $j++) {
diff -up squirrelmail-1.4.19/src/options.php.scrf squirrelmail-1.4.19/src/options.php
--- squirrelmail-1.4.19/src/options.php.scrf 2009-05-15 17:09:55.000000000 +0200
+++ squirrelmail-1.4.19/src/options.php 2009-08-17 09:53:22.667549648 +0200
@@ -143,6 +143,9 @@ sqgetGlobalVar('delimiter', $delimiter,
sqgetGlobalVar('optpage', $optpage);
sqgetGlobalVar('optmode', $optmode, SQ_FORM);
sqgetGlobalVar('optpage_data',$optpage_data, SQ_POST);
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_POST)) {
+ $submitted_token = '';
+}
/* end of getting globals */
/* Make sure we have an Option Page set. Default to main. */
@@ -226,6 +229,12 @@ if ( !@is_file( $optpage_file ) ) {
/*** Next, process anything that needs to be processed. ***/
/***********************************************************/
+// security check before saving anything...
+//FIXME: what about SMOPT_MODE_LINK??
+if ($optmode == SMOPT_MODE_SUBMIT) {
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+}
+
// set empty error message
$optpage_save_error=array();
@@ -426,7 +435,7 @@ if ($optpage == SMOPT_PAGE_MAIN) {
/* If we are not looking at the main option page, display the page here. */
/*************************************************************************/
} else {
- echo addForm('options.php', 'POST', 'f')
+ echo addForm('options.php', 'POST', 'f', '', '', '', TRUE)
. create_optpage_element($optpage)
. create_optmode_element(SMOPT_MODE_SUBMIT)
. html_tag( 'table', '', '', '', 'width="100%" cellpadding="2" cellspacing="0" border="0"' ) . "\n"
diff -up squirrelmail-1.4.19/src/search.php.scrf squirrelmail-1.4.19/src/search.php
--- squirrelmail-1.4.19/src/search.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/search.php 2009-08-17 09:53:22.666180572 +0200
@@ -28,6 +28,7 @@ require_once(SM_PATH . 'functions/imap.p
require_once(SM_PATH . 'functions/imap_search.php');
require_once(SM_PATH . 'functions/imap_mailbox.php');
require_once(SM_PATH . 'functions/strings.php');
+require_once(SM_PATH . 'functions/forms.php');
global $allow_thread_sort;
@@ -67,6 +68,9 @@ if (sqgetGlobalVar('count',$count,SQ_GET
} else {
unset($count);
}
+if (!sqgetGlobalVar('smtoken',$submitted_token, SQ_GET)) {
+ $submitted_token = '';
+}
/* end of get globals */
/* here are some functions, could go in imap_search.php
@@ -240,7 +244,8 @@ function printSearchMessages($msgs,$mail
$form_name = "FormMsgs" . $safe_name;
echo '<form name="' . $form_name . '" method="post" action="move_messages.php">' ."\n" .
'<input type="hidden" name="mailbox" value="'.htmlspecialchars($mailbox).'">' . "\n" .
- '<input type="hidden" name="startMessage" value="1">' . "\n";
+ '<input type="hidden" name="startMessage" value="1">' . "\n" .
+ addHidden('smtoken', sm_generate_security_token()) . "\n";
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
echo '<tr><td>';
@@ -301,6 +306,11 @@ if (empty($submit) && !empty($what)) {
$submit = _("Search");
}
+// need to verify security token if user wants to do anything
+if (!empty($submit)) {
+ sm_validate_security_token($submitted_token, 3600, TRUE);
+}
+
if ($submit == _("Search") && !empty($what)) {
if ($recent_count > 0) {
update_recent($what, $where, $mailbox, $username, $data_dir);
@@ -449,6 +459,7 @@ if( substr( phpversion(), 0, 3 ) == '4.1
/* Search Form */
echo html_tag( 'div', '<b>' . _("Current Search") . '</b>', 'left' ) . "\n"
. '<form action="search.php" name="s">'
+ . addHidden('smtoken', sm_generate_security_token())
. html_tag( 'table', '', '', '', 'width="95%" cellpadding="0" cellspacing="0" border="0"' )
. html_tag( 'tr' )
. html_tag( 'td', '', 'left' )
diff -up squirrelmail-1.4.19/src/vcard.php.scrf squirrelmail-1.4.19/src/vcard.php
--- squirrelmail-1.4.19/src/vcard.php.scrf 2009-04-16 00:00:49.000000000 +0200
+++ squirrelmail-1.4.19/src/vcard.php 2009-08-17 09:53:22.668549664 +0200
@@ -155,6 +155,7 @@ echo '</table>' .
'</td></tr>' .
'<tr><td align="center">' .
'<form action="../src/addressbook.php" method="post" name="f_add">' .
+ '<input type="hidden" name="smtoken" value="' . sm_generate_security_token() . '" />' .
'<table border="0" cellpadding="2" cellspacing="0" align="center">' .
'<tr><td align="right"><b>' . _("Nickname") . ':</b></td>' .
'<td>' .
@@ -236,4 +237,4 @@ echo '<a href="../src/download.php?absol
<table border="0" cellspacing="0" cellpadding="2" align="center">
<tr><td bgcolor="<?php echo $color[4]; ?>">
</td></tr></table>
-</body></html>
\ No newline at end of file
+</body></html>
Index: squirrelmail.spec
===================================================================
RCS file: /cvs/extras/rpms/squirrelmail/F-10/squirrelmail.spec,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -p -r1.65 -r1.66
--- squirrelmail.spec 22 May 2009 07:08:56 -0000 1.65
+++ squirrelmail.spec 17 Aug 2009 08:56:34 -0000 1.66
@@ -6,7 +6,7 @@
Summary: SquirrelMail webmail client
Name: squirrelmail
Version: 1.4.19
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv2+
URL: http://www.squirrelmail.org/
Group: Applications/Internet
@@ -33,12 +33,14 @@ Patch4: squirrelmail-1.4.15-tr-fix.patch
# http://sourceforge.net/tracker/index.php?func=detail&aid=1855717&group_id=311&atid=100311
Patch5: squirrelmail-1.4.17-biguid.patch
+#taken from upstream, bug #517312, for squirrelmail < 1.4.20RC1
+Patch6: squirrelmail-1.4.19-csrf.patch
+
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
BuildRequires: gettext
-Requires: httpd, php >= 4.0.4, php-mbstring, perl, tmpwatch >= 2.8, aspell
+Requires: httpd, php, php-mbstring, perl, tmpwatch, aspell
Requires: /usr/sbin/sendmail
-Prereq: httpd, perl
Provides: squirrelmail-i18n
%description
@@ -61,6 +63,7 @@ tar xfj %SOURCE4
popd
%patch5 -p1
+%patch6 -p1
%build
rm -f plugins/make_archive.pl
@@ -235,6 +238,7 @@ sed -i 's/\r//' doc/release_notes_archiv
#remove unwanted files
rm $RPM_BUILD_ROOT%{_datadir}/squirrelmail/plugins/filters/bulkquery/bulkquery.c
rm $RPM_BUILD_ROOT%{_datadir}/squirrelmail/locale/es_ES/LC_MESSAGES/serversidefilter.po.new
+rm $RPM_BUILD_ROOT%{_datadir}/squirrelmail/plugins/squirrelspell/modules/.htaccess
%clean
rm -rf $RPM_BUILD_ROOT
@@ -266,6 +270,9 @@ rm -rf $RPM_BUILD_ROOT
%{_sysconfdir}/cron.daily/squirrelmail.cron
%changelog
+* Mon Aug 17 2009 Michal Hlavinka <mhlavink at redhat.com> - 1.4.19-2
+- fix #517312 - CSRF issues in all forms (SA34627)
+
* Fri May 22 2009 Michal Hlavinka <mhlavink at redhat.com> - 1.4.19-1
- updated to 1.4.19
- fixes CVE-2009-1579, CVE-2009-1580, CVE-2009-1581
More information about the fedora-extras-commits
mailing list