Hello community,

here is the log from the commit of package python for openSUSE:11.4
checked in at Fri May 6 15:22:41 CEST 2011.



--------
--- old-versions/11.4/all/python/python-base.changes    2011-01-17 
10:42:37.000000000 +0100
+++ 11.4/python/python-base.changes     2011-05-02 18:07:07.000000000 +0200
@@ -1,0 +2,15 @@
+Mon May  2 16:04:49 UTC 2011 - [email protected]
+
+- fixed a security flaw where malicious sites could redirect
+  Python application from http to a local file
+  (CVE-2011-1521, bnc#682554)
+- fixed race condition in Makefile which randomly failed
+  parallel builds ( http://bugs.python.org/issue10013 )
+
+-------------------------------------------------------------------
+Thu Feb 17 17:37:09 CET 2011 - [email protected]
+
+- Prefix DATE and TIME with PY_BUILD_ and COMPILER with PYTHON_ as
+  to not break external code (bnc#673071).
+
+-------------------------------------------------------------------
--- old-versions/11.4/all/python/python.changes 2010-08-31 04:56:18.000000000 
+0200
+++ 11.4/python/python.changes  2011-05-04 16:18:54.000000000 +0200
@@ -1,0 +2,12 @@
+Wed May  4 14:18:08 UTC 2011 - [email protected]
+
+- added "fix-parallel-make" patch to python main package as well,
+  because build process is the same
+
+-------------------------------------------------------------------
+Thu Feb 17 17:37:09 CET 2011 - [email protected]
+
+- Prefix DATE and TIME with PY_BUILD_ and COMPILER with PYTHON_ as
+  to not break external code (bnc#673071).
+
+-------------------------------------------------------------------

Package does not exist at destination yet. Using Fallback 
old-versions/11.4/all/python
Destination is old-versions/11.4/UPDATES/all/python
calling whatdependson for 11.4-i586


New:
----
  python-2.7-CVE-2011-1521-fileurl.patch
  python-2.7-fix-parallel-make.patch
  python-fix_date_time_compiler.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-base.spec ++++++
--- /var/tmp/diff_new_pack.YTZZuh/_old  2011-05-06 15:22:14.000000000 +0200
+++ /var/tmp/diff_new_pack.YTZZuh/_new  2011-05-06 15:22:14.000000000 +0200
@@ -30,7 +30,7 @@
 #
 Summary:        Python Interpreter base package
 Version:        2.7
-Release:        5
+Release:        8.<RELEASE2>
 %define         tarversion      %{version}
 %define         tarname         Python-%{tarversion}
 Source0:        %{tarname}.tar.bz2
@@ -52,7 +52,9 @@
 Patch10:        urllib2-AbstractBasicAuthHandler_reset_attr.diff
 Patch11:        smtpd-dos.patch
 Patch12:        
http://psf.upfronthosting.co.za/roundup/tracker/file19029/python-test_structmembers.patch
-
+Patch13:        python-fix_date_time_compiler.patch
+Patch14:        python-2.7-CVE-2011-1521-fileurl.patch
+Patch15:        python-2.7-fix-parallel-make.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %define         python_version    %(echo %{version} | head -c 3)
 Provides:       %{name} = %{python_version}
@@ -145,7 +147,10 @@
 %patch9 -p1
 %patch10
 %patch11
-%patch12 -p0
+%patch12
+%patch13
+%patch14 -p1
+%patch15 -p1
 
 # some cleanup
 find . -name .cvsignore -type f -print0 | xargs -0 rm -f
@@ -168,10 +173,10 @@
 # python installation
 touch Parser/asdl* Python/Python-ast.c Include/Python-ast.h
 # use just gcc instead of [GCC 4.5.0 20100604 [gcc-4_5-branch revision 
160292]..
-echo '#define COMPILER "[GCC]"' >> pyconfig.h.in
+echo '#define PYTHON_COMPILER "[GCC]"' >> pyconfig.h.in
 # use a compilation date equivalent to the source tarball.
-printf '#define DATE "%s %s %s"\n' $(date -u -r %{SOURCE0} +"%b %d %Y") >> 
pyconfig.h.in
-printf '#define TIME "%s"\n' $(date -u -r %{SOURCE0} +"%T") >> pyconfig.h.in
+printf '#define PY_BUILD_DATE "%s %s %s"\n' $(date -u -r %{SOURCE0} +"%b %d 
%Y") >> pyconfig.h.in
+printf '#define PY_BUILD_TIME "%s"\n' $(date -u -r %{SOURCE0} +"%T") >> 
pyconfig.h.in
 ########################################
 # configure
 ########################################

++++++ python-doc.spec ++++++
--- /var/tmp/diff_new_pack.YTZZuh/_old  2011-05-06 15:22:14.000000000 +0200
+++ /var/tmp/diff_new_pack.YTZZuh/_new  2011-05-06 15:22:14.000000000 +0200
@@ -24,7 +24,7 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Summary:        Additional Package Documentation for Python.
 Version:        2.7
-Release:        5
+Release:        8.<RELEASE2>
 %define pyver   2.7
 BuildArch:      noarch
 %define       tarname        Python-%{pyver}

++++++ python.spec ++++++
--- /var/tmp/diff_new_pack.YTZZuh/_old  2011-05-06 15:22:14.000000000 +0200
+++ /var/tmp/diff_new_pack.YTZZuh/_new  2011-05-06 15:22:14.000000000 +0200
@@ -32,7 +32,7 @@
 Obsoletes:      python-nothreads python21 python-elementtree python-sqlite
 Summary:        Python Interpreter
 Version:        2.7
-Release:        5
+Release:        9.<RELEASE10>
 Requires:       python-base = %{version}
 %define         tarversion      %{version}
 %define         tarname         Python-%{tarversion}
@@ -51,6 +51,8 @@
 Patch6:         python-2.6b3-curses-panel.patch
 Patch7:         sparc_longdouble.patch
 Patch8:         python-2.7-acrequire.patch
+Patch9:         python-fix_date_time_compiler.patch
+Patch10:        python-2.7-fix-parallel-make.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %define         python_version    %(echo %{version} | head -c 3)
@@ -182,6 +184,8 @@
 %patch6
 %patch7 -p1
 %patch8 -p1
+%patch9
+%patch10 -p1
 # some cleanup
 find . -name .cvsignore -type f -print0 | xargs -0 rm -f
 find . -name CVS -type d -print0 | xargs -0 rm -rf
@@ -203,10 +207,10 @@
 # python installation
 touch Parser/asdl* Python/Python-ast.c Include/Python-ast.h
 # use just gcc instead of [GCC 4.5.0 20100604 [gcc-4_5-branch revision 
160292]..
-echo '#define COMPILER "[GCC]"' >> pyconfig.h.in
+echo '#define PYTHON_COMPILER "[GCC]"' >> pyconfig.h.in
 # use a compilation date equivalent to the source tarball.
-printf '#define DATE "%s %s %s"\n' $(date -u -r %{SOURCE0} +"%b %d %Y") >> 
pyconfig.h.in
-printf '#define TIME "%s"\n' $(date -u -r %{SOURCE0} +"%T") >> pyconfig.h.in
+printf '#define PY_BUILD_DATE "%s %s %s"\n' $(date -u -r %{SOURCE0} +"%b %d 
%Y") >> pyconfig.h.in
+printf '#define PY_BUILD_TIME "%s"\n' $(date -u -r %{SOURCE0} +"%T") >> 
pyconfig.h.in
 ########################################
 # configure
 ########################################

++++++ python-2.7-CVE-2011-1521-fileurl.patch ++++++

# HG changeset patch
# User Guido van Rossum <[email protected]>
# Date 1301428435 25200
# Node ID b2934d98dac1f7b13cc6cc280f06d1aec3f6e80d
# Parent  1a5aab273332a7a379e35ed6f88400a110b5de0c# Parent  
9eeda8e3a13f107a698f10b0a45ffc2c6bd710fb
Merge issue 11662 from 2.6.

diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -161,6 +161,20 @@ Content-Type: text/html; charset=iso-885
         finally:
             self.unfakehttp()
 
+    def test_invalid_redirect(self):
+        # urlopen() should raise IOError for many error codes.
+        self.fakehttp("""HTTP/1.1 302 Found
+Date: Wed, 02 Jan 2008 03:03:54 GMT
+Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
+Location: file:README
+Connection: close
+Content-Type: text/html; charset=iso-8859-1
+""")
+        try:
+            self.assertRaises(IOError, urllib.urlopen, "http://python.org/";)
+        finally:
+            self.unfakehttp()
+
     def test_empty_socket(self):
         # urlopen() raises IOError if the underlying socket does not send any
         # data. (#1680230)
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -969,6 +969,27 @@ class HandlerTests(unittest.TestCase):
             self.assertEqual(count,
                              urllib2.HTTPRedirectHandler.max_redirections)
 
+    def test_invalid_redirect(self):
+        from_url = "http://example.com/a.html";
+        valid_schemes = ['http', 'https', 'ftp']
+        invalid_schemes = ['file', 'imap', 'ldap']
+        schemeless_url = "example.com/b.html"
+        h = urllib2.HTTPRedirectHandler()
+        o = h.parent = MockOpener()
+        req = Request(from_url)
+
+        for scheme in invalid_schemes:
+            invalid_url = scheme + '://' + schemeless_url
+            self.assertRaises(urllib2.HTTPError, h.http_error_302,
+                              req, MockFile(), 302, "Security Loophole",
+                              MockHeaders({"location": invalid_url}))
+
+        for scheme in valid_schemes:
+            valid_url = scheme + '://' + schemeless_url
+            h.http_error_302(req, MockFile(), 302, "That's fine",
+                MockHeaders({"location": valid_url}))
+            self.assertEqual(o.req.get_full_url(), valid_url)
+
     def test_cookie_redirect(self):
         # cookies shouldn't leak into redirected requests
         from cookielib import CookieJar
diff --git a/Lib/urllib.py b/Lib/urllib.py
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -644,6 +644,18 @@ class FancyURLopener(URLopener):
         fp.close()
         # In case the server sent a relative URL, join with original:
         newurl = basejoin(self.type + ":" + url, newurl)
+
+        # For security reasons we do not allow redirects to protocols
+        # other than HTTP, HTTPS or FTP.
+        newurl_lower = newurl.lower()
+        if not (newurl_lower.startswith('http://') or
+                newurl_lower.startswith('https://') or
+                newurl_lower.startswith('ftp://')):
+            raise IOError('redirect error', errcode,
+                          errmsg + " - Redirection to url '%s' is not allowed" 
%
+                          newurl,
+                          headers)
+
         return self.open(newurl)
 
     def http_error_301(self, url, fp, errcode, errmsg, headers, data=None):
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -578,6 +578,17 @@ class HTTPRedirectHandler(BaseHandler):
 
         newurl = urlparse.urljoin(req.get_full_url(), newurl)
 
+        # For security reasons we do not allow redirects to protocols
+        # other than HTTP, HTTPS or FTP.
+        newurl_lower = newurl.lower()
+        if not (newurl_lower.startswith('http://') or
+                newurl_lower.startswith('https://') or
+                newurl_lower.startswith('ftp://')):
+            raise HTTPError(newurl, code,
+                            msg + " - Redirection to url '%s' is not allowed" %
+                            newurl,
+                            headers, fp)
+
         # XXX Probably want to forget about the state of the current
         # request, although that might interact poorly with other
         # handlers that also use handler-specific request attributes
++++++ python-2.7-fix-parallel-make.patch ++++++
diff -up Python-2.7/Makefile.pre.in.fix-parallel-make Python-2.7/Makefile.pre.in
--- Python-2.7/Makefile.pre.in.fix-parallel-make        2010-07-22 
15:01:39.567996932 -0400
+++ Python-2.7/Makefile.pre.in  2010-07-22 15:47:02.437998509 -0400
@@ -207,6 +207,7 @@ SIGNAL_OBJS=        @SIGNAL_OBJS@
 
 ##########################################################################
 # Grammar
+GRAMMAR_STAMP= $(srcdir)/grammar-stamp
 GRAMMAR_H=     $(srcdir)/Include/graminit.h
 GRAMMAR_C=     $(srcdir)/Python/graminit.c
 GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar
@@ -530,10 +531,24 @@ Modules/getpath.o: $(srcdir)/Modules/get
 Modules/python.o: $(srcdir)/Modules/python.c
        $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
 
+# GNU "make" interprets rules with two dependents as two copies of the rule.
+# 
+# In a parallel build this can lead to pgen being run twice, once for each of
+# GRAMMAR_H and GRAMMAR_C, leading to race conditions in which the compiler
+# reads a partially-overwritten copy of one of these files, leading to syntax
+# errors (or linker errors if the fragment happens to be syntactically valid C)
+#
+# See http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
+# for more information
+#
+# Introduce ".grammar-stamp" as a contrived single output from PGEN to avoid
+# this:
+$(GRAMMAR_H) $(GRAMMAR_C): $(GRAMMAR_STAMP)
 
-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
+$(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
                -@$(INSTALL) -d Include
                -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+               touch $(GRAMMAR_STAMP)
 
 $(PGEN):       $(PGENOBJS)
                $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
++++++ python-fix_date_time_compiler.patch ++++++
Index: Modules/getbuildinfo.c
===================================================================
--- Modules/getbuildinfo.c.orig 2010-05-09 16:46:46.000000000 +0200
+++ Modules/getbuildinfo.c      2011-02-17 17:25:00.904694976 +0100
@@ -4,19 +4,19 @@
 #include <stdio.h>
 #endif
 
-#ifndef DATE
-#ifdef __DATE__
-#define DATE __DATE__
+#ifndef PY_BUILD_DATE
+#ifdef __PY_BUILD_DATE__
+#define PY_BUILD_DATE __PY_BUILD_DATE__
 #else
-#define DATE "xx/xx/xx"
+#define PY_BUILD_DATE "xx/xx/xx"
 #endif
 #endif
 
-#ifndef TIME
-#ifdef __TIME__
-#define TIME __TIME__
+#ifndef PY_BUILD_TIME
+#ifdef __PY_BUILD_TIME__
+#define PY_BUILD_TIME __PY_BUILD_TIME__
 #else
-#define TIME "xx:xx:xx"
+#define PY_BUILD_TIME "xx:xx:xx"
 #endif
 #endif
 
@@ -37,7 +37,7 @@ Py_GetBuildInfo(void)
     const char *branch = Py_SubversionShortBranch();
     PyOS_snprintf(buildinfo, sizeof(buildinfo),
                   "%s%s%s, %.20s, %.9s", branch, sep, revision,
-                  DATE, TIME);
+                  PY_BUILD_DATE, PY_BUILD_TIME);
     return buildinfo;
 }
 
Index: Python/getcompiler.c
===================================================================
--- Python/getcompiler.c.orig   2000-09-05 06:40:39.000000000 +0200
+++ Python/getcompiler.c        2011-02-17 17:23:55.320858100 +0100
@@ -3,26 +3,26 @@
 
 #include "Python.h"
 
-#ifndef COMPILER
+#ifndef PYTHON_COMPILER
 
 #ifdef __GNUC__
-#define COMPILER "\n[GCC " __VERSION__ "]"
+#define PYTHON_COMPILER "\n[GCC " __VERSION__ "]"
 #endif
 
-#endif /* !COMPILER */
+#endif /* !PYTHON_COMPILER */
 
-#ifndef COMPILER
+#ifndef PYTHON_COMPILER
 
 #ifdef __cplusplus
-#define COMPILER "[C++]"
+#define PYTHON_COMPILER "[C++]"
 #else
-#define COMPILER "[C]"
+#define PYTHON_COMPILER "[C]"
 #endif
 
-#endif /* !COMPILER */
+#endif /* !PYTHON_COMPILER */
 
 const char *
 Py_GetCompiler(void)
 {
-       return COMPILER;
+       return PYTHON_COMPILER;
 }

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to