./0000775000175000017500000000000012511411357011435 5ustar nielsenrnielsenr./05-enable-ctypes-cross-build.patch0000664000175000017500000000265612511411357017670 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [embedded specific] # CTypes need to know the actual host we are building on. # Signed-Off: Michael Dietrich Index: Python-2.6.1/setup.py =================================================================== --- Python-2.6.1.orig/setup.py +++ Python-2.6.1/setup.py @@ -1656,16 +1656,16 @@ class PyBuildExt(build_ext): ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = ['--host=%s' % os.environ["HOST_SYS"], ] # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. - cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \ - % (ffi_builddir, ffi_srcdir, " ".join(config_args)) + cmd = "(cd %s && autoconf -W cross) && (cd %s && env CFLAGS='' '%s/configure' %s)" \ + % (ffi_srcdir, ffi_builddir, ffi_srcdir, " ".join(config_args)) res = os.system(cmd) if res or not os.path.exists(ffi_configfile): - print "Failed to configure _ctypes module" + print "Failed to configure _ctypes module (res=%d) or missing conffile=%s" % ( res, ffi_configfile ) return False fficonfig = {} ./fix-makefile-for-ptest.patch0000664000175000017500000000220112511411357016733 0ustar nielsenrnielsenrAdd 'build-test' and 'runtest-TESTS' targets to Makefile, to build and run tests cross-compiled. Signed-off-by: Tudor Florea Upstream-Status: Pending --- diff -ruN a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in 2013-06-27 10:44:11.033840532 +0200 +++ b/Makefile.pre.in 2013-06-27 10:44:39.572635273 +0200 @@ -709,14 +709,19 @@ # generated bytecode. This is sometimes a very shy bug needing a lot of # sample data. -TESTOPTS= -l $(EXTRATESTOPTS) +TESTOPTS= -l -v $(EXTRATESTOPTS) TESTPROG= $(srcdir)/Lib/test/regrtest.py -TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -Wd -3 -E -tt $(TESTPYTHONOPTS) -test: all platform - -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f +TESTPYTHON= $(RUNSHARED) $(BUILDPYTHON) -Wd -3 -E -tt $(TESTPYTHONOPTS) +test: build-test + $(MAKE) runtest-TESTS + +runtest-TESTS: + -find $(srcdir) -name '*.py[co]' -print | xargs rm -f -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) +build-test: all platform + testall: all platform -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f $(TESTPYTHON) $(srcdir)/Lib/compileall.py ./posix_close.patch0000664000175000017500000000307112511411357015006 0ustar nielsenrnielsenrbackport from http://bugs.python.org/issue20594 - Issue #20594: Avoid name clash with the libc function posix_close. Upstream-Status: Backport Signed-off-by: Khem Raj # HG changeset patch # User Benjamin Peterson # Date 1392131776 18000 # Node ID 1d253360d5a6d8d987fb2480e26f4fcc2d730932 # Parent 41e49f1c5bd8ff48a6c18804c958e82c659daab3 avoid name clash with posix_close (closes #20594) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6581,8 +6581,12 @@ PyDoc_STRVAR(posix_close__doc__, "close(fd)\n\n\ Close a file descriptor (for low level IO)."); -static PyObject * -posix_close(PyObject *self, PyObject *args) +/* +The underscore at end of function name avoids a name clash with the libc +function posix_close. +*/ +static PyObject * +posix_close_(PyObject *self, PyObject *args) { int fd, res; if (!PyArg_ParseTuple(args, "i:close", &fd)) @@ -8960,7 +8964,7 @@ static PyMethodDef posix_methods[] = { {"tcsetpgrp", posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__}, #endif /* HAVE_TCSETPGRP */ {"open", posix_open, METH_VARARGS, posix_open__doc__}, - {"close", posix_close, METH_VARARGS, posix_close__doc__}, + {"close", posix_close_, METH_VARARGS, posix_close__doc__}, {"closerange", posix_closerange, METH_VARARGS, posix_closerange__doc__}, {"dup", posix_dup, METH_VARARGS, posix_dup__doc__}, {"dup2", posix_dup2, METH_VARARGS, posix_dup2__doc__}, ./setuptweaks.patch0000664000175000017500000000530312511411357015036 0ustar nielsenrnielsenrThis patch removes various ways native system options can pass into the python compilation and somehow break C modules. Upstream-Status: Configuration [OE Specific] RP 2012/04/23 Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2012-04-23 20:03:47.295582553 +0000 +++ Python-2.7.2/setup.py 2012-04-23 20:03:15.000000000 +0000 @@ -231,7 +231,13 @@ # compilers if compiler is not None: (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS') - args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags + # Need to filter out -isysroot from the flags. Ideally should + # figure out target flags here. + flags = [] + for f in cflags.split(): + if not f.startswith("-isystem"): + flags.append(f) + args['compiler_so'] = compiler + ' ' + ccshared + ' ' + ' '.join(flags) self.compiler.set_executables(**args) build_ext.build_extensions(self) @@ -393,7 +399,6 @@ # into configure and stored in the Makefile (issue found on OS X 10.3). for env_var, arg_name, dir_list in ( ('LDFLAGS', '-R', self.compiler.runtime_library_dirs), - ('LDFLAGS', '-L', self.compiler.library_dirs), ('CPPFLAGS', '-I', self.compiler.include_dirs)): env_val = sysconfig.get_config_var(env_var) if env_val: @@ -419,16 +424,16 @@ for directory in reversed(options.dirs): add_dir_to_list(dir_list, directory) - if os.path.normpath(sys.prefix) != '/usr' \ - and not sysconfig.get_config_var('PYTHONFRAMEWORK'): +# if os.path.normpath(sys.prefix) != '/usr' \ +# and not sysconfig.get_config_var('PYTHONFRAMEWORK'): # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework # (PYTHONFRAMEWORK is set) to avoid # linking problems when # building a framework with different architectures than # the one that is currently installed (issue #7473) - add_dir_to_list(self.compiler.library_dirs, - sysconfig.get_config_var("LIBDIR")) - add_dir_to_list(self.compiler.include_dirs, - sysconfig.get_config_var("INCLUDEDIR")) +# add_dir_to_list(self.compiler.library_dirs, +# sysconfig.get_config_var("LIBDIR")) +# add_dir_to_list(self.compiler.include_dirs, +# sysconfig.get_config_var("INCLUDEDIR")) try: have_unicode = unicode ./06-avoid_usr_lib_termcap_path_in_linking.patch0000664000175000017500000000257512511411357022463 0ustar nielsenrnielsenrUpstream-Status: Pending The poison directories patch has detected library path issue while compiling the python in cross environment, as seen bellow. warning: library search path "/usr/lib/termcap" is unsafe for cross-compilation This Patch fixes this issue in the python build environment. 11 Oct 2010 Nitin A Kamble 2011/09/29 Rebased for python 2.7.2 Signed-Off-By: Nitin A Kamble Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py +++ Python-2.7.2/setup.py @@ -680,12 +680,10 @@ class PyBuildExt(build_ext): pass # Issue 7384: Already linked against curses or tinfo. elif curses_library: readline_libs.append(curses_library) - elif self.compiler.find_library_file(lib_dirs + - ['/usr/lib/termcap'], + elif self.compiler.find_library_file(lib_dirs, 'termcap'): readline_libs.append('termcap') exts.append( Extension('readline', ['readline.c'], - library_dirs=['/usr/lib/termcap'], extra_link_args=readline_extra_link_args, libraries=readline_libs) ) else: ./sitecustomize.py0000664000175000017500000000214512511411357014720 0ustar nielsenrnielsenr# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer # GPLv2 or later # Version: 20081123 # Features: # * set proper default encoding # * enable readline completion in the interactive interpreter # * load command line history on startup # * save command line history on exit import os def __exithandler(): try: readline.write_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) ) except IOError: pass def __registerExitHandler(): import atexit atexit.register( __exithandler ) def __enableReadlineSupport(): readline.set_history_length( 1000 ) readline.parse_and_bind( "tab: complete" ) try: readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) ) except IOError: pass def __enableDefaultEncoding(): import sys try: sys.setdefaultencoding( "utf8" ) except LookupError: pass import sys try: import rlcompleter, readline except ImportError: pass else: __enableDefaultEncoding() __registerExitHandler() __enableReadlineSupport() ./avoid_warning_for_sunos_specific_module.patch0000664000175000017500000000147712511411357022625 0ustar nielsenrnielsenrsunaudiodev module is sunos specific so we avoid a warning by not adding this module to missing variable. Upstream-Status: Inappropriate [distribution] Signed-off-by: Andrei Gherzan Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2012-04-05 22:29:18.049196608 +0300 +++ Python-2.7.2/setup.py 2012-04-05 22:29:57.505195453 +0300 @@ -1522,8 +1522,9 @@ if platform == 'sunos5': # SunOS specific modules exts.append( Extension('sunaudiodev', ['sunaudiodev.c']) ) - else: - missing.append('sunaudiodev') + # If platform is not sunos warning is useless + #else: + # missing.append('sunaudiodev') if platform == 'darwin': # _scproxy ./03-fix-tkinter-detection.patch0000664000175000017500000000352012511411357017116 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [embedded specific] # We need to supply STAGING_INCDIR here, otherwise the Tk headers # will not be found. # Signed-Off: Michael 'Mickey' Lauer Index: Python-2.6.1/setup.py =================================================================== --- Python-2.6.1.orig/setup.py +++ Python-2.6.1/setup.py @@ -1543,7 +1543,7 @@ class PyBuildExt(build_ext): dotversion = dotversion[:-1] + '.' + dotversion[-1] tcl_include_sub = [] tk_include_sub = [] - for dir in inc_dirs: + for dir in [os.getenv("STAGING_INCDIR")]: tcl_include_sub += [dir + os.sep + "tcl" + dotversion] tk_include_sub += [dir + os.sep + "tk" + dotversion] tk_include_sub += tcl_include_sub @@ -1562,22 +1562,6 @@ class PyBuildExt(build_ext): if dir not in include_dirs: include_dirs.append(dir) - # Check for various platform-specific directories - if platform == 'sunos5': - include_dirs.append('/usr/openwin/include') - added_lib_dirs.append('/usr/openwin/lib') - elif os.path.exists('/usr/X11R6/include'): - include_dirs.append('/usr/X11R6/include') - added_lib_dirs.append('/usr/X11R6/lib64') - added_lib_dirs.append('/usr/X11R6/lib') - elif os.path.exists('/usr/X11R5/include'): - include_dirs.append('/usr/X11R5/include') - added_lib_dirs.append('/usr/X11R5/lib') - else: - # Assume default location for X11 - include_dirs.append('/usr/X11/include') - added_lib_dirs.append('/usr/X11/lib') - # If Cygwin, then verify that X is installed before proceeding if platform == 'cygwin': x11_inc = find_file('X11/Xlib.h', [], include_dirs) ./python-2.7.3-CVE-2013-1752-smtplib-fix.patch0000664000175000017500000000724312511411357020300 0ustar nielsenrnielsenrUpstream-Status: Backport Reference: http://bugs.python.org/issue16042 CVE-2013-1752: smtplib: Limit amount of data read by limiting the call to readline(). Original patch by Christian Heimes Signed-off-by: Maxin B. John --- diff -Naur Python-2.7.3-orig/Lib/smtplib.py Python-2.7.3/Lib/smtplib.py --- Python-2.7.3-orig/Lib/smtplib.py 2012-04-10 01:07:31.000000000 +0200 +++ Python-2.7.3/Lib/smtplib.py 2014-02-27 14:15:24.444198465 +0100 @@ -57,6 +57,7 @@ SMTP_PORT = 25 SMTP_SSL_PORT = 465 CRLF = "\r\n" +_MAXLINE = 8192 # more than 8 times larger than RFC 821, 4.5.3 OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I) @@ -179,10 +180,14 @@ def __init__(self, sslobj): self.sslobj = sslobj - def readline(self): + def readline(self, size=-1): + if size < 0: + size = None str = "" chr = None while chr != "\n": + if size is not None and len(str) >= size: + break chr = self.sslobj.read(1) if not chr: break @@ -351,7 +356,7 @@ self.file = self.sock.makefile('rb') while 1: try: - line = self.file.readline() + line = self.file.readline(_MAXLINE + 1) except socket.error as e: self.close() raise SMTPServerDisconnected("Connection unexpectedly closed: " @@ -361,6 +366,8 @@ raise SMTPServerDisconnected("Connection unexpectedly closed") if self.debuglevel > 0: print>>stderr, 'reply:', repr(line) + if len(line) > _MAXLINE: + raise SMTPResponseException(500, "Line too long.") resp.append(line[4:].strip()) code = line[:3] # Check that the error code is syntactically correct. diff -Naur Python-2.7.3-orig/Lib/test/test_smtplib.py Python-2.7.3/Lib/test/test_smtplib.py --- Python-2.7.3-orig/Lib/test/test_smtplib.py 2012-04-10 01:07:32.000000000 +0200 +++ Python-2.7.3/Lib/test/test_smtplib.py 2014-02-27 14:15:24.448198293 +0100 @@ -292,6 +292,33 @@ HOST, self.port, 'localhost', 3) +@unittest.skipUnless(threading, 'Threading required for this test.') +class TooLongLineTests(unittest.TestCase): + respdata = '250 OK' + ('.' * smtplib._MAXLINE * 2) + '\n' + + def setUp(self): + self.old_stdout = sys.stdout + self.output = StringIO.StringIO() + sys.stdout = self.output + + self.evt = threading.Event() + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.settimeout(15) + self.port = test_support.bind_port(self.sock) + servargs = (self.evt, self.respdata, self.sock) + threading.Thread(target=server, args=servargs).start() + self.evt.wait() + self.evt.clear() + + def tearDown(self): + self.evt.wait() + sys.stdout = self.old_stdout + + def testLineTooLong(self): + self.assertRaises(smtplib.SMTPResponseException, smtplib.SMTP, + HOST, self.port, 'localhost', 3) + + sim_users = {'Mr.A@somewhere.com':'John A', 'Ms.B@somewhere.com':'Sally B', 'Mrs.C@somewhereesle.com':'Ruth C', @@ -511,7 +538,8 @@ def test_main(verbose=None): test_support.run_unittest(GeneralTests, DebuggingServerTests, NonConnectingTests, - BadHELOServerTests, SMTPSimTests) + BadHELOServerTests, SMTPSimTests, + TooLongLineTests) if __name__ == '__main__': test_main() ./cgi_py.patch0000664000175000017500000000163412511411357013734 0ustar nielsenrnielsenrLib/cgi.py: Update the script as mentioned in the comment Upstream-Status: Inappropriate [distribution] Signed-off-by: Mark Hatle --- Python-2.6.6/Lib/cgi.py.orig 2010-08-01 22:14:27.000000000 -0500 +++ Python-2.6.6/Lib/cgi.py 2011-09-21 15:28:40.478208631 -0500 @@ -1,13 +1,4 @@ -#! /usr/local/bin/python - -# NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is -# intentionally NOT "/usr/bin/env python". On many systems -# (e.g. Solaris), /usr/local/bin is not in $PATH as passed to CGI -# scripts, and /usr/local/bin is the default directory where Python is -# installed, so /usr/bin/env would be unable to find python. Granted, -# binary installations by Linux vendors often install Python in -# /usr/bin. So let those vendors patch cgi.py to match their choice -# of installation. +#! /usr/bin/env python """Support module for CGI (Common Gateway Interface) scripts. ./search_db_h_in_inc_dirs_and_avoid_warning.patch0000664000175000017500000000303712511411357022773 0ustar nielsenrnielsenrpython should search for db.h in inc_dirs and not in a hardcoded path. If db.h is found but HASHVERSION is not 2 we avoid a warning by not adding this module to missing variable. Upstream-Status: Inappropriate [distribution] Signed-off-by: Andrei Gherzan Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2012-04-05 22:27:22.437199989 +0300 +++ Python-2.7.2/setup.py 2012-04-05 22:26:38.000000000 +0300 @@ -1141,12 +1141,12 @@ # the more recent berkeleydb's db.h file first in the include path # when attempting to compile and it will fail. f = "/usr/include/db.h" - + if len(inc_dirs) != 0: + f = os.path.join(inc_dirs[0], "db.h") if sys.platform == 'darwin': if is_macosx_sdk_path(f): sysroot = macosx_sdk_root() f = os.path.join(sysroot, f[1:]) - if os.path.exists(f) and not db_incs: data = open(f).read() m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data) @@ -1161,8 +1161,10 @@ libraries=libraries)) else: exts.append(Extension('bsddb185', ['bsddbmodule.c'])) - else: - missing.append('bsddb185') + # If a newer version is detected don't report an useless + # warning + #else: + # missing.append('bsddb185') else: missing.append('bsddb185') ./01-use-proper-tools-for-cross-build.patch0000664000175000017500000001452212511411357021147 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [embedded specific] # We need to ensure our host tools get run during build, not the freshly # built cross-tools (this will not work), so we introduce HOSTPYTHON and HOSTPGEN. # Signed-Off: Michael 'Mickey' Lauer Index: Python-2.7.2/Makefile.pre.in =================================================================== --- Python-2.7.2.orig/Makefile.pre.in +++ Python-2.7.2/Makefile.pre.in @@ -182,6 +182,7 @@ UNICODE_OBJS= @UNICODE_OBJS@ PYTHON= python$(EXE) BUILDPYTHON= python$(BUILDEXE) +HOSTPYTHON= $(BUILDPYTHON) # The task to run while instrument when building the profile-opt target PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck @@ -214,7 +215,7 @@ LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@ ########################################################################## # Parser PGEN= Parser/pgen$(EXE) - +HOSTPGEN= $(PGEN)$(EXE) POBJS= \ Parser/acceler.o \ Parser/grammar1.o \ @@ -401,14 +402,14 @@ $(BUILDPYTHON): Modules/python.o $(LIBRA $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) platform: $(BUILDPYTHON) - $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from sysconfig import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform + $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform # Build the shared modules sharedmods: $(BUILDPYTHON) @case $$MAKEFLAGS in \ - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \ esac # Build static library @@ -542,7 +543,7 @@ Modules/python.o: $(srcdir)/Modules/pyth $(GRAMMAR_H) $(GRAMMAR_C): Parser/pgen.stamp Parser/pgen.stamp: $(PGEN) $(GRAMMAR_INPUT) -@$(INSTALL) -d Include - $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) + $(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) -touch Parser/pgen.stamp $(PGEN): $(PGENOBJS) @@ -926,25 +927,25 @@ libinstall: build_all $(srcdir)/Lib/$(PL done $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ + $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ + $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ + $(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST)/site-packages -f \ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ + $(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST)/site-packages -f \ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" + $(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" # Create the PLATDIR source directory, if one wasn't distributed.. $(srcdir)/Lib/$(PLATDIR): @@ -1049,7 +1050,7 @@ libainstall: all python-config # Install the dynamically loadable modules # This goes into $(exec_prefix) sharedinstall: sharedmods - $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ + $(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \ --prefix=$(prefix) \ --install-scripts=$(BINDIR) \ --install-platlib=$(DESTSHARED) \ Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py +++ Python-2.7.2/setup.py @@ -313,6 +313,7 @@ class PyBuildExt(build_ext): self.failed.append(ext.name) self.announce('*** WARNING: renaming "%s" since importing it' ' failed: %s' % (ext.name, why), level=3) + return assert not self.inplace basename, tail = os.path.splitext(ext_filename) newname = basename + "_failed" + tail @@ -369,8 +370,8 @@ class PyBuildExt(build_ext): def detect_modules(self): # Ensure that /usr/local is always used - add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') - add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') + #add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + #add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') self.add_multiarch_paths() # Add paths specified in the environment variables LDFLAGS and @@ -475,6 +476,9 @@ class PyBuildExt(build_ext): # XXX Omitted modules: gl, pure, dl, SGI-specific modules + lib_dirs = [ os.getenv("STAGING_LIBDIR"), os.getenv("STAGING_BASELIBDIR") ] + inc_dirs = [ os.getenv("STAGING_INCDIR") ] + # # The following modules are all pretty straightforward, and compile # on pretty much any POSIXish platform. @@ -677,8 +681,8 @@ class PyBuildExt(build_ext): elif curses_library: readline_libs.append(curses_library) elif self.compiler.find_library_file(lib_dirs + - ['/usr/lib/termcap'], - 'termcap'): + ['/usr/lib/termcap'], + 'termcap'): readline_libs.append('termcap') exts.append( Extension('readline', ['readline.c'], library_dirs=['/usr/lib/termcap'], ./remove_sqlite_rpath.patch0000664000175000017500000000156112511411357016535 0ustar nielsenrnielsenrThis patch removes the RPATH setting which contains a pointer to the target relocated sysroot, which is incorrect. Upstream-Status: Inappropriate [Embedded Specific] Signed-off-by: Saul Wold Index: Python-2.6.6/setup.py =================================================================== --- Python-2.6.6.orig/setup.py 2011-09-28 14:22:57.000000000 -0700 +++ Python-2.6.6/setup.py 2011-09-28 16:11:25.147279633 -0700 @@ -1079,7 +1079,6 @@ include_dirs=["Modules/_sqlite", sqlite_incdir], library_dirs=sqlite_libdir, - runtime_library_dirs=sqlite_libdir, extra_link_args=sqlite_extra_link_args, libraries=["sqlite3",])) else: ./add-md5module-support.patch0000664000175000017500000000112612511411357016611 0ustar nielsenrnielsenr Upstream-Status: Inappropriate [configuration] Signed-off-by: Saul Wold Index: Python-2.7.2/Modules/Setup.dist =================================================================== --- Python-2.7.2.orig/Modules/Setup.dist 2011-06-11 08:46:26.000000000 -0700 +++ Python-2.7.2/Modules/Setup.dist 2011-12-27 15:51:41.244623219 -0800 @@ -248,7 +248,7 @@ # Message-Digest Algorithm, described in RFC 1321. The necessary files # md5.c and md5.h are included here. -#_md5 md5module.c md5.c +_md5 md5module.c md5.c # The _sha module implements the SHA checksum algorithms. ./builddir.patch0000664000175000017500000000437512511411357014265 0ustar nielsenrnielsenrWhen cross compiling python, we used to need to install the Makefile, pyconfig.h and the python library to their final location before being able to compile the rest of python. This change allows us to point python at its own source when building, avoiding a variety of sysroot staging issues and simplifying the main python recipe. Upstream-Status: Inappropriate RP 2012/11/13 Index: Python-2.7.3/Lib/sysconfig.py =================================================================== --- Python-2.7.3.orig/Lib/sysconfig.py 2012-11-13 14:36:08.429167199 +0000 +++ Python-2.7.3/Lib/sysconfig.py 2012-11-13 21:58:31.788551800 +0000 @@ -93,6 +93,7 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None +_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None) def _safe_realpath(path): try: @@ -100,7 +102,9 @@ except OSError: return path -if sys.executable: +if _PYTHONBUILDDIR: + _PROJECT_BASE = _PYTHONBUILDDIR +elif sys.executable: _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) else: # sys.executable can be empty if argv[0] has been changed and Python is Index: Python-2.7.3/Lib/distutils/sysconfig.py =================================================================== --- Python-2.7.3.orig/Lib/distutils/sysconfig.py 2012-11-13 14:36:08.005167209 +0000 +++ Python-2.7.3/Lib/distutils/sysconfig.py 2012-11-13 22:07:05.644540695 +0000 @@ -26,6 +26,9 @@ # live in project/PCBuild9. If we're dealing with an x64 Windows build, # it'll live in project/PCbuild/amd64. project_base = os.path.dirname(os.path.abspath(sys.executable)) +_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None) +if _PYTHONBUILDDIR: + project_base = _PYTHONBUILDDIR if os.name == "nt" and "pcbuild" in project_base[-8:].lower(): project_base = os.path.abspath(os.path.join(project_base, os.path.pardir)) # PC/VS7.1 @@ -247,7 +250,7 @@ def get_makefile_filename(): """Return full pathname of installed Makefile from the Python build.""" if python_build: - return os.path.join(os.path.dirname(sys.executable), "Makefile") + return os.path.join(project_base, "Makefile") lib_dir = get_python_lib(plat_specific=1, standard_lib=1) return os.path.join(lib_dir, "config", "Makefile") ./host_include_contamination.patch0000664000175000017500000000215712511411357020066 0ustar nielsenrnielsenrwhen building python for qemux86-64 on ubuntu 11.10/64bit it gropes into host includes and then mixes them with cross includes and as a result some modules fail to compile and link one of the modules is python-elementtree which is then not found during image creation Proble is that setup.py tries to add native includes that newer ubuntu has introduced for multiarch support. But that should only happen for native builds and not cross building python so we add a check here. Signed-off-by: Khem Raj Upstream-Status: Pending Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2012-02-03 12:10:42.307057756 -0800 +++ Python-2.7.2/setup.py 2012-02-03 12:11:12.363059210 -0800 @@ -360,6 +360,8 @@ # https://wiki.ubuntu.com/MultiarchSpec if not find_executable('dpkg-architecture'): return + if os.environ.get('CROSS_COMPILE') is not None: + return tmpfile = os.path.join(self.build_temp, 'multiarch') if not os.path.exists(self.build_temp): os.makedirs(self.build_temp) ./pypirc-secure.patch0000664000175000017500000000215512511411357015253 0ustar nielsenrnielsenr# HG changeset patch # User Philip Jenvey # Date 1322701507 28800 # Branch 2.7 # Node ID e7c20a8476a0e2ca18f8040864cbc400818d8f24 # Parent 3ecddf168f1f554a17a047384fe0b02f2d688277 create the .pypirc securely Upstream-Status: Backport Signed-off-by: Saul Wold diff -r 3ecddf168f1f -r e7c20a8476a0 Lib/distutils/config.py --- a/Lib/distutils/config.py Tue Nov 29 00:53:09 2011 +0100 +++ b/Lib/distutils/config.py Wed Nov 30 17:05:07 2011 -0800 @@ -42,16 +42,8 @@ def _store_pypirc(self, username, password): """Creates a default .pypirc file.""" rc = self._get_rc_file() - f = open(rc, 'w') - try: - f.write(DEFAULT_PYPIRC % (username, password)) - finally: - f.close() - try: - os.chmod(rc, 0600) - except OSError: - # should do something better here - pass + with os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0600), 'w') as fp: + fp.write(DEFAULT_PYPIRC % (username, password)) def _read_pypirc(self): """Reads the .pypirc file.""" ./06-ctypes-libffi-fix-configure.patch0000664000175000017500000000273012511411357020206 0ustar nielsenrnielsenrThis fixes configure issues with recent autoconf, e.g: autoreconf: Entering directory `Modules/_ctypes/libffi' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal --force configure.ac:26: error: m4_copy: won't overwrite defined macro: _AC_ARG_VAR_PRECIOUS configure.ac:26: the top level The problem is still present in python-2.6.5 but fixed in python-svn. Upstream-Status: Accepted [python-svn] Signed-off-by: Antonio Ospite Acked-by: Martin Jansa Signed-off-by: Martin Jansa Signed-off-by: Saul Wold 2011/09/29 Rebased for python 2.7.2 Signed-Off-By: Nitin A Kamble Index: Python-2.7.2/Modules/_ctypes/libffi/Makefile.am =================================================================== --- Python-2.7.2.orig/Modules/_ctypes/libffi/Makefile.am +++ Python-2.7.2/Modules/_ctypes/libffi/Makefile.am @@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = foreign subdir-objects -SUBDIRS = include testsuite man +SUBDIRS = include EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ @@ -34,8 +34,6 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change libtool-version ChangeLog.libffi m4/libtool.m4 \ m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 -info_TEXINFOS = doc/libffi.texi - ## ################################################################ ## ./python2.7.3-nossl3.patch0000664000175000017500000000246312511411357015613 0ustar nielsenrnielsenrpython: Building without SSLv3 support Building without SSLv3 support when openssl is built without any support for SSLv3 Upstream-Status: Backport Reference: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=76A8611#22 Signed-off-by: Sona Sarmadi --- diff -ruN a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c 2014-11-26 07:43:58.755679939 +0100 +++ b/Modules/_ssl.c 2014-11-26 07:49:10.454182400 +0100 @@ -302,8 +302,10 @@ PySSL_BEGIN_ALLOW_THREADS if (proto_version == PY_SSL_VERSION_TLS1) self->ctx = SSL_CTX_new(TLSv1_method()); /* Set up context */ +#ifndef OPENSSL_NO_SSL3 else if (proto_version == PY_SSL_VERSION_SSL3) self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */ +#endif #ifndef OPENSSL_NO_SSL2 else if (proto_version == PY_SSL_VERSION_SSL2) self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */ @@ -1777,8 +1779,10 @@ PyModule_AddIntConstant(m, "PROTOCOL_SSLv2", PY_SSL_VERSION_SSL2); #endif +#ifndef OPENSSL_NO_SSL3 PyModule_AddIntConstant(m, "PROTOCOL_SSLv3", PY_SSL_VERSION_SSL3); +#endif PyModule_AddIntConstant(m, "PROTOCOL_SSLv23", PY_SSL_VERSION_SSL23); PyModule_AddIntConstant(m, "PROTOCOL_TLSv1", ./setup_py_skip_cross_import_check.patch0000664000175000017500000000214712511411357021320 0ustar nielsenrnielsenrThis patch skips over the 'import check' setup.py does when building extensions. This generally won't work when cross-compiling. Upstream-Status: Inappropriate [embedded-specific] Signed-off-by: Tom Zanussi Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2011-11-04 16:46:34.553796410 -0500 +++ Python-2.7.2/setup.py 2011-11-04 16:59:49.692802313 -0500 @@ -287,6 +287,15 @@ (ext.name, sys.exc_info()[1])) self.failed.append(ext.name) return + + # If we're cross-compiling, we want to skip the import check + # i.e. we shouldn't be dynamically loading target shared libs + if os.environ.get('CROSS_COMPILE') is not None: + self.announce( + 'WARNING: skipping import check for cross-compiled "%s"' % + ext.name) + return + # Workaround for Mac OS X: The Carbon-based modules cannot be # reliably imported into a command-line Python if 'Carbon' in ext.extra_link_args: ./python-2.7.3-CVE-2014-7185.patch0000664000175000017500000000460412511411357016051 0ustar nielsenrnielsenrFrom 104eb318283dde5203aa6cf7384287bef181e308 Mon Sep 17 00:00:00 2001 From: Wenzong Fan Date: Wed, 12 Nov 2014 01:58:02 -0500 Subject: [PATCH] python: fix CVE-2014-7185 Reference: http://bugs.python.org/issue21831 CVE-2014-7185: Integer overflow in bufferobject.c in Python before 2.7.8 allows context-dependent attackers to obtain sensitive information from process memory via a large size and offset in a "buffer" function. Upstream-Status: Backport Signed-off-by: Wenzong Fan --- Lib/test/test_buffer.py | 6 ++++++ Misc/NEWS | 3 +++ Objects/bufferobject.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index 6bdc34d..3ac1f8c 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -4,6 +4,7 @@ For now, tests just new or changed functionality. """ +import sys import unittest from test import test_support @@ -21,6 +22,11 @@ class BufferTests(unittest.TestCase): self.assertEqual(b[start:stop:step], s[start:stop:step]) + def test_large_buffer_size_and_offset(self): + data = bytearray('hola mundo') + buf = buffer(data, sys.maxsize, sys.maxsize) + self.assertEqual(buf[:4096], "") + def test_main(): with test_support.check_py3k_warnings(("buffer.. not supported", diff --git a/Misc/NEWS b/Misc/NEWS index e8778ad..77396c5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -1896,6 +1896,9 @@ What's New in Python 2.7 Release Candidate 1? Core and Builtins ----------------- +- Issue #21831: Avoid integer overflow when large sizes and offsets are given to + the buffer type. CVE-2014-7185. + - Issue #8271: during the decoding of an invalid UTF-8 byte sequence, only the start byte and the continuation byte(s) are now considered invalid, instead of the number of bytes specified by the start byte. diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c index c52f0bc..c542506 100644 --- a/Objects/bufferobject.c +++ b/Objects/bufferobject.c @@ -88,7 +88,7 @@ get_buf(PyBufferObject *self, void **ptr, Py_ssize_t *size, *size = count; else *size = self->b_size; - if (offset + *size > count) + if (*size > count - offset) *size = count - offset; } return 1; -- 1.7.9.5 ./multilib.patch0000664000175000017500000002271112511411357014302 0ustar nielsenrnielsenrcommit 248279e54467a8cd5cde98fc124d1d1384703513 Author: Yu Ke Date: Tue Jun 28 21:21:29 2011 +0800 SUSE patch for the lib64 issue see detail in http://bugs.python.org/issue1294959 also rebased a bit for Yocto python 2.6.6 Picked-by: Yu Ke 2011/09/29 Rebased for python 2.7.2 Upstream-Status: Inappropriate [configuration] Signed-Off-By: Nitin A Kamble Index: Python-2.7.2/Include/pythonrun.h =================================================================== --- Python-2.7.2.orig/Include/pythonrun.h +++ Python-2.7.2/Include/pythonrun.h @@ -108,6 +108,7 @@ PyAPI_FUNC(char *) Py_GetPath(void); /* In their own files */ PyAPI_FUNC(const char *) Py_GetVersion(void); PyAPI_FUNC(const char *) Py_GetPlatform(void); +PyAPI_FUNC(const char *) Py_GetLib(void); PyAPI_FUNC(const char *) Py_GetCopyright(void); PyAPI_FUNC(const char *) Py_GetCompiler(void); PyAPI_FUNC(const char *) Py_GetBuildInfo(void); Index: Python-2.7.2/Lib/distutils/command/install.py =================================================================== --- Python-2.7.2.orig/Lib/distutils/command/install.py +++ Python-2.7.2/Lib/distutils/command/install.py @@ -22,6 +22,8 @@ from site import USER_BASE from site import USER_SITE +libname = sys.lib + if sys.version < "2.2": WINDOWS_SCHEME = { 'purelib': '$base', @@ -42,7 +44,7 @@ else: INSTALL_SCHEMES = { 'unix_prefix': { 'purelib': '$base/lib/python$py_version_short/site-packages', - 'platlib': '$platbase/lib/python$py_version_short/site-packages', + 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages', 'headers': '$base/include/python$py_version_short/$dist_name', 'scripts': '$base/bin', 'data' : '$base', Index: Python-2.7.2/Lib/distutils/sysconfig.py =================================================================== --- Python-2.7.2.orig/Lib/distutils/sysconfig.py +++ Python-2.7.2/Lib/distutils/sysconfig.py @@ -114,8 +114,11 @@ def get_python_lib(plat_specific=0, stan prefix = plat_specific and EXEC_PREFIX or PREFIX if os.name == "posix": - libpython = os.path.join(prefix, - "lib", "python" + get_python_version()) + if plat_specific or standard_lib: + lib = sys.lib + else: + lib = "lib" + libpython = os.path.join(prefix, lib, "python" + get_python_version()) if standard_lib: return libpython else: Index: Python-2.7.2/Lib/pydoc.py =================================================================== --- Python-2.7.2.orig/Lib/pydoc.py +++ Python-2.7.2/Lib/pydoc.py @@ -352,7 +352,7 @@ class Doc: docloc = os.environ.get("PYTHONDOCS", "http://docs.python.org/library") - basedir = os.path.join(sys.exec_prefix, "lib", + basedir = os.path.join(sys.exec_prefix, sys.lib, "python"+sys.version[0:3]) if (isinstance(object, type(os)) and (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', Index: Python-2.7.2/Lib/site.py =================================================================== --- Python-2.7.2.orig/Lib/site.py +++ Python-2.7.2/Lib/site.py @@ -300,13 +300,19 @@ def getsitepackages(): if sys.platform in ('os2emx', 'riscos'): sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) elif os.sep == '/': - sitepackages.append(os.path.join(prefix, "lib", + sitepackages.append(os.path.join(prefix, sys.lib, "python" + sys.version[:3], "site-packages")) - sitepackages.append(os.path.join(prefix, "lib", "site-python")) + if sys.lib != "lib": + sitepackages.append(os.path.join(prefix, "lib", + "python" + sys.version[:3], + "site-packages")) + sitepackages.append(os.path.join(prefix, sys.lib, "site-python")) + if sys.lib != "lib": + sitepackages.append(os.path.join(prefix, "lib", "site-python")) else: sitepackages.append(prefix) - sitepackages.append(os.path.join(prefix, "lib", "site-packages")) + sitepackages.append(os.path.join(prefix, sys.lib, "site-packages")) if sys.platform == "darwin": # for framework builds *only* we add the standard Apple # locations. Index: Python-2.7.2/Lib/test/test_dl.py =================================================================== --- Python-2.7.2.orig/Lib/test/test_dl.py +++ Python-2.7.2/Lib/test/test_dl.py @@ -5,10 +5,11 @@ import unittest from test.test_support import verbose, import_module dl = import_module('dl', deprecated=True) +import sys sharedlibs = [ - ('/usr/lib/libc.so', 'getpid'), - ('/lib/libc.so.6', 'getpid'), + ('/usr/'+sys.lib+'/libc.so', 'getpid'), + ('/'+sys.lib+'/libc.so.6', 'getpid'), ('/usr/bin/cygwin1.dll', 'getpid'), ('/usr/lib/libc.dylib', 'getpid'), ] Index: Python-2.7.2/Lib/trace.py =================================================================== --- Python-2.7.2.orig/Lib/trace.py +++ Python-2.7.2/Lib/trace.py @@ -762,10 +762,10 @@ def main(argv=None): # should I also call expanduser? (after all, could use $HOME) s = s.replace("$prefix", - os.path.join(sys.prefix, "lib", + os.path.join(sys.prefix, sys.lib, "python" + sys.version[:3])) s = s.replace("$exec_prefix", - os.path.join(sys.exec_prefix, "lib", + os.path.join(sys.exec_prefix, sys.lib, "python" + sys.version[:3])) s = os.path.normpath(s) ignore_dirs.append(s) Index: Python-2.7.2/Makefile.pre.in =================================================================== --- Python-2.7.2.orig/Makefile.pre.in +++ Python-2.7.2/Makefile.pre.in @@ -81,6 +81,7 @@ PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAG # Machine-dependent subdirectories MACHDEP= @MACHDEP@ +LIB= @LIB@ # Install prefix for architecture-independent files prefix= @prefix@ @@ -97,7 +98,7 @@ LIBDIR= @libdir@ MANDIR= @mandir@ INCLUDEDIR= @includedir@ CONFINCLUDEDIR= $(exec_prefix)/include -SCRIPTDIR= $(prefix)/lib +SCRIPTDIR= $(prefix)/@LIB@ # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) @@ -533,6 +534,7 @@ Modules/getpath.o: $(srcdir)/Modules/get -DEXEC_PREFIX='"$(exec_prefix)"' \ -DVERSION='"$(VERSION)"' \ -DVPATH='"$(VPATH)"' \ + -DLIB='"$(LIB)"' \ -o $@ $(srcdir)/Modules/getpath.c Modules/python.o: $(srcdir)/Modules/python.c @@ -567,7 +569,7 @@ $(AST_C): $(AST_ASDL) $(ASDLGEN_FILES) Python/compile.o Python/symtable.o Python/ast.o: $(GRAMMAR_H) $(AST_H) Python/getplatform.o: $(srcdir)/Python/getplatform.c - $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c + $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c Python/importdl.o: $(srcdir)/Python/importdl.c $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c Index: Python-2.7.2/Modules/getpath.c =================================================================== --- Python-2.7.2.orig/Modules/getpath.c +++ Python-2.7.2/Modules/getpath.c @@ -116,9 +116,11 @@ #define EXEC_PREFIX PREFIX #endif +#define LIB_PYTHON LIB "/python" VERSION + #ifndef PYTHONPATH -#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \ - EXEC_PREFIX "/lib/python" VERSION "/lib-dynload" +#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \ + EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload" #endif #ifndef LANDMARK @@ -129,7 +131,7 @@ static char prefix[MAXPATHLEN+1]; static char exec_prefix[MAXPATHLEN+1]; static char progpath[MAXPATHLEN+1]; static char *module_search_path = NULL; -static char lib_python[] = "lib/python" VERSION; +static char lib_python[] = LIB_PYTHON; static void reduce(char *dir) Index: Python-2.7.2/Python/getplatform.c =================================================================== --- Python-2.7.2.orig/Python/getplatform.c +++ Python-2.7.2/Python/getplatform.c @@ -10,3 +10,13 @@ Py_GetPlatform(void) { return PLATFORM; } + +#ifndef LIB +#define LIB "lib" +#endif + +const char * +Py_GetLib(void) +{ + return LIB; +} Index: Python-2.7.2/Python/sysmodule.c =================================================================== --- Python-2.7.2.orig/Python/sysmodule.c +++ Python-2.7.2/Python/sysmodule.c @@ -1416,6 +1416,8 @@ _PySys_Init(void) PyString_FromString(Py_GetCopyright())); SET_SYS_FROM_STRING("platform", PyString_FromString(Py_GetPlatform())); + SET_SYS_FROM_STRING("lib", + PyString_FromString(Py_GetLib())); SET_SYS_FROM_STRING("executable", PyString_FromString(Py_GetProgramFullPath())); SET_SYS_FROM_STRING("prefix", Index: Python-2.7.2/configure.in =================================================================== --- Python-2.7.2.orig/configure.in +++ Python-2.7.2/configure.in @@ -629,6 +629,10 @@ SunOS*) ;; esac +AC_SUBST(LIB) +AC_MSG_CHECKING(LIB) +LIB=`basename ${libdir}` +AC_MSG_RESULT($LIB) AC_SUBST(LIBRARY) AC_MSG_CHECKING(LIBRARY) ./gcc-4.8-fix-configure-Wformat.patch0000664000175000017500000000131612511411357017702 0ustar nielsenrnielsenrbackport bug 17547 from http://hg.python.org/cpython/rev/9d50af4c482f/ -Wformat is needed by gcc 4.8 Signed-off-by: Khem Raj Upstream-Status: Backport Index: Python-2.7.3/configure.in =================================================================== --- Python-2.7.3.orig/configure.in 2013-06-11 02:22:04.186529212 -0700 +++ Python-2.7.3/configure.in 2013-06-13 02:17:06.324403327 -0700 @@ -1196,7 +1196,7 @@ then AC_MSG_CHECKING(whether gcc supports ParseTuple __format__) save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS -Werror -Wformat" AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[void f(char*,...)__attribute((format(PyArg_ParseTuple, 1, 2)));]], [[]]) ],[ ./avoid_warning_about_tkinter.patch0000664000175000017500000000217512511411357020244 0ustar nielsenrnielsenr_tkinter module needs tk module along with tcl. tk is not yet integrated in yocto so we skip the check for this module. Avoid a warning by not adding this module to missing variable. Also simply disable the tk module since its not in DEPENDS. Upstream-Status: Inappropriate [distribution] Signed-off-by: Andrei Gherzan Index: Python-2.7.3/setup.py =================================================================== --- Python-2.7.3.orig/setup.py 2014-07-07 13:45:15.056233820 +0000 +++ Python-2.7.3/setup.py 2014-07-16 16:06:37.145656284 +0000 @@ -1639,10 +1639,12 @@ self.extensions.extend(exts) # Call the method for detecting whether _tkinter can be compiled - self.detect_tkinter(inc_dirs, lib_dirs) + #self.detect_tkinter(inc_dirs, lib_dirs) - if '_tkinter' not in [e.name for e in self.extensions]: - missing.append('_tkinter') + # tkinter module will not be avalaible as yocto + # doesn't have tk integrated (yet) + #if '_tkinter' not in [e.name for e in self.extensions]: + # missing.append('_tkinter') return missing ./parallel-makeinst-create-bindir.patch0000664000175000017500000000133112511411357020567 0ustar nielsenrnielsenrWhen using make -j with the 'install' target, it's possible for altbininstall (which normally creates BINDIR) and libainstall (which doesn't, though it installs python-config there) to race, resulting in a failure due to attempting to install python-config into a nonexistent BINDIR. Ensure it also exists in the libainstall target. Upstream-Status: Pending --- Python-2.7.3.orig/Makefile.pre.in +++ Python-2.7.3/Makefile.pre.in @@ -1008,7 +1008,7 @@ LIBPL= $(LIBP)/config LIBPC= $(LIBDIR)/pkgconfig libainstall: all python-config - @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \ + @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC) $(BINDIR); \ do \ if test ! -d $(DESTDIR)$$i; then \ echo "Creating directory $$i"; \ ./run-ptest0000664000175000017500000000060212511411357013317 0ustar nielsenrnielsenr#!/bin/sh # #This script is used to run python test suites make -f LIBDIR/python/ptest/Makefile -k runtest-TESTS srcdir=LIBDIR/python2.7 TESTPROG=LIBDIR/python2.7/test/regrtest.py | sed -e '/\.\.\. ok/ s/^/PASS: /g' -e '/\.\.\. [ERROR|FAIL]/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g' ./json-flaw-fix.patch0000664000175000017500000000161712511411357015147 0ustar nielsenrnielsenr python: fix _json module arbitrary process memory read vulnerability Upstream-Status: submitted Signed-off-by: Daniel BORNAZ --- a/Modules/_json.c 2014-07-15 15:37:17.151046356 +0200 +++ b/Modules/_json.c 2014-07-15 15:38:37.335605042 +0200 @@ -1491,7 +1491,7 @@ scan_once_str(PyScannerObject *s, PyObje PyObject *res; char *str = PyString_AS_STRING(pystr); Py_ssize_t length = PyString_GET_SIZE(pystr); - if (idx >= length) { + if ( idx < 0 || idx >= length) { PyErr_SetNone(PyExc_StopIteration); return NULL; } @@ -1578,7 +1578,7 @@ scan_once_unicode(PyScannerObject *s, Py PyObject *res; Py_UNICODE *str = PyUnicode_AS_UNICODE(pystr); Py_ssize_t length = PyUnicode_GET_SIZE(pystr); - if (idx >= length) { + if ( idx < 0 || idx >= length) { PyErr_SetNone(PyExc_StopIteration); return NULL; } ./fix_for_using_different_libdir.patch0000664000175000017500000000765312511411357020705 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [Embedded specific] This patch fixes issuing with different libdir like lib64. This patch makes the native python binary modules findable in the install process of the host python. Signed-Off-By: Nitin A Kamble Date: 2012/03/14 Updated for python 2.7.3 Signed-Off-By: Nitin A Kamble Date: 2012/05/01 Index: Python-2.7.3/Lib/sysconfig.py =================================================================== --- Python-2.7.3.orig/Lib/sysconfig.py +++ Python-2.7.3/Lib/sysconfig.py @@ -7,10 +7,10 @@ from os.path import pardir, realpath _INSTALL_SCHEMES = { 'posix_prefix': { - 'stdlib': '{base}/lib/python{py_version_short}', - 'platstdlib': '{platbase}/lib/python{py_version_short}', - 'purelib': '{base}/lib/python{py_version_short}/site-packages', - 'platlib': '{platbase}/lib/python{py_version_short}/site-packages', + 'stdlib': '{base}/'+sys.lib+'/python{py_version_short}', + 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}', + 'purelib': '{base}/'+sys.lib+'/python{py_version_short}/site-packages', + 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages', 'include': '{base}/include/python{py_version_short}', 'platinclude': '{platbase}/include/python{py_version_short}', 'scripts': '{base}/bin', @@ -65,10 +65,10 @@ _INSTALL_SCHEMES = { 'data' : '{userbase}', }, 'posix_user': { - 'stdlib': '{userbase}/lib/python{py_version_short}', - 'platstdlib': '{userbase}/lib/python{py_version_short}', - 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', - 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', + 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}', + 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}', + 'purelib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages', + 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages', 'include': '{userbase}/include/python{py_version_short}', 'scripts': '{userbase}/bin', 'data' : '{userbase}', Index: Python-2.7.3/Makefile.pre.in =================================================================== --- Python-2.7.3.orig/Makefile.pre.in +++ Python-2.7.3/Makefile.pre.in @@ -941,25 +941,25 @@ libinstall: build_all $(srcdir)/Lib/$(PL $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ $(DESTDIR)$(LIBDEST)/distutils/tests ; \ fi - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \ $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \ $(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST)/site-packages -f \ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \ $(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST)/site-packages -f \ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \ $(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" # Create the PLATDIR source directory, if one wasn't distributed.. ./python-2.7.3-berkeley-db-5.3.patch0000664000175000017500000014010212511411357017130 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [not author] Fix to support db 5.3 for bsddb module in python 2.7.2 This patch is made from the db5.1.diff in http://archive.ubuntu.com/ubuntu/pool/main/p/python2.7/python2.7_2.7.3-0ubuntu3.diff.gz Signed-off-by: Jackie Huang --- Lib/bsddb/__init__.py | 2 +- Lib/bsddb/test/test_all.py | 5 +- Lib/bsddb/test/test_dbenv.py | 29 +++- Modules/_bsddb.c | 439 +++++++++++++++++++++++------------------- Modules/bsddb.h | 20 +- setup.py | 25 +++- 6 files changed, 307 insertions(+), 213 deletions(-) diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index ed4deea..1b1c388 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -33,7 +33,7 @@ #---------------------------------------------------------------------- -"""Support for Berkeley DB 4.1 through 4.8 with a simple interface. +"""Support for Berkeley DB 4.2 through 5.3 with a simple interface. For the full featured object oriented interface use the bsddb.db module instead. It mirrors the Oracle Berkeley DB C API. diff --git a/Lib/bsddb/test/test_all.py b/Lib/bsddb/test/test_all.py index e9fe618..6a25f4a 100644 --- a/Lib/bsddb/test/test_all.py +++ b/Lib/bsddb/test/test_all.py @@ -484,6 +484,8 @@ def print_versions(): print '-=' * 38 print db.DB_VERSION_STRING print 'bsddb.db.version(): %s' % (db.version(), ) + if db.version() >= (5, 0) : + print 'bsddb.db.full_version(): %s' %repr(db.full_version()) print 'bsddb.db.__version__: %s' % db.__version__ print 'bsddb.db.cvsid: %s' % db.cvsid @@ -528,7 +530,8 @@ def get_new_database_path() : # This path can be overriden via "set_test_path_prefix()". import os, os.path -get_new_path.prefix=os.path.join(os.sep,"tmp","z-Berkeley_DB") +get_new_path.prefix=os.path.join(os.environ.get("TMPDIR", + os.path.join(os.sep,"tmp")), "z-Berkeley_DB") get_new_path.num=0 def get_test_path_prefix() : diff --git a/Lib/bsddb/test/test_dbenv.py b/Lib/bsddb/test/test_dbenv.py index 37281df..6ac1e54 100644 --- a/Lib/bsddb/test/test_dbenv.py +++ b/Lib/bsddb/test/test_dbenv.py @@ -25,12 +25,31 @@ class DBEnv(unittest.TestCase): test_support.rmtree(self.homeDir) class DBEnv_general(DBEnv) : + def test_get_open_flags(self) : + flags = db.DB_CREATE | db.DB_INIT_MPOOL + self.env.open(self.homeDir, flags) + self.assertEqual(flags, self.env.get_open_flags()) + + def test_get_open_flags2(self) : + flags = db.DB_CREATE | db.DB_INIT_MPOOL | \ + db.DB_INIT_LOCK | db.DB_THREAD + self.env.open(self.homeDir, flags) + self.assertEqual(flags, self.env.get_open_flags()) + if db.version() >= (4, 7) : def test_lk_partitions(self) : for i in [10, 20, 40] : self.env.set_lk_partitions(i) self.assertEqual(i, self.env.get_lk_partitions()) + def test_getset_intermediate_dir_mode(self) : + self.assertEqual(None, self.env.get_intermediate_dir_mode()) + for mode in ["rwx------", "rw-rw-rw-", "rw-r--r--"] : + self.env.set_intermediate_dir_mode(mode) + self.assertEqual(mode, self.env.get_intermediate_dir_mode()) + self.assertRaises(db.DBInvalidArgError, + self.env.set_intermediate_dir_mode, "abcde") + if db.version() >= (4, 6) : def test_thread(self) : for i in [16, 100, 1000] : @@ -115,7 +134,7 @@ class DBEnv_general(DBEnv) : self.assertEqual(i, self.env.get_lk_max_lockers()) def test_lg_regionmax(self) : - for i in [128, 256, 1024] : + for i in [128, 256, 1000] : i = i*1024*1024 self.env.set_lg_regionmax(i) j = self.env.get_lg_regionmax() @@ -172,8 +191,12 @@ class DBEnv_general(DBEnv) : self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) cachesize = (0, 2*1024*1024, 1) self.assertRaises(db.DBInvalidArgError, - self.env.set_cachesize, *cachesize) - self.assertEqual(cachesize2, self.env.get_cachesize()) + self.env.set_cachesize, *cachesize) + cachesize3 = self.env.get_cachesize() + self.assertEqual(cachesize2[0], cachesize3[0]) + self.assertEqual(cachesize2[2], cachesize3[2]) + # In Berkeley DB 5.3, the cachesize can change when opening the Env + self.assertTrue(cachesize2[1] <= cachesize3[1]) def test_set_cachesize_dbenv_db(self) : # You can not configure the cachesize using diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index d2d12ff..e98e4bc 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -187,8 +187,10 @@ static PyObject* DBOldVersionError; /* DB_OLD_VERSION */ static PyObject* DBRunRecoveryError; /* DB_RUNRECOVERY */ static PyObject* DBVerifyBadError; /* DB_VERIFY_BAD */ static PyObject* DBNoServerError; /* DB_NOSERVER */ +#if (DBVER < 52) static PyObject* DBNoServerHomeError; /* DB_NOSERVER_HOME */ static PyObject* DBNoServerIDError; /* DB_NOSERVER_ID */ +#endif static PyObject* DBPageNotFoundError; /* DB_PAGE_NOTFOUND */ static PyObject* DBSecondaryBadError; /* DB_SECONDARY_BAD */ @@ -202,9 +204,7 @@ static PyObject* DBFileExistsError; /* EEXIST */ static PyObject* DBNoSuchFileError; /* ENOENT */ static PyObject* DBPermissionsError; /* EPERM */ -#if (DBVER >= 42) static PyObject* DBRepHandleDeadError; /* DB_REP_HANDLE_DEAD */ -#endif #if (DBVER >= 44) static PyObject* DBRepLockoutError; /* DB_REP_LOCKOUT */ #endif @@ -696,8 +696,10 @@ static int makeDBError(int err) case DB_RUNRECOVERY: errObj = DBRunRecoveryError; break; case DB_VERIFY_BAD: errObj = DBVerifyBadError; break; case DB_NOSERVER: errObj = DBNoServerError; break; +#if (DBVER < 52) case DB_NOSERVER_HOME: errObj = DBNoServerHomeError; break; case DB_NOSERVER_ID: errObj = DBNoServerIDError; break; +#endif case DB_PAGE_NOTFOUND: errObj = DBPageNotFoundError; break; case DB_SECONDARY_BAD: errObj = DBSecondaryBadError; break; case DB_BUFFER_SMALL: errObj = DBNoMemoryError; break; @@ -715,9 +717,7 @@ static int makeDBError(int err) case ENOENT: errObj = DBNoSuchFileError; break; case EPERM : errObj = DBPermissionsError; break; -#if (DBVER >= 42) case DB_REP_HANDLE_DEAD : errObj = DBRepHandleDeadError; break; -#endif #if (DBVER >= 44) case DB_REP_LOCKOUT : errObj = DBRepLockoutError; break; #endif @@ -2132,7 +2132,7 @@ DB_get_size(DBObject* self, PyObject* args, PyObject* kwargs) MYDB_BEGIN_ALLOW_THREADS; err = self->db->get(self->db, txn, &key, &data, flags); MYDB_END_ALLOW_THREADS; - if (err == DB_BUFFER_SMALL) { + if ((err == DB_BUFFER_SMALL) || (err == 0)) { retval = NUMBER_FromLong((long)data.size); err = 0; } @@ -2385,9 +2385,7 @@ DB_open(DBObject* self, PyObject* args, PyObject* kwargs) return NULL; } -#if (DBVER >= 42) self->db->get_flags(self->db, &self->setflags); -#endif self->flags = flags; @@ -2539,6 +2537,37 @@ DB_get_priority(DBObject* self) #endif static PyObject* +DB_get_dbname(DBObject* self) +{ + int err; + const char *filename, *dbname; + + CHECK_DB_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db->get_dbname(self->db, &filename, &dbname); + MYDB_END_ALLOW_THREADS; + RETURN_IF_ERR(); + /* If "dbname==NULL", it is correctly converted to "None" */ + return Py_BuildValue("(ss)", filename, dbname); +} + +static PyObject* +DB_get_open_flags(DBObject* self) +{ + int err; + unsigned int flags; + + CHECK_DB_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db->get_open_flags(self->db, &flags); + MYDB_END_ALLOW_THREADS; + RETURN_IF_ERR(); + return NUMBER_FromLong(flags); +} + +static PyObject* DB_set_q_extentsize(DBObject* self, PyObject* args) { int err; @@ -2555,7 +2584,6 @@ DB_set_q_extentsize(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_q_extentsize(DBObject* self) { @@ -2570,7 +2598,6 @@ DB_get_q_extentsize(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(extentsize); } -#endif static PyObject* DB_set_bt_minkey(DBObject* self, PyObject* args) @@ -2588,7 +2615,6 @@ DB_set_bt_minkey(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_bt_minkey(DBObject* self) { @@ -2603,7 +2629,6 @@ DB_get_bt_minkey(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(bt_minkey); } -#endif static int _default_cmp(const DBT *leftKey, @@ -2759,7 +2784,6 @@ DB_set_cachesize(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_cachesize(DBObject* self) { @@ -2777,7 +2801,6 @@ DB_get_cachesize(DBObject* self) return Py_BuildValue("(iii)", gbytes, bytes, ncache); } -#endif static PyObject* DB_set_flags(DBObject* self, PyObject* args) @@ -2797,7 +2820,6 @@ DB_set_flags(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_flags(DBObject* self) { @@ -2812,6 +2834,35 @@ DB_get_flags(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(flags); } + +#if (DBVER >= 43) +static PyObject* +DB_get_transactional(DBObject* self) +{ + int err; + + CHECK_DB_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db->get_transactional(self->db); + MYDB_END_ALLOW_THREADS; + + if(err == 0) { + Py_INCREF(Py_False); + return Py_False; + } else if(err == 1) { + Py_INCREF(Py_True); + return Py_True; + } + + /* + ** If we reach there, there was an error. The + ** "return" should be unreachable. + */ + RETURN_IF_ERR(); + assert(0); /* This coude SHOULD be unreachable */ + return NULL; +} #endif static PyObject* @@ -2830,7 +2881,6 @@ DB_set_h_ffactor(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_h_ffactor(DBObject* self) { @@ -2845,7 +2895,6 @@ DB_get_h_ffactor(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(ffactor); } -#endif static PyObject* DB_set_h_nelem(DBObject* self, PyObject* args) @@ -2863,7 +2912,6 @@ DB_set_h_nelem(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_h_nelem(DBObject* self) { @@ -2878,7 +2926,6 @@ DB_get_h_nelem(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(nelem); } -#endif static PyObject* DB_set_lorder(DBObject* self, PyObject* args) @@ -2896,7 +2943,6 @@ DB_set_lorder(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_lorder(DBObject* self) { @@ -2911,7 +2957,6 @@ DB_get_lorder(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lorder); } -#endif static PyObject* DB_set_pagesize(DBObject* self, PyObject* args) @@ -2929,7 +2974,6 @@ DB_set_pagesize(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_pagesize(DBObject* self) { @@ -2944,7 +2988,6 @@ DB_get_pagesize(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(pagesize); } -#endif static PyObject* DB_set_re_delim(DBObject* self, PyObject* args) @@ -2967,7 +3010,6 @@ DB_set_re_delim(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_re_delim(DBObject* self) { @@ -2981,7 +3023,6 @@ DB_get_re_delim(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(re_delim); } -#endif static PyObject* DB_set_re_len(DBObject* self, PyObject* args) @@ -2999,7 +3040,6 @@ DB_set_re_len(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_re_len(DBObject* self) { @@ -3014,7 +3054,6 @@ DB_get_re_len(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(re_len); } -#endif static PyObject* DB_set_re_pad(DBObject* self, PyObject* args) @@ -3036,7 +3075,6 @@ DB_set_re_pad(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_re_pad(DBObject* self) { @@ -3050,7 +3088,6 @@ DB_get_re_pad(DBObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(re_pad); } -#endif static PyObject* DB_set_re_source(DBObject* self, PyObject* args) @@ -3069,7 +3106,6 @@ DB_set_re_source(DBObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_re_source(DBObject* self) { @@ -3084,7 +3120,6 @@ DB_get_re_source(DBObject* self) RETURN_IF_ERR(); return PyBytes_FromString(source); } -#endif static PyObject* DB_stat(DBObject* self, PyObject* args, PyObject* kwargs) @@ -3381,7 +3416,6 @@ DB_set_encrypt(DBObject* self, PyObject* args, PyObject* kwargs) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DB_get_encrypt_flags(DBObject* self) { @@ -3396,7 +3430,6 @@ DB_get_encrypt_flags(DBObject* self) return NUMBER_FromLong(flags); } -#endif @@ -4987,7 +5020,6 @@ DBEnv_set_encrypt(DBEnvObject* self, PyObject* args, PyObject* kwargs) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_encrypt_flags(DBEnvObject* self) { @@ -5025,7 +5057,6 @@ DBEnv_get_timeout(DBEnvObject* self, PyObject* args, PyObject* kwargs) RETURN_IF_ERR(); return NUMBER_FromLong(timeout); } -#endif static PyObject* @@ -5064,7 +5095,6 @@ DBEnv_set_shm_key(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_shm_key(DBEnvObject* self) { @@ -5081,7 +5111,6 @@ DBEnv_get_shm_key(DBEnvObject* self) return NUMBER_FromLong(shm_key); } -#endif #if (DBVER >= 46) static PyObject* @@ -5170,7 +5199,6 @@ DBEnv_set_cachesize(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_cachesize(DBEnvObject* self) { @@ -5188,7 +5216,6 @@ DBEnv_get_cachesize(DBEnvObject* self) return Py_BuildValue("(iii)", gbytes, bytes, ncache); } -#endif static PyObject* @@ -5208,7 +5235,6 @@ DBEnv_set_flags(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_flags(DBEnvObject* self) { @@ -5223,7 +5249,6 @@ DBEnv_get_flags(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(flags); } -#endif #if (DBVER >= 47) static PyObject* @@ -5423,7 +5448,6 @@ DBEnv_set_data_dir(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_data_dirs(DBEnvObject* self) { @@ -5463,7 +5487,6 @@ DBEnv_get_data_dirs(DBEnvObject* self) } return tuple; } -#endif #if (DBVER >= 44) static PyObject* @@ -5513,7 +5536,6 @@ DBEnv_set_lg_bsize(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lg_bsize(DBEnvObject* self) { @@ -5528,7 +5550,6 @@ DBEnv_get_lg_bsize(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lg_bsize); } -#endif static PyObject* DBEnv_set_lg_dir(DBEnvObject* self, PyObject* args) @@ -5547,7 +5568,6 @@ DBEnv_set_lg_dir(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lg_dir(DBEnvObject* self) { @@ -5562,7 +5582,6 @@ DBEnv_get_lg_dir(DBEnvObject* self) RETURN_IF_ERR(); return PyBytes_FromString(dirp); } -#endif static PyObject* DBEnv_set_lg_max(DBEnvObject* self, PyObject* args) @@ -5580,7 +5599,6 @@ DBEnv_set_lg_max(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lg_max(DBEnvObject* self) { @@ -5595,8 +5613,6 @@ DBEnv_get_lg_max(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lg_max); } -#endif - static PyObject* DBEnv_set_lg_regionmax(DBEnvObject* self, PyObject* args) @@ -5614,7 +5630,6 @@ DBEnv_set_lg_regionmax(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lg_regionmax(DBEnvObject* self) { @@ -5629,7 +5644,6 @@ DBEnv_get_lg_regionmax(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lg_regionmax); } -#endif #if (DBVER >= 47) static PyObject* @@ -5680,7 +5694,6 @@ DBEnv_set_lk_detect(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lk_detect(DBEnvObject* self) { @@ -5695,8 +5708,6 @@ DBEnv_get_lk_detect(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lk_detect); } -#endif - #if (DBVER < 45) static PyObject* @@ -5734,7 +5745,6 @@ DBEnv_set_lk_max_locks(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lk_max_locks(DBEnvObject* self) { @@ -5749,7 +5759,6 @@ DBEnv_get_lk_max_locks(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lk_max); } -#endif static PyObject* DBEnv_set_lk_max_lockers(DBEnvObject* self, PyObject* args) @@ -5767,7 +5776,6 @@ DBEnv_set_lk_max_lockers(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lk_max_lockers(DBEnvObject* self) { @@ -5782,7 +5790,6 @@ DBEnv_get_lk_max_lockers(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lk_max); } -#endif static PyObject* DBEnv_set_lk_max_objects(DBEnvObject* self, PyObject* args) @@ -5800,7 +5807,6 @@ DBEnv_set_lk_max_objects(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_lk_max_objects(DBEnvObject* self) { @@ -5815,9 +5821,7 @@ DBEnv_get_lk_max_objects(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(lk_max); } -#endif -#if (DBVER >= 42) static PyObject* DBEnv_get_mp_mmapsize(DBEnvObject* self) { @@ -5832,8 +5836,6 @@ DBEnv_get_mp_mmapsize(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(mmapsize); } -#endif - static PyObject* DBEnv_set_mp_mmapsize(DBEnvObject* self, PyObject* args) @@ -5869,8 +5871,6 @@ DBEnv_set_tmp_dir(DBEnvObject* self, PyObject* args) RETURN_NONE(); } - -#if (DBVER >= 42) static PyObject* DBEnv_get_tmp_dir(DBEnvObject* self) { @@ -5887,8 +5887,6 @@ DBEnv_get_tmp_dir(DBEnvObject* self) return PyBytes_FromString(dirpp); } -#endif - static PyObject* DBEnv_txn_recover(DBEnvObject* self) @@ -5899,7 +5897,7 @@ DBEnv_txn_recover(DBEnvObject* self) DBTxnObject *txn; #define PREPLIST_LEN 16 DB_PREPLIST preplist[PREPLIST_LEN]; -#if (DBVER < 48) +#if (DBVER < 48 || DBVER > 51) long retp; #else u_int32_t retp; @@ -6003,8 +6001,6 @@ DBEnv_txn_checkpoint(DBEnvObject* self, PyObject* args) RETURN_NONE(); } - -#if (DBVER >= 42) static PyObject* DBEnv_get_tx_max(DBEnvObject* self) { @@ -6019,8 +6015,6 @@ DBEnv_get_tx_max(DBEnvObject* self) RETURN_IF_ERR(); return PyLong_FromUnsignedLong(max); } -#endif - static PyObject* DBEnv_set_tx_max(DBEnvObject* self, PyObject* args) @@ -6038,8 +6032,6 @@ DBEnv_set_tx_max(DBEnvObject* self, PyObject* args) RETURN_NONE(); } - -#if (DBVER >= 42) static PyObject* DBEnv_get_tx_timestamp(DBEnvObject* self) { @@ -6054,7 +6046,6 @@ DBEnv_get_tx_timestamp(DBEnvObject* self) RETURN_IF_ERR(); return NUMBER_FromLong(timestamp); } -#endif static PyObject* DBEnv_set_tx_timestamp(DBEnvObject* self, PyObject* args) @@ -6756,6 +6747,55 @@ DBEnv_set_private(DBEnvObject* self, PyObject* private_obj) RETURN_NONE(); } +#if (DBVER >= 47) +static PyObject* +DBEnv_set_intermediate_dir_mode(DBEnvObject* self, PyObject* args) +{ + int err; + const char *mode; + + if (!PyArg_ParseTuple(args,"s:set_intermediate_dir_mode", &mode)) + return NULL; + + CHECK_ENV_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db_env->set_intermediate_dir_mode(self->db_env, mode); + MYDB_END_ALLOW_THREADS; + RETURN_IF_ERR(); + RETURN_NONE(); +} + +static PyObject* +DBEnv_get_intermediate_dir_mode(DBEnvObject* self) +{ + int err; + const char *mode; + + CHECK_ENV_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db_env->get_intermediate_dir_mode(self->db_env, &mode); + MYDB_END_ALLOW_THREADS; + RETURN_IF_ERR(); + return Py_BuildValue("s", mode); +} +#endif + +static PyObject* +DBEnv_get_open_flags(DBEnvObject* self) +{ + int err; + unsigned int flags; + + CHECK_ENV_NOT_CLOSED(self); + + MYDB_BEGIN_ALLOW_THREADS; + err = self->db_env->get_open_flags(self->db_env, &flags); + MYDB_END_ALLOW_THREADS; + RETURN_IF_ERR(); + return NUMBER_FromLong(flags); +} #if (DBVER < 48) static PyObject* @@ -6875,7 +6915,6 @@ DBEnv_set_verbose(DBEnvObject* self, PyObject* args) RETURN_NONE(); } -#if (DBVER >= 42) static PyObject* DBEnv_get_verbose(DBEnvObject* self, PyObject* args) { @@ -6893,7 +6932,6 @@ DBEnv_get_verbose(DBEnvObject* self, PyObject* args) RETURN_IF_ERR(); return PyBool_FromLong(verbose); } -#endif #if (DBVER >= 45) static void @@ -6975,9 +7013,7 @@ DBEnv_rep_process_message(DBEnvObject* self, PyObject* args) PyObject *control_py, *rec_py; DBT control, rec; int envid; -#if (DBVER >= 42) DB_LSN lsn; -#endif if (!PyArg_ParseTuple(args, "OOi:rep_process_message", &control_py, &rec_py, &envid)) @@ -6994,13 +7030,8 @@ DBEnv_rep_process_message(DBEnvObject* self, PyObject* args) err = self->db_env->rep_process_message(self->db_env, &control, &rec, envid, &lsn); #else -#if (DBVER >= 42) err = self->db_env->rep_process_message(self->db_env, &control, &rec, &envid, &lsn); -#else - err = self->db_env->rep_process_message(self->db_env, &control, &rec, - &envid); -#endif #endif MYDB_END_ALLOW_THREADS; switch (err) { @@ -7029,12 +7060,10 @@ DBEnv_rep_process_message(DBEnvObject* self, PyObject* args) return r; break; } -#if (DBVER >= 42) case DB_REP_NOTPERM : case DB_REP_ISPERM : return Py_BuildValue("(i(ll))", err, lsn.file, lsn.offset); break; -#endif } RETURN_IF_ERR(); return Py_BuildValue("(OO)", Py_None, Py_None); @@ -7086,20 +7115,6 @@ _DBEnv_rep_transportCallback(DB_ENV* db_env, const DBT* control, const DBT* rec, return ret; } -#if (DBVER <= 41) -static int -_DBEnv_rep_transportCallbackOLD(DB_ENV* db_env, const DBT* control, const DBT* rec, - int envid, u_int32_t flags) -{ - DB_LSN lsn; - - lsn.file = -1; /* Dummy values */ - lsn.offset = -1; - return _DBEnv_rep_transportCallback(db_env, control, rec, &lsn, envid, - flags); -} -#endif - static PyObject* DBEnv_rep_set_transport(DBEnvObject* self, PyObject* args) { @@ -7120,13 +7135,8 @@ DBEnv_rep_set_transport(DBEnvObject* self, PyObject* args) err = self->db_env->rep_set_transport(self->db_env, envid, &_DBEnv_rep_transportCallback); #else -#if (DBVER >= 42) err = self->db_env->set_rep_transport(self->db_env, envid, &_DBEnv_rep_transportCallback); -#else - err = self->db_env->set_rep_transport(self->db_env, envid, - &_DBEnv_rep_transportCallbackOLD); -#endif #endif MYDB_END_ALLOW_THREADS; RETURN_IF_ERR(); @@ -7608,6 +7618,7 @@ DBEnv_repmgr_start(DBEnvObject* self, PyObject* args, PyObject* RETURN_NONE(); } +#if (DBVER < 52) static PyObject* DBEnv_repmgr_set_local_site(DBEnvObject* self, PyObject* args, PyObject* kwargs) @@ -7654,6 +7665,7 @@ DBEnv_repmgr_add_remote_site(DBEnvObject* self, PyObject* args, PyObject* RETURN_IF_ERR(); return NUMBER_FromLong(eidp); } +#endif static PyObject* DBEnv_repmgr_set_ack_policy(DBEnvObject* self, PyObject* args) @@ -8482,65 +8494,43 @@ static PyMethodDef DB_methods[] = { {"remove", (PyCFunction)DB_remove, METH_VARARGS|METH_KEYWORDS}, {"rename", (PyCFunction)DB_rename, METH_VARARGS}, {"set_bt_minkey", (PyCFunction)DB_set_bt_minkey, METH_VARARGS}, -#if (DBVER >= 42) {"get_bt_minkey", (PyCFunction)DB_get_bt_minkey, METH_NOARGS}, -#endif {"set_bt_compare", (PyCFunction)DB_set_bt_compare, METH_O}, {"set_cachesize", (PyCFunction)DB_set_cachesize, METH_VARARGS}, -#if (DBVER >= 42) {"get_cachesize", (PyCFunction)DB_get_cachesize, METH_NOARGS}, -#endif {"set_encrypt", (PyCFunction)DB_set_encrypt, METH_VARARGS|METH_KEYWORDS}, -#if (DBVER >= 42) {"get_encrypt_flags", (PyCFunction)DB_get_encrypt_flags, METH_NOARGS}, -#endif - {"set_flags", (PyCFunction)DB_set_flags, METH_VARARGS}, -#if (DBVER >= 42) {"get_flags", (PyCFunction)DB_get_flags, METH_NOARGS}, +#if (DBVER >= 43) + {"get_transactional", (PyCFunction)DB_get_transactional, METH_NOARGS}, #endif {"set_h_ffactor", (PyCFunction)DB_set_h_ffactor, METH_VARARGS}, -#if (DBVER >= 42) {"get_h_ffactor", (PyCFunction)DB_get_h_ffactor, METH_NOARGS}, -#endif {"set_h_nelem", (PyCFunction)DB_set_h_nelem, METH_VARARGS}, -#if (DBVER >= 42) {"get_h_nelem", (PyCFunction)DB_get_h_nelem, METH_NOARGS}, -#endif {"set_lorder", (PyCFunction)DB_set_lorder, METH_VARARGS}, -#if (DBVER >= 42) {"get_lorder", (PyCFunction)DB_get_lorder, METH_NOARGS}, -#endif {"set_pagesize", (PyCFunction)DB_set_pagesize, METH_VARARGS}, -#if (DBVER >= 42) {"get_pagesize", (PyCFunction)DB_get_pagesize, METH_NOARGS}, -#endif {"set_re_delim", (PyCFunction)DB_set_re_delim, METH_VARARGS}, -#if (DBVER >= 42) {"get_re_delim", (PyCFunction)DB_get_re_delim, METH_NOARGS}, -#endif {"set_re_len", (PyCFunction)DB_set_re_len, METH_VARARGS}, -#if (DBVER >= 42) {"get_re_len", (PyCFunction)DB_get_re_len, METH_NOARGS}, -#endif {"set_re_pad", (PyCFunction)DB_set_re_pad, METH_VARARGS}, -#if (DBVER >= 42) {"get_re_pad", (PyCFunction)DB_get_re_pad, METH_NOARGS}, -#endif {"set_re_source", (PyCFunction)DB_set_re_source, METH_VARARGS}, -#if (DBVER >= 42) {"get_re_source", (PyCFunction)DB_get_re_source, METH_NOARGS}, -#endif {"set_q_extentsize",(PyCFunction)DB_set_q_extentsize, METH_VARARGS}, -#if (DBVER >= 42) {"get_q_extentsize",(PyCFunction)DB_get_q_extentsize, METH_NOARGS}, -#endif {"set_private", (PyCFunction)DB_set_private, METH_O}, {"get_private", (PyCFunction)DB_get_private, METH_NOARGS}, #if (DBVER >= 46) {"set_priority", (PyCFunction)DB_set_priority, METH_VARARGS}, {"get_priority", (PyCFunction)DB_get_priority, METH_NOARGS}, #endif + {"get_dbname", (PyCFunction)DB_get_dbname, METH_NOARGS}, + {"get_open_flags", (PyCFunction)DB_get_open_flags, METH_NOARGS}, {"stat", (PyCFunction)DB_stat, METH_VARARGS|METH_KEYWORDS}, #if (DBVER >= 43) {"stat_print", (PyCFunction)DB_stat_print, @@ -8639,24 +8629,18 @@ static PyMethodDef DBEnv_methods[] = { {"get_thread_count", (PyCFunction)DBEnv_get_thread_count, METH_NOARGS}, #endif {"set_encrypt", (PyCFunction)DBEnv_set_encrypt, METH_VARARGS|METH_KEYWORDS}, -#if (DBVER >= 42) {"get_encrypt_flags", (PyCFunction)DBEnv_get_encrypt_flags, METH_NOARGS}, {"get_timeout", (PyCFunction)DBEnv_get_timeout, METH_VARARGS|METH_KEYWORDS}, -#endif {"set_timeout", (PyCFunction)DBEnv_set_timeout, METH_VARARGS|METH_KEYWORDS}, {"set_shm_key", (PyCFunction)DBEnv_set_shm_key, METH_VARARGS}, -#if (DBVER >= 42) {"get_shm_key", (PyCFunction)DBEnv_get_shm_key, METH_NOARGS}, -#endif #if (DBVER >= 46) {"set_cache_max", (PyCFunction)DBEnv_set_cache_max, METH_VARARGS}, {"get_cache_max", (PyCFunction)DBEnv_get_cache_max, METH_NOARGS}, #endif {"set_cachesize", (PyCFunction)DBEnv_set_cachesize, METH_VARARGS}, -#if (DBVER >= 42) {"get_cachesize", (PyCFunction)DBEnv_get_cachesize, METH_NOARGS}, -#endif {"memp_trickle", (PyCFunction)DBEnv_memp_trickle, METH_VARARGS}, {"memp_sync", (PyCFunction)DBEnv_memp_sync, METH_VARARGS}, {"memp_stat", (PyCFunction)DBEnv_memp_stat, @@ -8685,33 +8669,21 @@ static PyMethodDef DBEnv_methods[] = { #endif #endif {"set_data_dir", (PyCFunction)DBEnv_set_data_dir, METH_VARARGS}, -#if (DBVER >= 42) {"get_data_dirs", (PyCFunction)DBEnv_get_data_dirs, METH_NOARGS}, -#endif -#if (DBVER >= 42) {"get_flags", (PyCFunction)DBEnv_get_flags, METH_NOARGS}, -#endif {"set_flags", (PyCFunction)DBEnv_set_flags, METH_VARARGS}, #if (DBVER >= 47) {"log_set_config", (PyCFunction)DBEnv_log_set_config, METH_VARARGS}, {"log_get_config", (PyCFunction)DBEnv_log_get_config, METH_VARARGS}, #endif {"set_lg_bsize", (PyCFunction)DBEnv_set_lg_bsize, METH_VARARGS}, -#if (DBVER >= 42) {"get_lg_bsize", (PyCFunction)DBEnv_get_lg_bsize, METH_NOARGS}, -#endif {"set_lg_dir", (PyCFunction)DBEnv_set_lg_dir, METH_VARARGS}, -#if (DBVER >= 42) {"get_lg_dir", (PyCFunction)DBEnv_get_lg_dir, METH_NOARGS}, -#endif {"set_lg_max", (PyCFunction)DBEnv_set_lg_max, METH_VARARGS}, -#if (DBVER >= 42) {"get_lg_max", (PyCFunction)DBEnv_get_lg_max, METH_NOARGS}, -#endif {"set_lg_regionmax",(PyCFunction)DBEnv_set_lg_regionmax, METH_VARARGS}, -#if (DBVER >= 42) {"get_lg_regionmax",(PyCFunction)DBEnv_get_lg_regionmax, METH_NOARGS}, -#endif #if (DBVER >= 44) {"set_lg_filemode", (PyCFunction)DBEnv_set_lg_filemode, METH_VARARGS}, {"get_lg_filemode", (PyCFunction)DBEnv_get_lg_filemode, METH_NOARGS}, @@ -8721,36 +8693,24 @@ static PyMethodDef DBEnv_methods[] = { {"get_lk_partitions", (PyCFunction)DBEnv_get_lk_partitions, METH_NOARGS}, #endif {"set_lk_detect", (PyCFunction)DBEnv_set_lk_detect, METH_VARARGS}, -#if (DBVER >= 42) {"get_lk_detect", (PyCFunction)DBEnv_get_lk_detect, METH_NOARGS}, -#endif #if (DBVER < 45) {"set_lk_max", (PyCFunction)DBEnv_set_lk_max, METH_VARARGS}, #endif {"set_lk_max_locks", (PyCFunction)DBEnv_set_lk_max_locks, METH_VARARGS}, -#if (DBVER >= 42) {"get_lk_max_locks", (PyCFunction)DBEnv_get_lk_max_locks, METH_NOARGS}, -#endif {"set_lk_max_lockers", (PyCFunction)DBEnv_set_lk_max_lockers, METH_VARARGS}, -#if (DBVER >= 42) {"get_lk_max_lockers", (PyCFunction)DBEnv_get_lk_max_lockers, METH_NOARGS}, -#endif {"set_lk_max_objects", (PyCFunction)DBEnv_set_lk_max_objects, METH_VARARGS}, -#if (DBVER >= 42) {"get_lk_max_objects", (PyCFunction)DBEnv_get_lk_max_objects, METH_NOARGS}, -#endif #if (DBVER >= 43) {"stat_print", (PyCFunction)DBEnv_stat_print, METH_VARARGS|METH_KEYWORDS}, #endif {"set_mp_mmapsize", (PyCFunction)DBEnv_set_mp_mmapsize, METH_VARARGS}, -#if (DBVER >= 42) {"get_mp_mmapsize", (PyCFunction)DBEnv_get_mp_mmapsize, METH_NOARGS}, -#endif {"set_tmp_dir", (PyCFunction)DBEnv_set_tmp_dir, METH_VARARGS}, -#if (DBVER >= 42) {"get_tmp_dir", (PyCFunction)DBEnv_get_tmp_dir, METH_NOARGS}, -#endif {"txn_begin", (PyCFunction)DBEnv_txn_begin, METH_VARARGS|METH_KEYWORDS}, {"txn_checkpoint", (PyCFunction)DBEnv_txn_checkpoint, METH_VARARGS}, {"txn_stat", (PyCFunction)DBEnv_txn_stat, METH_VARARGS}, @@ -8758,10 +8718,8 @@ static PyMethodDef DBEnv_methods[] = { {"txn_stat_print", (PyCFunction)DBEnv_txn_stat_print, METH_VARARGS|METH_KEYWORDS}, #endif -#if (DBVER >= 42) {"get_tx_max", (PyCFunction)DBEnv_get_tx_max, METH_NOARGS}, {"get_tx_timestamp", (PyCFunction)DBEnv_get_tx_timestamp, METH_NOARGS}, -#endif {"set_tx_max", (PyCFunction)DBEnv_set_tx_max, METH_VARARGS}, {"set_tx_timestamp", (PyCFunction)DBEnv_set_tx_timestamp, METH_VARARGS}, {"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS}, @@ -8804,11 +8762,16 @@ static PyMethodDef DBEnv_methods[] = { {"get_mp_max_write", (PyCFunction)DBEnv_get_mp_max_write, METH_NOARGS}, #endif {"set_verbose", (PyCFunction)DBEnv_set_verbose, METH_VARARGS}, -#if (DBVER >= 42) - {"get_verbose", (PyCFunction)DBEnv_get_verbose, METH_VARARGS}, + {"get_verbose", (PyCFunction)DBEnv_get_verbose, METH_VARARGS}, + {"set_private", (PyCFunction)DBEnv_set_private, METH_O}, + {"get_private", (PyCFunction)DBEnv_get_private, METH_NOARGS}, + {"get_open_flags", (PyCFunction)DBEnv_get_open_flags, METH_NOARGS}, +#if (DBVER >= 47) + {"set_intermediate_dir_mode", (PyCFunction)DBEnv_set_intermediate_dir_mode, + METH_VARARGS}, + {"get_intermediate_dir_mode", (PyCFunction)DBEnv_get_intermediate_dir_mode, + METH_NOARGS}, #endif - {"set_private", (PyCFunction)DBEnv_set_private, METH_O}, - {"get_private", (PyCFunction)DBEnv_get_private, METH_NOARGS}, {"rep_start", (PyCFunction)DBEnv_rep_start, METH_VARARGS|METH_KEYWORDS}, {"rep_set_transport", (PyCFunction)DBEnv_rep_set_transport, METH_VARARGS}, @@ -8855,10 +8818,12 @@ static PyMethodDef DBEnv_methods[] = { #if (DBVER >= 45) {"repmgr_start", (PyCFunction)DBEnv_repmgr_start, METH_VARARGS|METH_KEYWORDS}, +#if (DBVER < 52) {"repmgr_set_local_site", (PyCFunction)DBEnv_repmgr_set_local_site, METH_VARARGS|METH_KEYWORDS}, {"repmgr_add_remote_site", (PyCFunction)DBEnv_repmgr_add_remote_site, METH_VARARGS|METH_KEYWORDS}, +#endif {"repmgr_set_ack_policy", (PyCFunction)DBEnv_repmgr_set_ack_policy, METH_VARARGS}, {"repmgr_get_ack_policy", (PyCFunction)DBEnv_repmgr_get_ack_policy, @@ -8922,13 +8887,9 @@ DBEnv_db_home_get(DBEnvObject* self) CHECK_ENV_NOT_CLOSED(self); -#if (DBVER >= 42) MYDB_BEGIN_ALLOW_THREADS; self->db_env->get_home(self->db_env, &home); MYDB_END_ALLOW_THREADS; -#else - home=self->db_env->db_home; -#endif if (home == NULL) { RETURN_NONE(); @@ -9298,10 +9259,25 @@ bsddb_version(PyObject* self) { int major, minor, patch; + /* This should be instantaneous, no need to release the GIL */ db_version(&major, &minor, &patch); return Py_BuildValue("(iii)", major, minor, patch); } +#if (DBVER >= 50) +static PyObject* +bsddb_version_full(PyObject* self) +{ + char *version_string; + int family, release, major, minor, patch; + + /* This should be instantaneous, no need to release the GIL */ + version_string = db_full_version(&family, &release, &major, &minor, &patch); + return Py_BuildValue("(siiiii)", + version_string, family, release, major, minor, patch); +} +#endif + /* List of functions defined in the module */ static PyMethodDef bsddb_methods[] = { @@ -9311,6 +9287,9 @@ static PyMethodDef bsddb_methods[] = { {"DBSequence", (PyCFunction)DBSequence_construct, METH_VARARGS | METH_KEYWORDS }, #endif {"version", (PyCFunction)bsddb_version, METH_NOARGS, bsddb_version_doc}, +#if (DBVER >= 50) + {"full_version", (PyCFunction)bsddb_version_full, METH_NOARGS}, +#endif {NULL, NULL} /* sentinel */ }; @@ -9328,6 +9307,11 @@ static BSDDB_api bsddb_api; */ #define ADD_INT(dict, NAME) _addIntToDict(dict, #NAME, NAME) +/* +** We can rename the module at import time, so the string allocated +** must be big enough, and any use of the name must use this particular +** string. +*/ #define MODULE_NAME_MAX_LEN 11 static char _bsddbModuleName[MODULE_NAME_MAX_LEN+1] = "_bsddb"; @@ -9428,16 +9412,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_MAX_RECORDS); #if (DBVER < 48) -#if (DBVER >= 42) ADD_INT(d, DB_RPCCLIENT); -#else - ADD_INT(d, DB_CLIENT); - /* allow apps to be written using DB_RPCCLIENT on older Berkeley DB */ - _addIntToDict(d, "DB_RPCCLIENT", DB_CLIENT); -#endif #endif -#if (DBVER < 48) +#if (DBVER < 48 || DBVER > 51) ADD_INT(d, DB_XA_CREATE); #endif @@ -9477,6 +9455,14 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_TXN_SYNC); ADD_INT(d, DB_TXN_NOWAIT); +#if (DBVER >= 51) + ADD_INT(d, DB_TXN_BULK); +#endif + +#if (DBVER >= 48) + ADD_INT(d, DB_CURSOR_BULK); +#endif + #if (DBVER >= 46) ADD_INT(d, DB_TXN_WAIT); #endif @@ -9561,9 +9547,7 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_ARCH_ABS); ADD_INT(d, DB_ARCH_DATA); ADD_INT(d, DB_ARCH_LOG); -#if (DBVER >= 42) ADD_INT(d, DB_ARCH_REMOVE); -#endif ADD_INT(d, DB_BTREE); ADD_INT(d, DB_HASH); @@ -9591,9 +9575,6 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_CACHED_COUNTS); #endif -#if (DBVER <= 41) - ADD_INT(d, DB_COMMIT); -#endif ADD_INT(d, DB_CONSUME); ADD_INT(d, DB_CONSUME_WAIT); ADD_INT(d, DB_CURRENT); @@ -9651,8 +9632,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_LOCK_DEADLOCK); ADD_INT(d, DB_LOCK_NOTGRANTED); ADD_INT(d, DB_NOSERVER); +#if (DBVER < 52) ADD_INT(d, DB_NOSERVER_HOME); ADD_INT(d, DB_NOSERVER_ID); +#endif ADD_INT(d, DB_NOTFOUND); ADD_INT(d, DB_OLD_VERSION); ADD_INT(d, DB_RUNRECOVERY); @@ -9671,6 +9654,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ #if (DBVER >= 43) ADD_INT(d, DB_STAT_SUBSYSTEM); ADD_INT(d, DB_STAT_MEMP_HASH); + ADD_INT(d, DB_STAT_LOCK_CONF); + ADD_INT(d, DB_STAT_LOCK_LOCKERS); + ADD_INT(d, DB_STAT_LOCK_OBJECTS); + ADD_INT(d, DB_STAT_LOCK_PARAMS); #endif #if (DBVER >= 48) @@ -9690,7 +9677,6 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_EID_INVALID); ADD_INT(d, DB_EID_BROADCAST); -#if (DBVER >= 42) ADD_INT(d, DB_TIME_NOTGRANTED); ADD_INT(d, DB_TXN_NOT_DURABLE); ADD_INT(d, DB_TXN_WRITE_NOSYNC); @@ -9698,9 +9684,8 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_INIT_REP); ADD_INT(d, DB_ENCRYPT); ADD_INT(d, DB_CHKSUM); -#endif -#if (DBVER >= 42) && (DBVER < 47) +#if (DBVER < 47) ADD_INT(d, DB_LOG_AUTOREMOVE); ADD_INT(d, DB_DIRECT_LOG); #endif @@ -9733,6 +9718,20 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_VERB_REPLICATION); ADD_INT(d, DB_VERB_WAITSFOR); +#if (DBVER >= 50) + ADD_INT(d, DB_VERB_REP_SYSTEM); +#endif + +#if (DBVER >= 47) + ADD_INT(d, DB_VERB_REP_ELECT); + ADD_INT(d, DB_VERB_REP_LEASE); + ADD_INT(d, DB_VERB_REP_MISC); + ADD_INT(d, DB_VERB_REP_MSGS); + ADD_INT(d, DB_VERB_REP_SYNC); + ADD_INT(d, DB_VERB_REPMGR_CONNFAIL); + ADD_INT(d, DB_VERB_REPMGR_MISC); +#endif + #if (DBVER >= 45) ADD_INT(d, DB_EVENT_PANIC); ADD_INT(d, DB_EVENT_REP_CLIENT); @@ -9748,16 +9747,25 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_EVENT_WRITE_FAILED); #endif +#if (DBVER >= 50) + ADD_INT(d, DB_REPMGR_CONF_ELECTIONS); + ADD_INT(d, DB_EVENT_REP_MASTER_FAILURE); + ADD_INT(d, DB_EVENT_REP_DUPMASTER); + ADD_INT(d, DB_EVENT_REP_ELECTION_FAILED); +#endif +#if (DBVER >= 48) + ADD_INT(d, DB_EVENT_REG_ALIVE); + ADD_INT(d, DB_EVENT_REG_PANIC); +#endif + ADD_INT(d, DB_REP_DUPMASTER); ADD_INT(d, DB_REP_HOLDELECTION); #if (DBVER >= 44) ADD_INT(d, DB_REP_IGNORE); ADD_INT(d, DB_REP_JOIN_FAILURE); #endif -#if (DBVER >= 42) ADD_INT(d, DB_REP_ISPERM); ADD_INT(d, DB_REP_NOTPERM); -#endif ADD_INT(d, DB_REP_NEWSITE); ADD_INT(d, DB_REP_MASTER); @@ -9766,7 +9774,13 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_REP_PERMANENT); #if (DBVER >= 44) +#if (DBVER >= 50) + ADD_INT(d, DB_REP_CONF_AUTOINIT); +#else ADD_INT(d, DB_REP_CONF_NOAUTOINIT); +#endif /* 5.0 */ +#endif /* 4.4 */ +#if (DBVER >= 44) ADD_INT(d, DB_REP_CONF_DELAYCLIENT); ADD_INT(d, DB_REP_CONF_BULK); ADD_INT(d, DB_REP_CONF_NOWAIT); @@ -9774,9 +9788,7 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_REP_REREQUEST); #endif -#if (DBVER >= 42) ADD_INT(d, DB_REP_NOBUFFER); -#endif #if (DBVER >= 46) ADD_INT(d, DB_REP_LEASE_EXPIRED); @@ -9819,6 +9831,28 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_STAT_ALL); #endif +#if (DBVER >= 51) + ADD_INT(d, DB_REPMGR_ACKS_ALL_AVAILABLE); +#endif + +#if (DBVER >= 48) + ADD_INT(d, DB_REP_CONF_INMEM); +#endif + + ADD_INT(d, DB_TIMEOUT); + +#if (DBVER >= 50) + ADD_INT(d, DB_FORCESYNC); +#endif + +#if (DBVER >= 48) + ADD_INT(d, DB_FAILCHK); +#endif + +#if (DBVER >= 51) + ADD_INT(d, DB_HOTBACKUP_IN_PROGRESS); +#endif + #if (DBVER >= 43) ADD_INT(d, DB_BUFFER_SMALL); ADD_INT(d, DB_SEQ_DEC); @@ -9856,6 +9890,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ ADD_INT(d, DB_SET_LOCK_TIMEOUT); ADD_INT(d, DB_SET_TXN_TIMEOUT); +#if (DBVER >= 48) + ADD_INT(d, DB_SET_REG_TIMEOUT); +#endif + /* The exception name must be correct for pickled exception * * objects to unpickle properly. */ #ifdef PYBSDDB_STANDALONE /* different value needed for standalone pybsddb */ @@ -9912,8 +9950,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ MAKE_EX(DBRunRecoveryError); MAKE_EX(DBVerifyBadError); MAKE_EX(DBNoServerError); +#if (DBVER >= 44 && DBVER < 52) MAKE_EX(DBNoServerHomeError); MAKE_EX(DBNoServerIDError); +#endif MAKE_EX(DBPageNotFoundError); MAKE_EX(DBSecondaryBadError); @@ -9927,9 +9967,7 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ MAKE_EX(DBNoSuchFileError); MAKE_EX(DBPermissionsError); -#if (DBVER >= 42) MAKE_EX(DBRepHandleDeadError); -#endif #if (DBVER >= 44) MAKE_EX(DBRepLockoutError); #endif @@ -9947,6 +9985,7 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ #undef MAKE_EX /* Initialise the C API structure and add it to the module */ + bsddb_api.api_version = PYBSDDB_API_VERSION; bsddb_api.db_type = &DB_Type; bsddb_api.dbcursor_type = &DBCursor_Type; bsddb_api.dblogcursor_type = &DBLogCursor_Type; @@ -9955,19 +9994,25 @@ PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ bsddb_api.dblock_type = &DBLock_Type; #if (DBVER >= 43) bsddb_api.dbsequence_type = &DBSequence_Type; +#else + bsddb_api.dbsequence_type = NULL; #endif bsddb_api.makeDBError = makeDBError; /* - ** Capsules exist from Python 3.1, but I - ** don't want to break the API compatibility - ** for already published Python versions. + ** Capsules exist from Python 2.7 and 3.1. + ** We don't support Python 3.0 anymore, so... + ** #if (PY_VERSION_HEX < ((PY_MAJOR_VERSION < 3) ? 0x02070000 : 0x03020000)) */ -#if (PY_VERSION_HEX < 0x03020000) +#if (PY_VERSION_HEX < 0x02070000) py_api = PyCObject_FromVoidPtr((void*)&bsddb_api, NULL); #else { - char py_api_name[250]; + /* + ** The data must outlive the call!!. So, the static definition. + ** The buffer must be big enough... + */ + static char py_api_name[MODULE_NAME_MAX_LEN+10]; strcpy(py_api_name, _bsddbModuleName); strcat(py_api_name, ".api"); diff --git a/Modules/bsddb.h b/Modules/bsddb.h index a3a687b..c1d862a 100644 --- a/Modules/bsddb.h +++ b/Modules/bsddb.h @@ -109,7 +109,7 @@ #error "eek! DBVER can't handle minor versions > 9" #endif -#define PY_BSDDB_VERSION "4.8.4.2" +#define PY_BSDDB_VERSION "5.3.15" /* Python object definitions */ @@ -236,7 +236,7 @@ typedef struct DBSequenceObject { /* To access the structure from an external module, use code like the following (error checking missed out for clarity): - // If you are using Python before 3.2: + // If you are using Python before 2.7: BSDDB_api* bsddb_api; PyObject* mod; PyObject* cobj; @@ -249,7 +249,7 @@ typedef struct DBSequenceObject { Py_DECREF(mod); - // If you are using Python 3.2 or up: + // If you are using Python 2.7 or up: (except Python 3.0, unsupported) BSDDB_api* bsddb_api; // Use "bsddb3._pybsddb.api" if you're using @@ -257,10 +257,14 @@ typedef struct DBSequenceObject { bsddb_api = (void **)PyCapsule_Import("bsddb._bsddb.api", 1); + Check "api_version" number before trying to use the API. + The structure's members must not be changed. */ +#define PYBSDDB_API_VERSION 1 typedef struct { + unsigned int api_version; /* Type objects */ PyTypeObject* db_type; PyTypeObject* dbcursor_type; @@ -268,9 +272,7 @@ typedef struct { PyTypeObject* dbenv_type; PyTypeObject* dbtxn_type; PyTypeObject* dblock_type; -#if (DBVER >= 43) - PyTypeObject* dbsequence_type; -#endif + PyTypeObject* dbsequence_type; /* If DBVER < 43 -> NULL */ /* Functions */ int (*makeDBError)(int err); @@ -289,9 +291,9 @@ typedef struct { #define DBEnvObject_Check(v) ((v)->ob_type == bsddb_api->dbenv_type) #define DBTxnObject_Check(v) ((v)->ob_type == bsddb_api->dbtxn_type) #define DBLockObject_Check(v) ((v)->ob_type == bsddb_api->dblock_type) -#if (DBVER >= 43) -#define DBSequenceObject_Check(v) ((v)->ob_type == bsddb_api->dbsequence_type) -#endif +#define DBSequenceObject_Check(v) \ + ((bsddb_api->dbsequence_type) && \ + ((v)->ob_type == bsddb_api->dbsequence_type)) #endif /* COMPILING_BSDDB_C */ diff --git a/setup.py b/setup.py index 6b47451..e8ac96c 100644 --- a/setup.py +++ b/setup.py @@ -799,7 +799,7 @@ class PyBuildExt(build_ext): # a release. Most open source OSes come with one or more # versions of BerkeleyDB already installed. - max_db_ver = (4, 8) + max_db_ver = (5, 3) min_db_ver = (4, 1) db_setup_debug = False # verbose debug prints from this script? @@ -821,7 +821,11 @@ class PyBuildExt(build_ext): return True def gen_db_minor_ver_nums(major): - if major == 4: + if major == 5: + for x in range(max_db_ver[1]+1): + if allow_db_ver((5, x)): + yield x + elif major == 4: for x in range(max_db_ver[1]+1): if allow_db_ver((4, x)): yield x @@ -835,6 +839,9 @@ class PyBuildExt(build_ext): # construct a list of paths to look for the header file in on # top of the normal inc_dirs. db_inc_paths = [ + '/usr/include/db5', + '/usr/local/include/db5', + '/opt/sfw/include/db5', '/usr/include/db4', '/usr/local/include/db4', '/opt/sfw/include/db4', @@ -845,6 +852,16 @@ class PyBuildExt(build_ext): '/sw/include/db4', '/sw/include/db3', ] + # 5.x minor number specific paths + for x in gen_db_minor_ver_nums(5): + db_inc_paths.append('/usr/include/db5%d' % x) + db_inc_paths.append('/usr/include/db5.%d' % x) + db_inc_paths.append('/usr/local/BerkeleyDB.5.%d/include' % x) + db_inc_paths.append('/usr/local/include/db5%d' % x) + db_inc_paths.append('/pkg/db-5.%d/include' % x) + db_inc_paths.append('/opt/db-5.%d/include' % x) + # MacPorts default (http://www.macports.org/) + db_inc_paths.append('/opt/local/include/db5%d' % x) # 4.x minor number specific paths for x in gen_db_minor_ver_nums(4): db_inc_paths.append('/usr/include/db4%d' % x) @@ -871,6 +888,10 @@ class PyBuildExt(build_ext): for dn in inc_dirs: std_variants.append(os.path.join(dn, 'db3')) std_variants.append(os.path.join(dn, 'db4')) + std_variants.append(os.path.join(dn, 'db5')) + for x in gen_db_minor_ver_nums(5): + std_variants.append(os.path.join(dn, "db5%d"%x)) + std_variants.append(os.path.join(dn, "db5.%d"%x)) for x in gen_db_minor_ver_nums(4): std_variants.append(os.path.join(dn, "db4%d"%x)) std_variants.append(os.path.join(dn, "db4.%d"%x)) -- 1.7.7 ./python-fix-build-error-with-Readline-6.3.patch0000664000175000017500000000330512511411357022006 0ustar nielsenrnielsenrpython: fix build error with Readline 6.3 Backport two patches from upstream: use new readline function types (closes #20374) Issue #20374: Avoid compiler warnings when compiling readline with libedit. Upstream-Status: Backport Signed-off-by: Chong Lu --- Modules/readline.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Modules/readline.c b/Modules/readline.c index b5e258d..d3f52aa 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -735,15 +735,24 @@ on_hook(PyObject *func) return result; } + static int +#if defined(_RL_FUNCTION_TYPEDEF) on_startup_hook(void) +#else +on_startup_hook() +#endif { return on_hook(startup_hook); } #ifdef HAVE_RL_PRE_INPUT_HOOK static int +#if defined(_RL_FUNCTION_TYPEDEF) on_pre_input_hook(void) +#else +on_pre_input_hook() +#endif { return on_hook(pre_input_hook); } @@ -886,12 +895,12 @@ setup_readline(void) rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); /* Set our hook functions */ - rl_startup_hook = (Function *)on_startup_hook; + rl_startup_hook = (rl_hook_func_t *)on_startup_hook; #ifdef HAVE_RL_PRE_INPUT_HOOK - rl_pre_input_hook = (Function *)on_pre_input_hook; + rl_pre_input_hook = (rl_hook_func_t *)on_pre_input_hook; #endif /* Set our completion function */ - rl_attempted_completion_function = (CPPFunction *)flex_complete; + rl_attempted_completion_function = (rl_completion_func_t *)flex_complete; /* Set Python word break characters */ rl_completer_word_break_characters = strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); -- 1.7.9.5 ./CVE-2013-4073_py27.patch0000664000175000017500000002662212511411357014742 0ustar nielsenrnielsenrUpstream-Status: Backport Signed-off-by: Saul Wold diff -r 9ddc63c039ba Lib/test/nullbytecert.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/nullbytecert.pem Sun Aug 11 18:13:17 2013 +0200 @@ -0,0 +1,90 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=Oregon, L=Beaverton, O=Python Software Foundation, OU=Python Core Development, CN=null.python.org\x00example.org/emailAddress=python-dev@python.org + Validity + Not Before: Aug 7 13:11:52 2013 GMT + Not After : Aug 7 13:12:52 2013 GMT + Subject: C=US, ST=Oregon, L=Beaverton, O=Python Software Foundation, OU=Python Core Development, CN=null.python.org\x00example.org/emailAddress=python-dev@python.org + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:b5:ea:ed:c9:fb:46:7d:6f:3b:76:80:dd:3a:f3: + 03:94:0b:a7:a6:db:ec:1d:df:ff:23:74:08:9d:97: + 16:3f:a3:a4:7b:3e:1b:0e:96:59:25:03:a7:26:e2: + 88:a9:cf:79:cd:f7:04:56:b0:ab:79:32:6e:59:c1: + 32:30:54:eb:58:a8:cb:91:f0:42:a5:64:27:cb:d4: + 56:31:88:52:ad:cf:bd:7f:f0:06:64:1f:cc:27:b8: + a3:8b:8c:f3:d8:29:1f:25:0b:f5:46:06:1b:ca:02: + 45:ad:7b:76:0a:9c:bf:bb:b9:ae:0d:16:ab:60:75: + ae:06:3e:9c:7c:31:dc:92:2f:29:1a:e0:4b:0c:91: + 90:6c:e9:37:c5:90:d7:2a:d7:97:15:a3:80:8f:5d: + 7b:49:8f:54:30:d4:97:2c:1c:5b:37:b5:ab:69:30: + 68:43:d3:33:78:4b:02:60:f5:3c:44:80:a1:8f:e7: + f0:0f:d1:5e:87:9e:46:cf:62:fc:f9:bf:0c:65:12: + f1:93:c8:35:79:3f:c8:ec:ec:47:f5:ef:be:44:d5: + ae:82:1e:2d:9a:9f:98:5a:67:65:e1:74:70:7c:cb: + d3:c2:ce:0e:45:49:27:dc:e3:2d:d4:fb:48:0e:2f: + 9e:77:b8:14:46:c0:c4:36:ca:02:ae:6a:91:8c:da: + 2f:85 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + 88:5A:55:C0:52:FF:61:CD:52:A3:35:0F:EA:5A:9C:24:38:22:F7:5C + X509v3 Key Usage: + Digital Signature, Non Repudiation, Key Encipherment + X509v3 Subject Alternative Name: + ************************************************************* + WARNING: The values for DNS, email and URI are WRONG. OpenSSL + doesn't print the text after a NULL byte. + ************************************************************* + DNS:altnull.python.org, email:null@python.org, URI:http://null.python.org, IP Address:192.0.2.1, IP Address:2001:DB8:0:0:0:0:0:1 + Signature Algorithm: sha1WithRSAEncryption + ac:4f:45:ef:7d:49:a8:21:70:8e:88:59:3e:d4:36:42:70:f5: + a3:bd:8b:d7:a8:d0:58:f6:31:4a:b1:a4:a6:dd:6f:d9:e8:44: + 3c:b6:0a:71:d6:7f:b1:08:61:9d:60:ce:75:cf:77:0c:d2:37: + 86:02:8d:5e:5d:f9:0f:71:b4:16:a8:c1:3d:23:1c:f1:11:b3: + 56:6e:ca:d0:8d:34:94:e6:87:2a:99:f2:ae:ae:cc:c2:e8:86: + de:08:a8:7f:c5:05:fa:6f:81:a7:82:e6:d0:53:9d:34:f4:ac: + 3e:40:fe:89:57:7a:29:a4:91:7e:0b:c6:51:31:e5:10:2f:a4: + 60:76:cd:95:51:1a:be:8b:a1:b0:fd:ad:52:bd:d7:1b:87:60: + d2:31:c7:17:c4:18:4f:2d:08:25:a3:a7:4f:b7:92:ca:e2:f5: + 25:f1:54:75:81:9d:b3:3d:61:a2:f7:da:ed:e1:c6:6f:2c:60: + 1f:d8:6f:c5:92:05:ab:c9:09:62:49:a9:14:ad:55:11:cc:d6: + 4a:19:94:99:97:37:1d:81:5f:8b:cf:a3:a8:96:44:51:08:3d: + 0b:05:65:12:eb:b6:70:80:88:48:72:4f:c6:c2:da:cf:cd:8e: + 5b:ba:97:2f:60:b4:96:56:49:5e:3a:43:76:63:04:be:2a:f6: + c1:ca:a9:94 +-----BEGIN CERTIFICATE----- +MIIE2DCCA8CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBxTELMAkGA1UEBhMCVVMx +DzANBgNVBAgMBk9yZWdvbjESMBAGA1UEBwwJQmVhdmVydG9uMSMwIQYDVQQKDBpQ +eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEgMB4GA1UECwwXUHl0aG9uIENvcmUg +RGV2ZWxvcG1lbnQxJDAiBgNVBAMMG251bGwucHl0aG9uLm9yZwBleGFtcGxlLm9y +ZzEkMCIGCSqGSIb3DQEJARYVcHl0aG9uLWRldkBweXRob24ub3JnMB4XDTEzMDgw +NzEzMTE1MloXDTEzMDgwNzEzMTI1MlowgcUxCzAJBgNVBAYTAlVTMQ8wDQYDVQQI +DAZPcmVnb24xEjAQBgNVBAcMCUJlYXZlcnRvbjEjMCEGA1UECgwaUHl0aG9uIFNv +ZnR3YXJlIEZvdW5kYXRpb24xIDAeBgNVBAsMF1B5dGhvbiBDb3JlIERldmVsb3Bt +ZW50MSQwIgYDVQQDDBtudWxsLnB5dGhvbi5vcmcAZXhhbXBsZS5vcmcxJDAiBgkq +hkiG9w0BCQEWFXB5dGhvbi1kZXZAcHl0aG9uLm9yZzCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBALXq7cn7Rn1vO3aA3TrzA5QLp6bb7B3f/yN0CJ2XFj+j +pHs+Gw6WWSUDpybiiKnPec33BFawq3kyblnBMjBU61ioy5HwQqVkJ8vUVjGIUq3P +vX/wBmQfzCe4o4uM89gpHyUL9UYGG8oCRa17dgqcv7u5rg0Wq2B1rgY+nHwx3JIv +KRrgSwyRkGzpN8WQ1yrXlxWjgI9de0mPVDDUlywcWze1q2kwaEPTM3hLAmD1PESA +oY/n8A/RXoeeRs9i/Pm/DGUS8ZPINXk/yOzsR/XvvkTVroIeLZqfmFpnZeF0cHzL +08LODkVJJ9zjLdT7SA4vnne4FEbAxDbKAq5qkYzaL4UCAwEAAaOB0DCBzTAMBgNV +HRMBAf8EAjAAMB0GA1UdDgQWBBSIWlXAUv9hzVKjNQ/qWpwkOCL3XDALBgNVHQ8E +BAMCBeAwgZAGA1UdEQSBiDCBhYIeYWx0bnVsbC5weXRob24ub3JnAGV4YW1wbGUu +Y29tgSBudWxsQHB5dGhvbi5vcmcAdXNlckBleGFtcGxlLm9yZ4YpaHR0cDovL251 +bGwucHl0aG9uLm9yZwBodHRwOi8vZXhhbXBsZS5vcmeHBMAAAgGHECABDbgAAAAA +AAAAAAAAAAEwDQYJKoZIhvcNAQEFBQADggEBAKxPRe99SaghcI6IWT7UNkJw9aO9 +i9eo0Fj2MUqxpKbdb9noRDy2CnHWf7EIYZ1gznXPdwzSN4YCjV5d+Q9xtBaowT0j +HPERs1ZuytCNNJTmhyqZ8q6uzMLoht4IqH/FBfpvgaeC5tBTnTT0rD5A/olXeimk +kX4LxlEx5RAvpGB2zZVRGr6LobD9rVK91xuHYNIxxxfEGE8tCCWjp0+3ksri9SXx +VHWBnbM9YaL32u3hxm8sYB/Yb8WSBavJCWJJqRStVRHM1koZlJmXNx2BX4vPo6iW +RFEIPQsFZRLrtnCAiEhyT8bC2s/Njlu6ly9gtJZWSV46Q3ZjBL4q9sHKqZQ= +-----END CERTIFICATE----- diff -r 9ddc63c039ba Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py Sun Aug 11 13:04:50 2013 +0300 +++ b/Lib/test/test_ssl.py Sun Aug 11 18:13:17 2013 +0200 @@ -25,6 +25,7 @@ HOST = test_support.HOST CERTFILE = None SVN_PYTHON_ORG_ROOT_CERT = None +NULLBYTECERT = None def handle_error(prefix): exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) @@ -123,6 +124,27 @@ ('DNS', 'projects.forum.nokia.com')) ) + def test_parse_cert_CVE_2013_4073(self): + p = ssl._ssl._test_decode_cert(NULLBYTECERT) + if test_support.verbose: + sys.stdout.write("\n" + pprint.pformat(p) + "\n") + subject = ((('countryName', 'US'),), + (('stateOrProvinceName', 'Oregon'),), + (('localityName', 'Beaverton'),), + (('organizationName', 'Python Software Foundation'),), + (('organizationalUnitName', 'Python Core Development'),), + (('commonName', 'null.python.org\x00example.org'),), + (('emailAddress', 'python-dev@python.org'),)) + self.assertEqual(p['subject'], subject) + self.assertEqual(p['issuer'], subject) + self.assertEqual(p['subjectAltName'], + (('DNS', 'altnull.python.org\x00example.com'), + ('email', 'null@python.org\x00user@example.org'), + ('URI', 'http://null.python.org\x00http://example.org'), + ('IP Address', '192.0.2.1'), + ('IP Address', '2001:DB8:0:0:0:0:0:1\n')) + ) + def test_DER_to_PEM(self): with open(SVN_PYTHON_ORG_ROOT_CERT, 'r') as f: pem = f.read() @@ -1360,7 +1382,7 @@ def test_main(verbose=False): - global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, NOKIACERT + global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, NOKIACERT, NULLBYTECERT CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "keycert.pem") SVN_PYTHON_ORG_ROOT_CERT = os.path.join( @@ -1368,10 +1390,13 @@ "https_svn_python_org_root.pem") NOKIACERT = os.path.join(os.path.dirname(__file__) or os.curdir, "nokia.pem") + NULLBYTECERT = os.path.join(os.path.dirname(__file__) or os.curdir, + "nullbytecert.pem") if (not os.path.exists(CERTFILE) or not os.path.exists(SVN_PYTHON_ORG_ROOT_CERT) or - not os.path.exists(NOKIACERT)): + not os.path.exists(NOKIACERT) or + not os.path.exists(NULLBYTECERT)): raise test_support.TestFailed("Can't read certificate files!") tests = [BasicTests, BasicSocketTests] diff -r 9ddc63c039ba Modules/_ssl.c --- a/Modules/_ssl.c Sun Aug 11 13:04:50 2013 +0300 +++ b/Modules/_ssl.c Sun Aug 11 18:13:17 2013 +0200 @@ -741,8 +741,13 @@ /* get a rendering of each name in the set of names */ + int gntype; + ASN1_STRING *as = NULL; + name = sk_GENERAL_NAME_value(names, j); - if (name->type == GEN_DIRNAME) { + gntype = name-> type; + switch (gntype) { + case GEN_DIRNAME: /* we special-case DirName as a tuple of tuples of attributes */ @@ -764,11 +769,61 @@ goto fail; } PyTuple_SET_ITEM(t, 1, v); + break; - } else { + case GEN_EMAIL: + case GEN_DNS: + case GEN_URI: + /* GENERAL_NAME_print() doesn't handle NUL bytes in ASN1_string + correctly. */ + t = PyTuple_New(2); + if (t == NULL) + goto fail; + switch (gntype) { + case GEN_EMAIL: + v = PyUnicode_FromString("email"); + as = name->d.rfc822Name; + break; + case GEN_DNS: + v = PyUnicode_FromString("DNS"); + as = name->d.dNSName; + break; + case GEN_URI: + v = PyUnicode_FromString("URI"); + as = name->d.uniformResourceIdentifier; + break; + } + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 0, v); + v = PyString_FromStringAndSize((char *)ASN1_STRING_data(as), + ASN1_STRING_length(as)); + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 1, v); + break; + default: /* for everything else, we use the OpenSSL print form */ - + switch (gntype) { + /* check for new general name type */ + case GEN_OTHERNAME: + case GEN_X400: + case GEN_EDIPARTY: + case GEN_IPADD: + case GEN_RID: + break; + default: + if (PyErr_Warn(PyExc_RuntimeWarning, + "Unknown general name type") == -1) { + goto fail; + } + break; + } (void) BIO_reset(biobuf); GENERAL_NAME_print(biobuf, name); len = BIO_gets(biobuf, buf, sizeof(buf)-1); @@ -794,6 +849,7 @@ goto fail; } PyTuple_SET_ITEM(t, 1, v); + break; } /* and add that rendering to the list */ ./python-2.7.3-remove-bsdb-rpath.patch0000664000175000017500000000245112511411357017765 0ustar nielsenrnielsenrUpstream-Status: Inappropriate [embedded specific] Remove the RPATH to avoid QA issue warning. RP: Added secondary unnecessary rpath to the list 2012/8/7 Signed-off-by: Jackie Huang Index: Python-2.7.3/setup.py =================================================================== --- Python-2.7.3.orig/setup.py 2012-08-07 10:41:58.560132529 +0000 +++ Python-2.7.3/setup.py 2012-08-07 11:09:47.852094515 +0000 @@ -1042,7 +1042,6 @@ exts.append(Extension('_bsddb', ['_bsddb.c'], depends = ['bsddb.h'], library_dirs=dblib_dir, - runtime_library_dirs=dblib_dir, include_dirs=db_incs, libraries=dblibs)) else: @@ -1252,7 +1251,6 @@ print "building dbm using bdb" dbmext = Extension('dbm', ['dbmmodule.c'], library_dirs=dblib_dir, - runtime_library_dirs=dblib_dir, include_dirs=db_incs, define_macros=[ ('HAVE_BERKDB_H', None), ./python-2.7.3-CVE-2014-1912.patch0000664000175000017500000000150112511411357016032 0ustar nielsenrnielsenrUpstream-Status: Backport Reference: http://bugs.python.org/issue20246 CVE-2014-1912: Python buffer overflow in socket.recvfrom_into() lets remote users execute arbitrary code.Original patch by Benjamin Peterson Signed-off-by: Maxin B. John --- diff -r 40fb60df4755 Modules/socketmodule.c --- a/Modules/socketmodule.c Sun Jan 12 12:11:47 2014 +0200 +++ b/Modules/socketmodule.c Mon Jan 13 16:36:35 2014 -0800 @@ -2744,6 +2744,13 @@ recvlen = buflen; } + /* Check if the buffer is large enough */ + if (buflen < recvlen) { + PyErr_SetString(PyExc_ValueError, + "buffer too small for requested bytes"); + goto error; + } + readlen = sock_recvfrom_guts(s, buf.buf, recvlen, flags, &addr); if (readlen < 0) { /* Return an error */ ./python-2.7.3-CVE-2012-2135.patch0000664000175000017500000000536312511411357016040 0ustar nielsenrnielsenrUpstream-Status: Backport Reference:http://bugs.python.org/issue14579 The utf-16 decoder in Python 3.1 through 3.3 does not update the aligned_end variable after calling the unicode_decode_call_errorhandler function, which allows remote attackers to obtain sensitive information (process memory) or cause a denial of service (memory corruption and crash) via unspecified vectors. http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-2135 diff -urpN a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -495,8 +495,21 @@ class UTF16LETest(ReadTest): ) def test_errors(self): - self.assertRaises(UnicodeDecodeError, codecs.utf_16_le_decode, "\xff", "strict", True) - + tests = [ + (b'\xff', u'\ufffd'), + (b'A\x00Z', u'A\ufffd'), + (b'A\x00B\x00C\x00D\x00Z', u'ABCD\ufffd'), + (b'\x00\xd8', u'\ufffd'), + (b'\x00\xd8A', u'\ufffd'), + (b'\x00\xd8A\x00', u'\ufffdA'), + (b'\x00\xdcA\x00', u'\ufffdA'), + ] + for raw, expected in tests: + print('*****', raw, expected) + self.assertRaises(UnicodeDecodeError, codecs.utf_16_le_decode, + raw, 'strict', True) + self.assertEqual(raw.decode('utf-16le', 'replace'), expected) + class UTF16BETest(ReadTest): encoding = "utf-16-be" @@ -516,7 +529,20 @@ class UTF16BETest(ReadTest): ) def test_errors(self): - self.assertRaises(UnicodeDecodeError, codecs.utf_16_be_decode, "\xff", "strict", True) + tests = [ + (b'\xff', u'\ufffd'), + (b'\x00A\xff', u'A\ufffd'), + (b'\x00A\x00B\x00C\x00DZ', u'ABCD\ufffd'), + (b'\xd8\x00', u'\ufffd'), + (b'\xd8\x00\xdc', u'\ufffd'), + (b'\xd8\x00\x00A', u'\ufffdA'), + (b'\xdc\x00\x00A', u'\ufffdA'), + ] + for raw, expected in tests: + print('*****', raw, expected) + self.assertRaises(UnicodeDecodeError, codecs.utf_16_be_decode, + raw, 'strict', True) + self.assertEqual(raw.decode('utf-16be', 'replace'), expected) class UTF8Test(ReadTest): encoding = "utf-8" diff -urpN a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c 2013-03-04 11:34:34.000000000 +0800 +++ b/Objects/unicodeobject.c 2013-03-04 11:36:01.000000000 +0800 @@ -2564,7 +2564,7 @@ PyUnicode_DecodeUTF16Stateful(const char } /* UTF-16 code pair: */ - if (q >= e) { + if (e - q < 2) { errmsg = "unexpected end of data"; startinpos = (((const char *)q)-2)-starts; endinpos = ((const char *)e)-starts; ./check-if-target-is-64b-not-host.patch0000664000175000017500000000434012511411357020167 0ustar nielsenrnielsenrAuthor: Andrei Gherzan Date: Sun Mar 25 02:02:27 2012 +0200 This patch was added for 64bit host machines. In the compile process python is checking if platform is a 64bit platform using sys.maxint which is the host's value. The patch fixes this issue so that python would check if TARGET machine is 64bit not the HOST machine. In this way will have "dl" and "imageop" modules built if HOST machine is 64bit but the target machine is 32bit. Signed-off-by: Andrei Gherzan Upstream-Status: Pending Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py 2012-03-25 01:10:41.540163187 +0200 +++ Python-2.7.2/setup.py 2012-03-25 01:26:06.092539990 +0200 @@ -23,6 +23,21 @@ # This global variable is used to hold the list of modules to be disabled. disabled_module_list = [] +def target_is_64bit_platform (): + """ + In case of cross-compile, some modules are not build as setup checks if HOST + is 64bit and not TARGET. + As python was built for TARGET we can check this in pyconfig.h in this way: + Sizeof LONG on a 32 bit platform is 4 bytes + Sizeof LONG on a 64 bit platform is 8 bytes + """ + pyconf = open("pyconfig.h").read() + aux = re.search(r"#s*define\s+SIZEOF_LONG\s+8\s*", pyconf) + if aux is not None: + return True + else: + return False + def add_dir_to_list(dirlist, dir): """Add the directory 'dir' to the list 'dirlist' (at the front) if 1) 'dir' is not already in 'dirlist' @@ -628,7 +643,7 @@ exts.append( Extension('audioop', ['audioop.c']) ) # Disabled on 64-bit platforms - if sys.maxint != 9223372036854775807L: + if not target_is_64bit_platform(): # Operations on images exts.append( Extension('imageop', ['imageop.c']) ) else: @@ -1418,7 +1433,7 @@ missing.append('_codecs_%s' % loc) # Dynamic loading module - if sys.maxint == 0x7fffffff: + if not target_is_64bit_platform(): # This requires sizeof(int) == sizeof(long) == sizeof(char*) dl_inc = find_file('dlfcn.h', [], inc_dirs) if (dl_inc is not None) and (platform not in ['atheos']):