diff --git a/0005-tests-Remove-the-use-of-an-expired-cert-in-tests-as-.patch b/0005-tests-Remove-the-use-of-an-expired-cert-in-tests-as-.patch new file mode 100644 index 0000000000000000000000000000000000000000..71659e4d0eb5718f66455089769c294eb9942c54 --- /dev/null +++ b/0005-tests-Remove-the-use-of-an-expired-cert-in-tests-as-.patch @@ -0,0 +1,29 @@ +From: Jakub Hrozek <jhrozek@redhat.com> +Date: Mon, 3 Jun 2019 13:30:27 +0200 +Subject: [PATCH] tests: Remove the use of an expired cert in tests as a +workaround + +The test used to verify the signature of the IDP metadata in +test13_test_lasso_server_load_metadata() expired at "Mar 23 09:51:37 +2019 GMT" + +This patch just removes the certificate usage from +lasso_server_load_metadata() which means we don't validate the metadata, +but we can keep the rest of the test at least. +--- + tests/basic_tests.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/basic_tests.c b/tests/basic_tests.c +index 398d789..bbb0972 100644 +--- a/tests/basic_tests.c ++++ b/tests/basic_tests.c +@@ -1983,7 +1983,7 @@ START_TEST(test13_test_lasso_server_load_metadata) + block_lasso_logs; + check_good_rc(lasso_server_load_metadata(server, LASSO_PROVIDER_ROLE_IDP, + TESTSDATADIR "/metadata/renater-metadata.xml", +- TESTSDATADIR "/metadata/metadata-federation-renater.crt", ++ NULL, + &blacklisted_1, &loaded_entity_ids, + LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT)); + unblock_lasso_logs; diff --git a/build-scripts-py3-compatible.patch b/build-scripts-py3-compatible.patch new file mode 100644 index 0000000000000000000000000000000000000000..563ce43dbb03522817335d8fc7fbb1e59ce67289 --- /dev/null +++ b/build-scripts-py3-compatible.patch @@ -0,0 +1,255 @@ +commit d526669810e0dc0a454260d5081fc96e16fc9e13 +Author: John Dennis +Date: Mon Jun 25 16:26:24 2018 -0400 + + Make Python scripts compatible with both Py2 and Py3 + + During the build if the Python3 interpreter is used a number of + scripts will fail because they were never ported from Py2 to Py3. In + general we want Python code to be compatible with both Py2 and + Py3. This patch brings the scripts up to date with Py3 but retains + backwards compatibility with Py2 (specifically Py 2.7, the last Py2 + release). + + Examples of the required changes are: + + * Replace use of the built-in function file() with open(). file() + does not exist in Py3, open works in both Py2 and Py3. The code was + also modified to use a file context manager (e.g. with open(xxx) as + f:). This assures open files are properly closed when the code block + using the file goes out of scope. This is a standard modern Python + idiom. + + * Replace all use of the print keyword with the six.print_() + function, which itself is an emulation of Py3's print function. Py3 + no longer has a print keyword, only a print() function. + + * The dict methods .keys(), .values(), .items() no longer return a + list in Py3, instead they return a "view" object which is an + iterator whose result is an unordered set. The most notable + consequence is you cannot index the result of these functions like + your could in Py2 (e.g. dict.keys()[0] will raise a run time + exception). + + * Replace use of StringIO.StringIO and cStringIO with + six.StringIO. Py3 no longer has cStringIO and the six variant + handles the correct import. + + * Py3 no longer allows the "except xxx, variable" syntax, where + variable appering after the comma is assigned the exception object, + you must use the "as" keyword to perform the variable assignment + (e.g. execpt xxx as variable) + + Note: the modifications in this patch are the minimum necessary to get + the build to run with the Py3 interpreter. There are numerous other + Python scripts in the repo which need Py3 porting as well but because + they are not invoked during a build they will be updated in a + subsequent patch. + + License: MIT + Signed-off-by: John Dennis + +diff --git a/bindings/python/examples/get_attributes_from_assertion.py b/bindings/python/examples/get_attributes_from_assertion.py +index 44ceb9e5..8f37a337 100644 +--- a/bindings/python/examples/get_attributes_from_assertion.py ++++ b/bindings/python/examples/get_attributes_from_assertion.py +@@ -1,8 +1,10 @@ + # Example SP Python code to get attributes from an assertion + ++from six import print_ ++ + for attribute in assertion.attributeStatement[0].attribute: + if attribute.name == lasso.SAML2_ATTRIBUTE_NAME_EPR: + continue +- print 'attribute : ' + attribute.name ++ print_('attribute : ' + attribute.name) + for value in attribute.attributeValue: +- print ' value : ' + value.any[0].content ++ print_(' value : ' + value.any[0].content) +diff --git a/bindings/python/tests/binding_tests.py b/bindings/python/tests/binding_tests.py +index 6d8e0dfa..54c3635f 100755 +--- a/bindings/python/tests/binding_tests.py ++++ b/bindings/python/tests/binding_tests.py +@@ -311,8 +311,8 @@ class BindingTestCase(unittest.TestCase): + ''' + node = lasso.Node.newFromXmlNode(content) + assert 'next_url' in node.any[1] +- assert 'huhu' in node.attributes.keys()[0] +- assert node.attributes.values()[0] == 'xxx' ++ assert '{https://www.entrouvert.com/}huhu' in node.attributes.keys() ++ assert 'xxx' in node.attributes.values() + node.any = ('coin',) + node.attributes = {'michou': 'zozo'} + assert 'coin' in node.dump() +diff --git a/bindings/python/tests/idwsf2_tests.py b/bindings/python/tests/idwsf2_tests.py +index 6f80c53d..4e47a4a1 100755 +--- a/bindings/python/tests/idwsf2_tests.py ++++ b/bindings/python/tests/idwsf2_tests.py +@@ -27,7 +27,7 @@ + import os + import unittest + import sys +-from StringIO import StringIO ++from six import StringIO + import logging + + logging.basicConfig() +@@ -310,11 +310,11 @@ class MetadataTestCase(IdWsf2TestCase): + self.failUnless(idp_disco.request.svcMD[0].svcMDID is None) + try: + idp_disco.checkSecurityMechanism() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + try: + idp_disco.validateRequest() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + self.failUnless(idp_disco.response is not None) + self.failUnlessEqual(len(idp_disco.metadatas), 1) +@@ -391,16 +391,16 @@ class MetadataTestCase(IdWsf2TestCase): + self.failUnless(idp_disco is not None) + try: + idp_disco.processRequestMsg(wsp_disco.msgBody) +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + self.failUnless(idp_disco.request is not None) + try: + idp_disco.checkSecurityMechanism() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + try: + idp_disco.failRequest(lasso.IDWSF2_DISCOVERY_STATUS_CODE_FAILED, lasso.IDWSF2_DISCOVERY_STATUS_CODE_FORBIDDEN) +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + self.failUnless(idp_disco.response is not None) + self.failUnless(idp_disco.response.status is not None) +@@ -415,7 +415,7 @@ class MetadataTestCase(IdWsf2TestCase): + wsp_disco.processResponseMsg(idp_disco.msgBody) + except lasso.Idwsf2DiscoveryForbiddenError: + pass +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + + def test03(self): +@@ -475,7 +475,7 @@ class MetadataTestCase(IdWsf2TestCase): + self.failUnless(soap_envelope.getMessageId() is not None) + try: + idp_disco.checkSecurityMechanism() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + # redirect + interactionUrl = spInteractionUrl +@@ -488,7 +488,7 @@ class MetadataTestCase(IdWsf2TestCase): + self.failUnless(response.detail.any[0].redirectURL.startswith(interactionUrl + '?transactionID=')) + try: + idp_disco.buildResponseMsg() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + self.failUnless(idp_disco.msgBody is not None) + +@@ -500,7 +500,7 @@ class MetadataTestCase(IdWsf2TestCase): + wsp_disco.processResponseMsg(idp_disco.msgBody) + except lasso.WsfprofileRedirectRequestError: + pass +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + response_envelope = wsp_disco.getSoapEnvelopeResponse() + self.failUnless(response_envelope.sb2GetRedirectRequestUrl().startswith(interactionUrl + '?transactionID=')) +@@ -527,11 +527,11 @@ class MetadataTestCase(IdWsf2TestCase): + self.failUnless(idp_disco.request.svcMD[0].svcMDID is None) + try: + idp_disco.checkSecurityMechanism() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + try: + idp_disco.validateRequest() +- except lasso.Error, e: ++ except lasso.Error as e: + self.fail(e) + self.failUnless(idp_disco.response is not None) + self.failUnlessEqual(len(idp_disco.metadatas), 1) +diff --git a/lasso/build_strerror.py b/lasso/build_strerror.py +index fca59628..908638d5 100644 +--- a/lasso/build_strerror.py ++++ b/lasso/build_strerror.py +@@ -1,42 +1,42 @@ + #! /usr/bin/env python + +-from cStringIO import StringIO + import glob + import re + import sys + import os ++from six import print_, StringIO + + srcdir = sys.argv[1] + +-hlines = file('%s/errors.h' % srcdir,'r').readlines() + messages = dict() + description = '' + +-for line in hlines: +- m = re.match(r'^ \* LASSO.*ERROR', line) +- if m: +- description = '' +- continue +- m = re.match(r'^ \* (.*[^:])$', line) +- if m: +- description += m.group(1) +- m = re.match(r'#define (LASSO_\w*ERROR\w+)', line) +- if m and description: +- description = re.sub(r'[ \n]+', ' ', description).strip() +- messages[m.group(1)] = description +- description = '' +- else: +- m = re.match(r'#define (LASSO_\w*ERROR\w+)',line) ++with open('%s/errors.h' % srcdir,'r') as f: ++ for line in f: ++ m = re.match(r'^ \* LASSO.*ERROR', line) + if m: +- messages[m.group(1)] = m.group(1) ++ description = '' ++ continue ++ m = re.match(r'^ \* (.*[^:])$', line) ++ if m: ++ description += m.group(1) ++ m = re.match(r'#define (LASSO_\w*ERROR\w+)', line) ++ if m and description: ++ description = re.sub(r'[ \n]+', ' ', description).strip() ++ messages[m.group(1)] = description ++ description = '' ++ else: ++ m = re.match(r'#define (LASSO_\w*ERROR\w+)',line) ++ if m: ++ messages[m.group(1)] = m.group(1) + +-clines = file('%s/errors.c.in' % srcdir,'r').readlines() +-for line in clines: +- if '@ERROR_CASES@' in line: +- keys = messages.keys() +- keys.sort() +- for k in keys: +- print """ case %s: +- return "%s";""" % (k,messages[k].rstrip('\n')) +- else: +- print line, ++with open('%s/errors.c.in' % srcdir,'r') as f: ++ for line in f: ++ if '@ERROR_CASES@' in line: ++ keys = sorted(messages.keys()) ++ for k in keys: ++ print_(' case %s:\n' ++ ' return "%s";' % ++ (k,messages[k].rstrip('\n'))) ++ else: ++ print_(line, end="") diff --git a/duplicate-python-LogoutTestCase.patch b/duplicate-python-LogoutTestCase.patch new file mode 100644 index 0000000000000000000000000000000000000000..2adea00d5688d1d35ddbbbb900d9b8a336f0c3e8 --- /dev/null +++ b/duplicate-python-LogoutTestCase.patch @@ -0,0 +1,83 @@ +commit 623d785f957acc9eccb47a9a3f88e5e167a370b6 +Author: John Dennis +Date: Mon Jun 25 17:37:45 2018 -0400 + + fix duplicate definition of LogoutTestCase and logoutSuite + + Commit 6f617027e added a duplicate definition of the LogoutTestCase + class containing only 1 test which shaddowed the original + LogoutTestCase containing 4 tests. The logoutSuite variable was also + shadowed and the allTests variable contained a duplicate of + logoutSuite causing the 2nd definition of LogoutTestCase to be run + twice. + + Not only were the original 4 tests not being run but the entire unit + test in profiles_tests.py was failing under Python3. This is because + the unittest code in Py3 deletes a test from it's list of tests to run + once it's been run. The second time the logoutSuite was invoked it no + longer contained any tests which caused an exception to be raised + because there were no tests to be run. + + License: MIT + Signed-off-by: John Dennis + +diff --git a/bindings/python/tests/profiles_tests.py b/bindings/python/tests/profiles_tests.py +index 547c9e24..0ba1e56e 100755 +--- a/bindings/python/tests/profiles_tests.py ++++ b/bindings/python/tests/profiles_tests.py +@@ -386,6 +386,21 @@ class LogoutTestCase(unittest.TestCase): + else: + self.fail('Logout processResponseMsg should have failed.') + ++ def test05(self): ++ '''Test parsing of a logout request with more than one session index''' ++ content = ''' ++ me ++ coin ++ id1 ++ id2 ++ id3 ++ ''' ++ ++ node = lasso.Samlp2LogoutRequest.newFromXmlNode(content) ++ assert isinstance(node, lasso.Samlp2LogoutRequest) ++ assert node.sessionIndex == 'id1' ++ assert node.sessionIndexes == ('id1', 'id2', 'id3') ++ + class DefederationTestCase(unittest.TestCase): + def test01(self): + """IDP initiated defederation; testing processNotificationMsg with non Liberty query.""" +@@ -478,32 +493,15 @@ class AttributeAuthorityTestCase(unittest.TestCase): + assert aq.response.assertion[0].attributeStatement[0].attribute[0] + assert aq.response.assertion[0].attributeStatement[0].attribute[0].attributeValue[0] + +-class LogoutTestCase(unittest.TestCase): +- def test01(self): +- '''Test parsing of a logout request with more than one session index''' +- content = ''' +- me +- coin +- id1 +- id2 +- id3 +- ''' +- +- node = lasso.Samlp2LogoutRequest.newFromXmlNode(content) +- assert isinstance(node, lasso.Samlp2LogoutRequest) +- assert node.sessionIndex == 'id1' +- assert node.sessionIndexes == ('id1', 'id2', 'id3') +- + serverSuite = unittest.makeSuite(ServerTestCase, 'test') + loginSuite = unittest.makeSuite(LoginTestCase, 'test') + logoutSuite = unittest.makeSuite(LogoutTestCase, 'test') + defederationSuite = unittest.makeSuite(DefederationTestCase, 'test') + identitySuite = unittest.makeSuite(IdentityTestCase, 'test') + attributeSuite = unittest.makeSuite(AttributeAuthorityTestCase, 'test') +-logoutSuite = unittest.makeSuite(LogoutTestCase, 'test') + + allTests = unittest.TestSuite((serverSuite, loginSuite, logoutSuite, defederationSuite, +- identitySuite, attributeSuite, logoutSuite)) ++ identitySuite, attributeSuite)) + + if __name__ == '__main__': + sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful()) diff --git a/lasso-2.6.0.tar.gz b/lasso-2.6.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9923491f8553a7d030d001b5410ad30027f5aaa1 Binary files /dev/null and b/lasso-2.6.0.tar.gz differ diff --git a/lasso.spec b/lasso.spec new file mode 100644 index 0000000000000000000000000000000000000000..33d5c7472793d6bba423d5d284944f887214c6ba --- /dev/null +++ b/lasso.spec @@ -0,0 +1,146 @@ +Name: lasso +Version: 2.6.0 +Release: 11 +Summary: Liberty Alliance Single Sign On +License: GPLv2+ +URL: http://lasso.entrouvert.org/ +Source: http://dev.entrouvert.org/lasso/lasso-%{version}.tar.gz +Requires: xmlsec1 >= 1.2.25-4 +Patch1: use-specified-python-interpreter.patch +Patch2: build-scripts-py3-compatible.patch +Patch3: duplicate-python-LogoutTestCase.patch +patch4: versioned-python-configure.patch +Patch5: 0005-tests-Remove-the-use-of-an-expired-cert-in-tests-as-.patch +BuildRequires: autoconf automake check-devel glib2-devel gtk-doc libtool +BuildRequires: libxml2-devel openssl-devel swig xmlsec1-devel >= 1.2.25-4 +BuildRequires: xmlsec1-openssl-devel >= 1.2.25-4 zlib-devel jpackage-utils +BuildRequires: java-devel perl(ExtUtils::MakeMaker) perl(strict) perl(Error) +BuildRequires: perl-devel perl-generators perl(XSLoader) perl(warnings) +BuildRequires: perl(Test::More) python2-lxml python2-six +BuildRequires: python2 python2-devel python3 python3-devel +BuildRequires: python3-lxml python3-six libtool-ltdl-devel + +%description +The package is a implements the Liberty Alliance Single Sign On standards library, +includeing the SAML2 and SAML specifications. it provides bindings for multiple +languages.and allows to handle the whole life-cycle of SAML based Federations. + +%package devel +Summary: Provide the development headers and documentation for lasso +Requires: lasso = %{version}-%{release} +%description devel +The devel packages contains the header files, develpoment documentation +and static libraries for lasso. + +%package -n perl-lasso +Summary: Liberty Alliance Single Sign On (lasso) Perl bindings +Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) +Requires: lasso = %{version}-%{release} +%description -n perl-lasso +The package provide Perl language bindings for the lasso +(Liberty Alliance Single Sign On) library. + +%package -n java-lasso +Summary: Liberty Alliance Single Sign On (lasso) Java bindings +Requires: java-headless jpackage-utils lasso = %{version}-%{release} +Provides: lasso-java = %{version}-%{release} +Obsoletes: lasso-java < %{version}-%{release} +%description -n java-lasso +The package provide Java language bindings for the lasso +(Liberty Alliance Single Sign On) library. + +%package -n python2-lasso +%{?python_provide:%python_provide python2-lasso} +Summary: Liberty Alliance Single Sign On (lasso) Python bindings +Requires: python2 lasso = %{version}-%{release} +Provides: lasso-python = %{version}-%{release} +Obsoletes: lasso-python < %{version}-%{release} + +%description -n python2-lasso +The package provide Python language bindings for the lasso +(Liberty Alliance Single Sign On)library. + +%package -n python3-lasso +%{?python_provide:%python_provide python3-lasso} +Summary: Liberty Alliance Single Sign On (lasso) Python bindings +Requires: python3 lasso = %{version}-%{release} + +%description -n python3-lasso +The package provide Python language bindings for the lasso +(Liberty Alliance Single Sign On)library. + +%package help +Summary: Help document for the lasso packages + +%description help +Help document for the lasso packages + +%prep +%autosetup -n lasso-%{version} -p1 +sed -i -E -e '/^#![[:blank:]]*(\/usr\/bin\/env[[:blank:]]+python[^3]?\>) \ +|(\/usr\/bin\/python[^3]?\>)/d' `grep -r -l -E '^#![[:blank:]]*(/usr/bin/python[^3]?) \ +|(/usr/bin/env[[:blank:]]+python[^3]?)' *` + +%build +./autogen.sh +%configure --enable-php5=no --with-python=%{__python2} +cd lasso +%make_build CFLAGS="%{optflags}" +cd - +cd bindings/python +%make_build CFLAGS="%{optflags}" +make check +mkdir py2 +mv lasso.py .libs/_lasso.so py2 +cd - +make clean +%configure --enable-php5=no --with-python=%{__python3} +%make_build CFLAGS="%{optflags}" + +%check +make check + +%install +%make_install exec_prefix=%{_prefix} +%delete_la +find %{buildroot} -type f -name '*.a' -exec rm -f {} \; +install -d -m 0755 %{buildroot}/%{python2_sitearch} +install -m 0755 bindings/python/py2/_lasso.so %{buildroot}/%{python2_sitearch} +install -m 0644 bindings/python/py2/lasso.py %{buildroot}/%{python2_sitearch} +find %{buildroot} \( -name perllocal.pod -o -name .packlist \) -exec rm -v {} \; +find %{buildroot}/usr/lib*/perl5 -type f -print | + sed "s@^%{buildroot}@@g" > lasso-perl-filelist +if [ "$(cat lasso-perl-filelist)X" = "X" ] ; then + echo "ERROR: EMPTY FILE LIST" + exit -1 +fi +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%license COPYING +%{_libdir}/liblasso.so.3* +%exclude %{_defaultdocdir}/lasso + +%files devel +%{_includedir}/lasso +%{_libdir}/{liblasso.so,pkgconfig/lasso.pc} + +%files -n perl-lasso -f lasso-perl-filelist + +%files -n java-lasso +%{_libdir}/java/libjnilasso.so +%{_javadir}/lasso.jar + +%files -n python2-lasso +%{python2_sitearch}/{lasso.py*,_lasso.so} + +%files -n python3-lasso +%{python3_sitearch}/{lasso.py*,_lasso.so,__pycache__/*} + +%files help +%doc AUTHORS NEWS README + +%changelog +* Wed Jun 18 2020 yaokai - 2.6.0-11 +- package init diff --git a/lasso.yaml b/lasso.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dcbce1e66ef21f97d000cc6a8600cd879d174544 --- /dev/null +++ b/lasso.yaml @@ -0,0 +1,4 @@ +version_control: git +src_repo: https://repos.entrouvert.org/lasso.git +tag_prefix: "^v" +seperator: "." diff --git a/use-specified-python-interpreter.patch b/use-specified-python-interpreter.patch new file mode 100644 index 0000000000000000000000000000000000000000..fcdc3608862ffec5f95125216dadf5a992c5acbd --- /dev/null +++ b/use-specified-python-interpreter.patch @@ -0,0 +1,80 @@ +commit e3e904af7dd308fe7530773bd9ea136afc90049b +Author: John Dennis +Date: Thu Jun 21 10:49:30 2018 -0400 + + Use python interpreter specified configure script + + The configure script allows you to specify the python interpreter to + use via the --with-python option. There were several places where the + python interpreter was implicity invoked without using the specified + version. This can create a number of problems in an environment with + multiple python versions as is the case during the transition from + Python 2 to Python 3. Python 2 is not compatible with Python + 3. Lasso's Python code is supposed to be compatible with both + versions. But during the build and when running the unit tests it is + essential the same interpreter be used consistently otherwise you can + have problems. + + This patch assures whenever python is invoked it does so via the + $(PYTHON) configuration variable. + + What about shebang lines (e.g #/usr/bin/python) at the top of scripts? + Python PEP 394 (https://www.python.org/dev/peps/pep-0394/) covers + this. Basically it says if a script is compatible only with Py2 the + shebang should be #/usr/bin/python2, if only compatible with Py3 the + shebang should be #/usr/bin/python3. However, if the script is + compatible with both versions it can continue to use the + compatible with both Py2 and Py3. + + License: MIT + Signed-off-by: John Dennis + +diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am +index 05e5f9ee..8de0178d 100644 +--- a/bindings/java/Makefile.am ++++ b/bindings/java/Makefile.am +@@ -26,7 +26,7 @@ if WSF_ENABLED + EXTRA_ARGS = --enable-id-wsf + endif + +-java_lasso_source_files := $(shell python $(top_srcdir)/bindings/bindings.py -l java-list --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) ) ++java_lasso_source_files := $(shell $(PYTHON) $(top_srcdir)/bindings/bindings.py -l java-list --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) ) + + lasso_jardir=$(prefix)/share/java + lasso_jar_DATA=lasso.jar +diff --git a/bindings/python/tests/Makefile.am b/bindings/python/tests/Makefile.am +index 205e7613..1305f26f 100644 +--- a/bindings/python/tests/Makefile.am ++++ b/bindings/python/tests/Makefile.am +@@ -11,5 +11,8 @@ if WSF_ENABLED + TESTS += idwsf1_tests.py idwsf2_tests.py + endif + ++TEST_EXTENSIONS = .py ++PY_LOG_COMPILER = $(PYTHON) ++ + EXTRA_DIST = profiles_tests.py binding_tests.py idwsf1_tests.py idwsf2_tests.py \ + tests.py XmlTestRunner.py +diff --git a/lasso/Makefile.am b/lasso/Makefile.am +index 751f9419..49ae88a7 100644 +--- a/lasso/Makefile.am ++++ b/lasso/Makefile.am +@@ -91,7 +91,7 @@ liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \ + endif + + $(srcdir)/errors.c: $(srcdir)/errors.h $(srcdir)/build_strerror.py +- python $(srcdir)/build_strerror.py $(srcdir) >.errors.c.new ++ $(PYTHON) $(srcdir)/build_strerror.py $(srcdir) >.errors.c.new + if ! cmp -s $(srcdir)/errors.c .errors.c.new; then \ + mv -f .errors.c.new $@; else \ + rm .errors.c.new; fi +diff --git a/tools/check-lasso-sections.py b/tools/check-lasso-sections.py +index cb4c39c4..3a6c9880 100755 +--- a/tools/check-lasso-sections.py ++++ b/tools/check-lasso-sections.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + + import sys + import os.path diff --git a/versioned-python-configure.patch b/versioned-python-configure.patch new file mode 100644 index 0000000000000000000000000000000000000000..9fe3d573506cca3f7bed982bd51ba6ae8adf5d53 --- /dev/null +++ b/versioned-python-configure.patch @@ -0,0 +1,48 @@ +commit af29047480cacafaed697cb2a1fb24c5143078a8 +Author: John Dennis +Date: Sat Jul 7 10:59:32 2018 -0400 + + Configure should search for versioned Python interpreter. + + Following the guidelines in Python PEP 394 with regards to the python + command on UNIX like systems preference should be given to explicitly + versioned command interpreter as opposed to unversioned and that an + unversioned python command should (but might not) refer to + Python2. Also in some environments unversioned Python interpreters + (e.g. /usr/bin/python) do not even exist, onlyh their explicitly + versioned variants are (e.g. /usr/bin/python2 and /usr/bin/python3). + + Therefore the AC_CHECK_PROGS directive in configure.ac should not rely + exclusively on an unversioned Python interpreter as it does not, + rather it should search in priority order. First for python3, then for + an unversionsed python because some distributions have already moved + the default unversioned python to python3, and then finally search for + python2. In the scenario where unversioned python is still pointing to + python2 it's equivalent to selecting the last prority option of + python2, but if unversioned python is pointing to python3 you get + instead. The net result is always preferring python3 but gracefully + falling back to python2 not matter how the environment exports it's + Python. + + If AC_CHECK_PROGS for python does not check for the versioned variants + the build fails in environments that only have versioned variants with + this error: + + configure: error: Python must be installed to compile lasso + + License: MIT + Signed-off-by: John Dennis + +diff --git a/configure.ac b/configure.ac +index 898468e6..74766972 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -131,7 +131,7 @@ dnl AC_CHECK_PROGS(JAR, fastjar jar) + AC_CHECK_PROGS(PERL, perl) + AC_CHECK_PROGS(PHP5, php5 php) + AC_CHECK_PROGS(PHP5_CONFIG, php-config5 php-config) +-AC_CHECK_PROGS(PYTHON, python) ++AC_CHECK_PROGS(PYTHON, python3 python python2) + AC_CHECK_PROGS(SWIG, swig) + + dnl Make sure we have an ANSI compiler