Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ai
sso
Commits
2638d8ba
Commit
2638d8ba
authored
Feb 08, 2019
by
ale
Browse files
Update Python build
First steps towards Python 3 compatibility.
parent
602a0a64
Changes
7
Hide whitespace changes
Inline
Side-by-side
m4/ax_python_devel.m4
View file @
2638d8ba
# ===========================================================================
#
http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
# http
s
://www.gnu.org/software/autoconf-archive/ax_python_devel.html
# ===========================================================================
#
# SYNOPSIS
...
...
@@ -12,8 +12,8 @@
# in your configure.ac.
#
# This macro checks for Python and tries to get the include path to
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_L
DFLAGS)
#
output
variables. It also exports $(PYTHON_EXTRA_LIBS) and
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_L
IBS) output
# variables. It also exports $(PYTHON_EXTRA_LIBS) and
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
#
# You can search for some particular version of Python by passing a
...
...
@@ -34,11 +34,12 @@
# LICENSE
#
# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
# Copyright (c) 2009 Alan W. Irwin
<irwin@beluga.phys.uvic.ca>
# Copyright (c) 2009 Alan W. Irwin
# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
# Copyright (c) 2009 Andrew Collier
<colliera@ukzn.ac.za>
# Copyright (c) 2009 Andrew Collier
# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
...
...
@@ -51,7 +52,7 @@
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
# with this program. If not, see <http
s
://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
...
...
@@ -66,7 +67,7 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial
8
#serial
21
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
AC_DEFUN([AX_PYTHON_DEVEL],[
...
...
@@ -98,7 +99,7 @@ AC_DEFUN([AX_PYTHON_DEVEL],[
This version of the AC@&t@_PYTHON_DEVEL macro
doesn't work properly with versions of Python before
2.1.0. You may need to re-run configure, setting the
variables PYTHON_CPPFLAGS, PYTHON_L
DFLAG
S, PYTHON_SITE_PKG,
variables PYTHON_CPPFLAGS, PYTHON_L
IB
S, PYTHON_SITE_PKG,
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
to something else than an empty string.
...
...
@@ -136,7 +137,7 @@ variable to configure. See ``configure --help'' for reference.
#
AC_MSG_CHECKING([for the distutils Python package])
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
if test
-z "$ac_distutils_result"
; then
if test
$? -eq 0
; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
...
...
@@ -153,8 +154,14 @@ $ac_distutils_result])
if test -z "$PYTHON_CPPFLAGS"; then
python_path=`$PYTHON -c "import distutils.sysconfig; \
print (distutils.sysconfig.get_python_inc ());"`
plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
if test -n "${python_path}"; then
python_path="-I$python_path"
if test "${plat_python_path}" != "${python_path}"; then
python_path="-I$python_path -I$plat_python_path"
else
python_path="-I$python_path"
fi
fi
PYTHON_CPPFLAGS=$python_path
fi
...
...
@@ -165,7 +172,7 @@ $ac_distutils_result])
# Check for Python library path
#
AC_MSG_CHECKING([for Python library path])
if test -z "$PYTHON_L
DFLAG
S"; then
if test -z "$PYTHON_L
IB
S"; then
# (makes two attempts to ensure we've got a version number
# from the interpreter)
ac_python_version=`cat<<EOD | $PYTHON -
...
...
@@ -173,11 +180,9 @@ $ac_distutils_result])
# join all versioning strings, on some systems
# major/minor numbers could be in different list elements
from distutils.sysconfig import *
ret = ''
for e in get_config_vars ('VERSION'):
if (e != None):
ret += e
print (ret)
e = get_config_var('VERSION')
if e is not None:
print(e)
EOD`
if test -z "$ac_python_version"; then
...
...
@@ -198,55 +203,49 @@ EOD`
# There should be only one
import distutils.sysconfig
for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
if e != None:
print (e)
break
e = distutils.sysconfig.get_config_var('LIBDIR')
if e is not None:
print (e)
EOD`
# Before checking for libpythonX.Y, we need to know
# the extension the OS we're on uses for libraries
# (we take the first one, if there's more than one fix me!):
ac_python_soext=`$PYTHON -c \
"import distutils.sysconfig; \
print (distutils.sysconfig.get_config_vars('SO')[[0]])"`
# Now, for the library:
ac_python_soname=`$PYTHON -c \
"import distutils.sysconfig; \
print (distutils.sysconfig.get_config_vars('LDLIBRARY')[[0]])"`
ac_python_library=`cat<<EOD | $PYTHON -
# Strip away extension from the end to canonicalize its name:
ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
import distutils.sysconfig
c = distutils.sysconfig.get_config_vars()
if 'LDVERSION' in c:
print ('python'+c[['LDVERSION']])
else:
print ('python'+c[['VERSION']])
EOD`
# This small piece shamelessly adapted from PostgreSQL python macro;
# credits goes to momjian, I think. I'd like to put the right name
# in the credits, if someone can point me in the right direction... ?
#
if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
-a x"$ac_python_library" != x"$ac_python_soname"
if test -n "$ac_python_libdir" -a -n "$ac_python_library"
then
# use the official shared library
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
PYTHON_L
DFLAG
S="-L$ac_python_libdir -l$ac_python_library"
PYTHON_L
IB
S="-L$ac_python_libdir -l$ac_python_library"
else
# old way: use libpython from python_configdir
ac_python_libdir=`$PYTHON -c \
"from distutils.sysconfig import get_python_lib as f; \
import os; \
print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
PYTHON_L
DFLAG
S="-L$ac_python_libdir -lpython$ac_python_version"
PYTHON_L
IB
S="-L$ac_python_libdir -lpython$ac_python_version"
fi
if test -z "PYTHON_L
DFLAG
S"; then
if test -z "PYTHON_L
IB
S"; then
AC_MSG_ERROR([
Cannot determine location of your Python DSO. Please check it was installed with
dynamic libraries enabled, or try setting PYTHON_L
DFLAG
S by hand.
dynamic libraries enabled, or try setting PYTHON_L
IB
S by hand.
])
fi
fi
AC_MSG_RESULT([$PYTHON_L
DFLAG
S])
AC_SUBST([PYTHON_L
DFLAG
S])
AC_MSG_RESULT([$PYTHON_L
IB
S])
AC_SUBST([PYTHON_L
IB
S])
#
# Check for site packages
...
...
@@ -266,7 +265,7 @@ EOD`
if test -z "$PYTHON_EXTRA_LIBS"; then
PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
print (conf('
LOCALMOD
LIBS') + ' ' + conf('LIBS'))"`
print (conf('LIBS') + ' ' + conf('
SYS
LIBS'))"`
fi
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
AC_SUBST(PYTHON_EXTRA_LIBS)
...
...
@@ -289,8 +288,10 @@ EOD`
AC_MSG_CHECKING([consistency of all components of python development environment])
# save current global flags
ac_save_LIBS="$LIBS"
ac_save_LDFLAGS="$LDFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
AC_LANG_PUSH([C])
AC_LINK_IFELSE([
...
...
@@ -301,6 +302,7 @@ EOD`
# turn back to default flags
CPPFLAGS="$ac_save_CPPFLAGS"
LIBS="$ac_save_LIBS"
LDFLAGS="$ac_save_LDFLAGS"
AC_MSG_RESULT([$pythonexists])
...
...
@@ -308,8 +310,8 @@ EOD`
AC_MSG_FAILURE([
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the L
DFLAG
S environment variable.
Example: ./configure L
DFLAG
S="-L/usr/non-standard-path/python/lib"
via the L
IB
S environment variable.
Example: ./configure L
IB
S="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
...
...
src/python/Makefile.am
View file @
2638d8ba
...
...
@@ -18,7 +18,7 @@ check-local:
nosetests
-v
clean-local
:
-
rm
-f
sso/sso_c.py sso/sso_wrap.cpp sso/_sso_c.so
-
rm
-f
sso/sso_c.py sso/sso_wrap.cpp
$(
wildcard
sso/_sso_c.
*
so
)
$(PYTHON_SETUP_PY)
clean
--all
install-exec-local
:
...
...
src/python/setup.py
View file @
2638d8ba
...
...
@@ -22,14 +22,14 @@ if not os.getenv('BUILD_MODULE'):
# Run the build_ext command first (swig generates a Python file).
class
build_py
(
_build_py
):
def
run
(
self
):
self
.
run_command
(
"
build_ext
"
)
self
.
run_command
(
'
build_ext
'
)
return
_build_py
.
run
(
self
)
setup
(
name
=
'sso'
,
cmdclass
=
{
'build_py'
:
build_py
},
ext_modules
=
[
Extension
(
'sso._sso_c'
,
ext_sources
,
swig_opts
=
[
'-c++'
,
'-modern'
,
'-I'
+
top_srcdir
],
swig_opts
=
[
'-modern'
,
'-I'
+
top_srcdir
,
'-py3'
],
include_dirs
=
[
top_srcdir
],
libraries
=
libraries
,
library_dirs
=
[
SSO_LIB_DIR
],
...
...
src/python/sso/.gitignore
View file @
2638d8ba
_sso_c.so
sso_c.py
sso_wrap.c
pp
sso_wrap.c
src/python/sso/__init__.py
View file @
2638d8ba
#from sso_c import generate_keys, read_key_from_file, groups_overlap, Signer, Verifier, Ticket
from
sso_c
import
sso_generate_keys
as
generate_keys
from
sso_c
import
sso_ticket_new
,
sso_ticket_free
,
\
# Python 3 compatibility for basestring check as used in isinstance() below.
try
:
basestring
except
NameError
:
basestring
=
(
str
,
bytes
)
from
.sso_c
import
sso_generate_keys
as
generate_keys
from
.sso_c
import
sso_ticket_new
,
sso_ticket_free
,
\
sso_ticket_sign
,
sso_ticket_open
,
sso_strerror
,
\
sso_validate
...
...
@@ -28,7 +32,8 @@ class Ticket(object):
self
.
_tkt
=
tkt_or_user
def
__del__
(
self
):
sso_ticket_free
(
self
.
_tkt
)
if
hasattr
(
self
,
'_tkt'
):
sso_ticket_free
(
self
.
_tkt
)
def
__eq__
(
self
,
t2
):
return
(
self
.
user
()
==
t2
.
user
()
and
...
...
src/python/test/signer_test.py
View file @
2638d8ba
...
...
@@ -11,9 +11,9 @@ class SignerTest(unittest.TestCase):
def
_signok
(
self
,
tkt
):
signed
=
self
.
s
.
sign
(
tkt
)
self
.
assertTrue
(
isinstance
(
signed
,
b
asestring
))
self
.
assert
True
(
signed
!=
''
)
self
.
assertTrue
(
'user'
in
base64
.
urlsafe_b64decode
(
signed
))
self
.
assertTrue
(
isinstance
(
signed
,
b
ytes
))
self
.
assert
Greater
(
len
(
signed
),
0
)
#
self.assertTrue('user' in base64.urlsafe_b64decode(signed))
def
test_sign_ticket
(
self
):
self
.
_signok
(
sso
.
Ticket
(
'user'
,
'service'
,
'domain'
))
...
...
src/python/test/verifier_test.py
View file @
2638d8ba
from
__future__
import
print_function
import
base64
import
unittest
import
sso
...
...
@@ -27,7 +29,7 @@ class VerifierTest(unittest.TestCase):
tkt
=
sso
.
Ticket
(
'user'
,
'service/'
,
'domain'
,
groups
=
set
([
'group1'
]))
signed
=
self
.
_sign_token
(
tkt
)
print
'signed:'
,
signed
print
(
'signed:'
,
signed
)
v
=
sso
.
Verifier
(
self
.
public
,
'service/'
,
'domain'
,
self
.
groups
)
tkt2
=
v
.
verify
(
signed
)
...
...
@@ -61,8 +63,8 @@ class VerifierTest(unittest.TestCase):
class
KnownDataVerifierTest
(
unittest
.
TestCase
):
def
setUp
(
self
):
self
.
secret
=
'
\xd0\xd8\xe3
v
\x04\x91
_v
\x9f\x9e\xa3\xbb\xe2
wd
\x07\x89\xe4\xcc\x9a
}
\x11\xdd\xe8\xd6\xf2\xe3
^
\xa7\x03\xbe\x82\xc0\xda\xdb\xb4\x83
v[
\x05
]O
\x9f\xf5
UM
\x92\xb3\xed
zC?
\x15\xf4\xd8\xeb\xab\xbb\xd0
rQ
\x0b\xfe
#'
self
.
public
=
'
\xc0\xda\xdb\xb4\x83
v[
\x05
]O
\x9f\xf5
UM
\x92\xb3\xed
zC?
\x15\xf4\xd8\xeb\xab\xbb\xd0
rQ
\x0b\xfe
#'
self
.
secret
=
b
'
\xd0\xd8\xe3
v
\x04\x91
_v
\x9f\x9e\xa3\xbb\xe2
wd
\x07\x89\xe4\xcc\x9a
}
\x11\xdd\xe8\xd6\xf2\xe3
^
\xa7\x03\xbe\x82\xc0\xda\xdb\xb4\x83
v[
\x05
]O
\x9f\xf5
UM
\x92\xb3\xed
zC?
\x15\xf4\xd8\xeb\xab\xbb\xd0
rQ
\x0b\xfe
#'
self
.
public
=
b
'
\xc0\xda\xdb\xb4\x83
v[
\x05
]O
\x9f\xf5
UM
\x92\xb3\xed
zC?
\x15\xf4\xd8\xeb\xab\xbb\xd0
rQ
\x0b\xfe
#'
self
.
signer
=
sso
.
Signer
(
self
.
secret
)
self
.
verifier
=
sso
.
Verifier
(
self
.
public
,
'service/'
,
'sso.net'
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment